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:
The ranking of the LinkedIn Poll is:
minkube
is the favourite tool for the 50%.k3s
andkind
have the same use quota of 20%.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:
kind
: Vanilla K8s. Manages multiple clusters on Docker. It’s great, I always have Docker installed.minikube
: Vanilla K8s. Manages multiple clusters also on VMs. Heavier than kind.k3s
: Custom distro. Manages one cluster with a single binary file. Some nice features for devs.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 😅.