Lokales Kubernetes: Size Matters!

Lokales Kubernetes – Size Matters!

Avatar von Max Tharr

In einem unserer internen Projekte haben wir lokale Kubernetes-Cluster eingeführt, damit wir lokale Änderungen in einem Production-artigen Setup ausprobieren können. Der Grund dafür ist, dass die Software als Open Source möglichst von jedem schnell ausprobiert und selbst gehostet werden können soll.

Lokales Kubernetes

Unsere Anforderungen waren relativ einfach: die Software soll auf allen Laptops im Dev-Team laufen und möglichst einfach aufzusetzen sein. Bonus: Installation über den Nix-Package-Manager, mit dem wir das notwendige Tooling für unser Projekt verwalten

Unter den berücksichtigten Alternativen konnten wir zwei direkt aussieben:

  • Docker Desktop: Unterstützt nicht alle Linux-Distributionen, die wir im Team haben. Außerdem war es uns nicht leichtgewichtig genug.
  • k3s: Läuft nativ nicht auf MacOS.

Es blieben übrig:

Wir haben einfach mal mit Minikube gestartet und waren anfangs sehr erfreut, wie schnell und einfach erste Schritte gingen. Vor allem out-of-the-box mit einem Befehl ( minikube dashboard  ) eine grafische Übersicht zu bekommen, hat den Einstieg vor allem für Kollegen erleichtert, die das erste mal mit Kubernetes arbeiten. 

Eine weitere Möglichkeit – die wir aber nicht berücksichtigt haben – ist Microk8s. Microk8s ist schon länger eine Option für lokale Kubernetes-Cluster. Es kam für uns leider nicht in Frage, da es nicht containerisiert läuft und nicht für den Nix-Package-Manager gepackaged ist. 

Warum dauert das so lange, bis ich endlich loslegen kann?

Bei Kollegen, die im Home-Office keine Glasfaser haben, ist dann schnell aufgefallen, dass Minikube ein sehr großes Docker-Image für seinen Cluster herunterlädt. Daraufhin haben wir die Größe der Installationen verglichen. Die Binaries sind alle im zweistelligen MB-Bereich, aber die Container-Images für den Cluster unterscheiden sich erheblich:

ToolImage-RepoImage-Größe
Minikube
gcr.io/k8s-minikube/kicbase:v0.0.36
1.02 GB
Kindhttps://hub.docker.com/layers/kindest/node/v1.25.3823.56 MB
k3dhttps://hub.docker.com/layers/rancher/k3s/v1.21.7-k3s1161.82 MB (plus 58 MB  k3d-Images) = 220 MB

Warum ist mir das wichtig?

Für einen Frontend-Dev, der mal schnell lokal ein Production-artige Umgebung haben möchte, oder einen Backend-Dev, der gerade mal überprüfen will, wie sein Code funktioniert, wenn 10 Pods parallel auf die Datenbank zugreifen, macht es kaum einen Unterschied, welches lokale Kubernetes die Ressourcen ausführt. Es soll halt gehen. Da wir als Deployment-Tool Skaffold benutzen, sieht man beim Entwicklen auch wenig davon.

Ob allerdings erstmal ein Gigabyte an Docker-Image heruntergeladen wird oder 220 MB, fällt beim ersten Aufsetzen schon auf. Vor allem auch, wenn jemand von außerhalb vom Team eigentlich nur schnell drei Kommandos ausführen will, um in einer eigenen, lokalen Instanz unsere Software auszuprobieren und damit herumzuspielen.

Für Devs, die am Kubernetes-Setup arbeiten, spielen andere Argumente sicherlich eine größere Rolle. Aber aus meiner Sicht ist der beste lokale Cluster der, der vom ganzen Team akzeptiert wird – bei Bedarf können Teammitglieder ja auch problemlos einen anderen verwenden.

Avatar von Max Tharr

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Für das Handling unseres Newsletters nutzen wir den Dienst HubSpot. Mehr Informationen, insbesondere auch zu Deinem Widerrufsrecht, kannst Du jederzeit unserer Datenschutzerklärung entnehmen.