DEV Community

Cover image for K3S on your dev box with multipass
Ashok Nagaraj
Ashok Nagaraj

Posted on

4 3

K3S on your dev box with multipass

In this post we will understand how to get a working kubernetes instance on your mac (or other development machine

Step 1: Install multipass

Multipass is a lightweight VM manager Linux, windows and Mac. It is useful for creating a Ubuntu sandbox quickly without VirtualBox, Parallels or other VM managers.

❯ brew install multipass
Running `brew update --preinstall`...
==> Downloading https://github.com/canonical/multipass/releases/download/v1.9.0/multipass-1.9.0+mac-Darwin.pkg
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/114128199/8e737c39-9608-4e94-a230-641237a83b7a?X-Amz
######################################################################## 100.0%
==> Installing Cask multipass
==> Running installer for multipass; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
Password:
installer: Package name is multipass
installer: Installing at base path /
installer: The install was successful.
🍺  multipass was successfully installed!

❯ multipass version
multipass   1.9.0+mac
multipassd  1.9.0+mac
Enter fullscreen mode Exit fullscreen mode
Step 2: Launch a Ubuntu VM instance
❯ multipass launch --name k3s-demo --cpus 2 --mem 4g --disk 20g
Launched: k3s-demo

❯ multipass info k3s-demo
Name:           k3s-demo
State:          Running
IPv4:           192.168.64.3
Release:        Ubuntu 20.04.4 LTS
Image hash:     147e0cea207e (Ubuntu 20.04 LTS)
Load:           0.90 0.26 0.09
Disk usage:     1.3G out of 19.2G
Memory usage:   158.4M out of 3.8G
Mounts:         --
Enter fullscreen mode Exit fullscreen mode
Step 3: Install k3s
❯ multipass exec k3s-demo -- bash -c "curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" sh -"

[INFO]  Finding release for channel stable
[INFO]  Using v1.23.6+k3s1 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.23.6+k3s1/sha256sum-arm64.txt
[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.23.6+k3s1/k3s-arm64
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Skipping installation of SELinux RPM
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

Enter fullscreen mode Exit fullscreen mode
Step 4: Configure k3s to be used from host
# Get the instance IPK3S_IP=$(multipass info k3s-demo | grep IPv4 | awk '{print $2}')echo $K3S_IP
192.168.64.3

# Get the admin yaml
❯ multipass exec k3s-demo sudo cat /etc/rancher/k3s/k3s.yaml > ${HOME}/k3s.conf

# Update the IP address to the one mapped by multipasssed -i "s/127.0.0.1/${K3S_IP}/" ${HOME}/k3s.conf

❯ chmod 600 ${HOME}/k3s.conf

Enter fullscreen mode Exit fullscreen mode
Step 5: Verify that everything works
export KUBECONFIG=${HOME}/k3s.conf

❯ kubectl get nodes
NAME       STATUS   ROLES                  AGE   VERSION
k3s-demo   Ready    control-plane,master   13m   v1.23.6+k3s1

❯ kubectl run test-pod --image=nginx --restart=Never
pod/test-pod created

❯ kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
test-pod   1/1     Running   0          88s

❯ kubectl expose pod/test-pod --port=80 --type=NodePort
service/test-pod exposed

❯ kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE   SELECTOR
kubernetes   ClusterIP   10.43.0.1     <none>        443/TCP        25m   <none>
test-pod     NodePort    10.43.73.25   <none>        80:31388/TCP   5s    run=test-pod

❯ curl -I ${K3S_IP}:31388
HTTP/1.1 200 OK
Server: nginx/1.21.6
Date: Thu, 26 May 2022 07:17:02 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 25 Jan 2022 15:03:52 GMT
Connection: keep-alive
ETag: "61f01158-267"
Accept-Ranges: bytes

Enter fullscreen mode Exit fullscreen mode

multipass housekeeping
  • List all instances
❯ multipass list
Name                    State             IPv4             Image
k3s-demo                Running           192.168.64.3     Ubuntu 20.04 LTS
k3s-demo2               Running           192.168.64.4     Ubuntu 20.04 LTS

Enter fullscreen mode Exit fullscreen mode
  • Delete an instance
❯ multipass delete k3s-demo2

Enter fullscreen mode Exit fullscreen mode
  • Purge and recover resources from deleted instances
❯ multipass purge

Enter fullscreen mode Exit fullscreen mode

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more