Ich baue mir zuhause einen Kubernetes-Cluster, um Anwendungen darin zu betreiben und verschiedene GitOps-Techniken auszuprobieren. Ich nutze auf meinem bisherigen Server eine Anzahl von Containern wie NextCloud, Jellyfin oder Vaultwarden. Die Container sind aktuell nur in der Oberfläche von Unraid per Mausklick organisiert. Ich möchte nun zum einen die Organisation in Form von Code festhalten und zum anderen auch die Abtrennung der Anwendungen in Namespaces und eigene Netze strikter gestalten. Dazu möchte ich Kubernetes und GitOps-Methoden verwenden, damit ich die Organisation in einem Git-Repository voller YAML-Dateien möglichst vollständig abbilden kann.

Andere Beiträge

Dieser Beitrag ist Teil einer Reihe von Blogposts. Ich betreibe zuhause einen Kubernetes-Cluster, in dem ich ein paar Anwendungen wie Nextcloud, Jellyfin oder Vaultwarden betreibe.

Der Plan: K3s für Kubernetes, Flux für GitOps und Helm für Deployments

Vorweg eine grobe Skizze meines Plans zum Setup:

  • K3s als Kubernetes-Distribution - zuerst mit Rancher Desktop für den Prototyp auf dem Laptop und dann mit k3os als VM(s) auf meinem Server im Schlafzimmer
  • traefik als Reverse Proxy (Ingress)
  • NFS von meinem UnRAID-Server für Netzwerk-Storage im produktiven Betrieb
  • fluxcd für Continuous Delivery der Kubernetes-Konfiguration, Schlagwort GitOps
  • GitHub um das Git-Repository mit Konfiguration zentral abzulegen. GitLab oder eigene Git-Repositories gehen auch.

Kubernetes aufsetzen auf dem Laptop mit Rancher Desktop

Zuerst möchte ich einen Prototyp auf meinem MacBook mit M1-CPU anlegen. Kubernetes setzt auf Linux-Container, die unter macOS oder Windows nicht ohne weiteres lauffähig sind. Um hier Container und Kubernetes betreiben zu können, ist eine Linux-VM mit installierter Container-Runtime notwendig. Statt diese VM selbst aufzusetzen und dort eine Container Runtime wie Docker zu installieren, bietet sich hier die Verwendung einer fertigen Lösung an. Meine Wahl fällt auf Rancher Desktop. Damit wird die Installation einer virtuellen Maschine, containerd sowie k3s als Kubernetes-Distribution mitgeliefert.

K3s hat den Vorteil, dass es sich besonders gut für den Betrieb kleinerer Installationen eignet. Für Problemfälle wie Storage, Ingress und Load Balancer kommen bereits sinnvolle Standard-Lösungen vorkonfiguriert mit. Dadurch eignet sich k3s hervorragend für lokale Prototypen und Entwicklung; dennoch bleibt für einen späteren Einsatz auf einem Server ausreichend Flexibilität, Komponenten wie Netzwerkspeicher nachzuinstallieren.

Installation von Rancher Desktop

Die Installation von Rancher Desktop ist einfach:

Nach der Installation und nach dem Start von Rancher Desktop laufen die Container Runtime und die lokale Kubernetes-Installation. Außerdem sind dann die zur Verwaltung notwendigen Tools auf der Kommandozeile verfügbar:

  • docker als Frontend für die Container Runtime
  • kubectl zur Bedienung von Kubernetes
  • helm um im Kubernetes fertige Rezepte (Charts) zu installieren

Für kubectl wurde der Konfiguration in ~/.kube/config außerdem auch bereits ein Context hinzugefügt, also die Angabe der Serveradressen um K3s zu erreichen und Zertifikate zur Authentifizierung.

Ausprobieren

Nach Abschluss der Installation sollte auf einer Shell bereits die Nutzung des Clusters möglich sein. Ein schneller Test ist einfach:

$ kubectl run --rm -i -t --image=busybox busybox -- sh
If you do not see a command prompt, try pressing enter.
/ # echo Hurra
Hurra
/ # exit
Session ended, resume using 'kubectl attach busybox -c busybox -i -t' command when the pod is running
pod "busybox" deleted