Local Kubernetes for devs

These days I’m learning how to develop Kubernetes operators in Go. Although I had developed programs in Go before, I never did that to extend Kubernetes. For this, a running cluster is required.

So, I needed a Kubernetes cluster. The best option for this was to create a local one. Using a local Kubernetes cluster as development environment saves costs and reduces workload and time. Fortunately I have experience managing single node clusters with different distros.

With minikube I did my first Kubernetes administration courses. It is a complete tool that can run on different systems, such as VirtualBox, Qemu, and Docker. It’s a good candidate for development because it can handle multiple clusters.

I have used k3s and microk8s to implement single node Kubernetes clusters. They are reliable, light, fast and easy to handle systems but I feel them less confortable for development. As they are complete Kubernetes distributions, they can handle only one cluster and they give less flexibility than minikube or kind. They’re not my favourites, but you can use them for development if you prefer.

And browsing between websites and more websites, I discovered kind, a tool for running local Kubernetes clusters using Docker containers as cluster nodes. It can manage several multi-node clusters in a single machine using kubeadm under the hood. It’s lightweight, fast and simple. Installation is as easy as installing a go module.

I was curious about what people were using right now to deploy their local Kubernetes clusters for development, so I asked. I launched a three-day survey on LinkedIn and here are the results:

LinkedIn poll results

The ranking of the LinkedIn Poll is:

  1. minkube is the favourite tool for the 50%.
  2. k3s and kind have the same use quota of 20%.
  3. MicroK8s: Is the less popular with a usage of 10%.

My opinion is different, keep in mind that I still have a lot to learn and that it may vary over time. Here you have my ranking and some reasons:

  1. kind: Vanilla K8s. Manages multiple clusters on Docker. It’s great, I always have Docker installed.
  2. minikube: Vanilla K8s. Manages multiple clusters also on VMs. Heavier than kind.
  3. k3s: Custom distro. Manages one cluster with a single binary file. Some nice features for devs.
  4. microk8s: Custom distro. Manages one cluster. Packaged as Snap. 😱

It’s been fun discovering the whole ecosystem around Kubernetes. Now I have to continue learning how to develop operators and I won’t have time to test kubeadm in the near future 😡. I hope to remember this in the future and give it a try 😅.