Ich beschäftige mich gerne mit neuen Technolgien. Zugegeben ist Kubernetes jetzt nicht wirklich neu, aber mir fehlten bisher einfach die Berührungspunkte damit. Das will ich nun ändern, denn ich finde das in dem Thema aktuell viel Bewegung ist. Alle relevanten Cloud Anbieter haben mittlerweile Kubernetes im Portfolio, VMware treibt mit Tanzu in die gleiche Richtung, IBM bzw. RedHat mit OpenShift ebenfalls.

Selbstverständlich kann man sich auch einfach bei einem der Anbieter mit einer Kreditkarte ein Konto erzeugen, dort einen Kubernetes Cluster einrichten und schauen wie das Geld auf der Karte weniger wird. Mir fehlt meistens die Zeit so etwas dann auch am Stück zu verfolgen, daher ist es für mich angenehmer wenn das Zeug einfach zuhause im LAN steht und ich es bei Bedarf einfach verwenden kann.

Natürlich gibt es auch Möglichkeiten das "mal eben schnell" in einer VM auf der eigenen Workstation zu starten z.B. mit minikube (https://minikube.sigs.k8s.io/docs/) oder kind (https://kind.sigs.k8s.io/). Persönlich läuft mir da aber zu viel automatisch ab, was ja im Prinzip super ist, aber wenn ich Zusammenhänge begreifen will hilft es mir wenn ich hin und wieder etwas anfassen muss.

Rancher hat vor einiger Zeit eine vom Volumen her abgespeckte Kubernetes Variante erstellt. k3s (https://k3s.io/). Angefixt vom Blogbeitrag von Alex Ellis  (https://blog.alexellis.io/test-drive-k3s-on-raspberry-pi/) und dessen OpenFaaS Projekt war klar, es wird ein Cluster aus Raspberries.

Also kurz eingelesen und eine Hardwareliste zusammengestellt:

Anzahl Beschreibung Zweck
4 Raspberry Pi4 4GB Master und Worker Nodes
4 Netzteil USB-C Strom
4 SD-Card 32GB raspbian OS
1 USB SSD 500GB NFS Storage
1 Geekpi Cluster Case Gehäuse, Kühlkörper + Lüfter

Obiges Setup wird nicht hochverfügbar, denn das NFS Share hängt nur am Masternode und wird auf die Worker exportiert und dort eingehängt. Es gibt zwar die Möglichkeit mit Longhorn, Ceph oder vergleichbaren Tools distributed Storage zu erzeugen, allerdings waren mir die ersten Anwenderberichte nicht geheuer. Bringt ja auch nichts wenn der Großteil der Cluster Ressourcen für die Storageprozesse draufgeht. Daher habe ich mich bewusst für eine Variante mit einem Master und dort angehängtem Storage in Form einer USB SSD entschieden (war auch unverschämt preiswert).

Das Setup ist recht einfach, das aktuelle Raspian OS Lite Image wird auf die SD Karten kopiert und ein leeres File "ssh" in dem Hauptverzeichnis der SD Karte angelegt. Danach wird die Karte in einen Pi gesteckt, dieser mit dem Netzwerk verbunden und angeschaltet. Sofern DHCP im LAN vorhanden ist kann man sich direkt auf den frisch gestarteten Pi mit ssh anmelden und die restlichen Einstellungen vornehmen.

Im Prinzip habe ich mich an die gute Kurzanleitung (https://github.com/alexellis/k3sup#-micro-tutorial-for-raspberry-pi-2-3-or-4-) gehalten. Damit war zumindest der Kubernetes Cluster relativ flott oben.

export KUBECONFIG=`pwd`/kubeconfig
kubectl get node
NAME     STATUS   ROLES    AGE   VERSION
phm-w3   Ready    <none>   16h   v1.19.8+k3s1
phm      Ready    master   16h   v1.19.8+k3s1
phm-w2   Ready    <none>   15h   v1.19.8+k3s1
phm-w1   Ready    <none>   16h   v1.19.8+k3s1

Mit Arkade (https://github.com/alexellis/arkade) ist ein Kubernetes-Dashboard oder andere evtl. notwendige Tools schnell deployed.

kubernetes-dashboard

Ich habe noch eine ganze Menge Komponenten und Tools auf der Liste der Cloud native computing foundation, welche ich mir in diesem Zusammenhang näher anschauen will. Die Vielfalt erschlägt einen zu Beginn. Wer selbst einen Einstieg sucht, der findet bei Microsoft ein kostenloses eBook (https://azure.microsoft.com/en-us/resources/kubernetes-ebook-collection/). Ob da nun Azure draufsteht oder nicht ist bei Kubernetes fast egal, im Prinzip kochen die Anbieter alle mit dem gleichen Wasser.