Local Kubernetes Development with microk8s

Still in search of a Kubernetes development environment I can run on my development machine that somewhat replicates, I was recently introduced to both the multipass and microk8s projects from Canonical.

multipass is a prerequisite for microk8s, so let’s start there. With multipass, you can easily launch and run Ubuntu virtual machines with a single command.

1
2
3
❯ multipass launch --name foo

Launched: foo

With a virtual machine in hand, you can run execute arbitrary commands on the machine using the exec subcommand.

1
2
3
4
5
6
7
❯ multipass shell foo

...

ubuntu@foo:~$ pwd
/home/ubuntu
ubuntu@foo:~$ logout

And of course you can manage your VMs by stopping, starting, or deleting them with single commands. Full details and documentation is available at multipass.run.

When running microk8s on a macOs environment, it leverages multipass for creating the underlying Ubuntu VM that microk8s will be installed to. You can see this VM using the multipass ls command.

1
2
3
4
❯ multipass ls
Name                    State             IPv4             Image
microk8s-vm             Running           192.168.64.2     Ubuntu 18.04 LTS
                                          10.1.254.64

The nice thing about microk8s is that it bundles the Kubernetes services you most commonly would want to use into the microk8s distribution. So with a single command you can enable any services you are likely to use. In this example, I enable the Kubernetes dashboard, Core DNS, and a container registry so I can easily deploy applications to the cluster.

1
❯ microk8s enable dashboard dns registry

Enable kubectl to access the microk8s distribution is done using the microk8s config and adding the output to the $HOME/.kube/config file.

1
❯ microk8s config > $HOME/.kube/config

And lastly, one of my favourite features of microk8s is the ability to reset a cluster to a working state.

1
❯ microk8s reset --destroy-storage

I’ve found micropass and microk8s both very useful for local development. Multipass gives you easy to use and configure Ubuntu-based development environments where you can keep all of your development dependencies isolated between projects. If your development team also uses Kubernetes, the microk8s project can create simple Kubernetes deployments that use the standard Kubernetes APIs.

See also