Einleitung
„Gemeinsam sind wir stark“. Den Spruch lernt man schon als Kind. Das ganze lässt sich auch auf die IT übertragen. Ein Raspberry Pi allein ist für die ein oder andere Applikation sicherlich ausreichend, doch bei größeren Projekten mit hoher Verfügbarkeit, kommt er an seine Grenzen.
Daher habe ich ein Kubernetes Cluster mit Microk8s aus mehren Raspberry Pis erstellt. Wie das funktioniert stelle ich im folgenden vor.
Vorkonfiguration von CGroup
Im ersten Schritt muss die cgroup konfiguriert werden. Diese hilft bei der virtualisierung. Dazu muss folgende Zeile in die Datei „/boot/firmware/cmdline.txt
“ hinzugefügt werden.
cgroup_enable=memory cgroup_memory=1
Microk8s installieren
Danach kann Microk8s über ein Snap-Paket installiert werden.
snap install microk8s --classic
Cluster erstellen und Server beitreten lassen
Als nächstes muss entschieden werden, welcher der Server der Cluster-Master werden soll. Auf diesem muss jetzt der folgende Befehl ausgeführt werden.
microk8s.add-node
Dadurch wird ein Cluster erstellt und der Beitritt des nächsten Servers vorbereitet.
Am Ende wird ein Befehl ausgegeben werden, der auf dem beitretenden Server ausgeführt werden muss. Dieser sieht in etwas so aus.
microk8s join <ip>:<port>/<string>
Das Prozedere wiederholt man solange, bis alle Server dem Cluster beigetreten sind.
Möchte man einen Server wieder aus dem Cluster entfernen, sollte man auf dem Server folgenden Befehl ausführen.
microk8s.leave
Dadurch sollte der Server das Cluster eigenständig verlassen. Wenn das nicht funktioniert, oder man keinen Zugriff auf den Server hat kann man ihn auch vom Master aus entfernen.
microk8s remove-node <name or IP>
Microk8s Konfiguration prüfen
Nun kann man prüfen ob Microk8s richtig konfiguriert wurde. Sollte es noch Probleme geben, werden diese am Ende ausgegeben.
microk8s.inspect
Nachdem alle Nodes (Server die zu dem Cluster gehören) richtig konfiguriert wurden, können wir prüfen ob alle Nodes erfolgreich beigetreten sind und arbeiten können.
microk8s.kubectl get nodes
Sollte ein neuer Node nicht aufgelistet sein, empfiehlt es sich zu warten. In meinem Fall hat der Beitritt teilweise bis zu 5 Minuten gedauert.
Sollte ein Node aufgeführt sein, aber auf noReady stehen, sollte man mit microk8s.inspect
erneut die Konfiguration prüfen.
Workloads
Wenn alle Nodes dem Cluster beigetreten sind und bereit sind zu arbeiten, kann die erste Workload deployt werden. Dazu wird zuerst ein sogenanntes Manifest angelegt. Dies ist eine yaml-Datei in der spezifiziert wird, was auf und wie auf dem Cluster deployt werden soll. Auf die Erstellung dieser yaml-Datei werde ich hier nicht werter eingehen.
microk8s.kubectl apply -f deployment.yaml
Möchte man ein Deployment aktualisieren, modifiziert man die yaml-Datei und führt den gleichen Befehl aus.
Danach kann man prüfen, welchen Status die pods, also die deployten Container haben.
microk8s.kubectl get pods -o wide
Um einen Service zu prüfen gibt es folgenden Befehl.
microk8s.kubectl get svc
Herzlichen Glückwunsch. Du solltest jetzt ein funktionierenden MicroK8s Cluster haben und kannst nun deine Applikationen mit Kubernetes deployn.
Nutzung im Homelab
In meinem Fall war zu beobachten, dass die Synchronisierung zwischen den verschiedenen Nodes sehr viel CPU Leistung benötigt. Es lohnt sich also nur bei größeren Clustern, da sonst ein einzelner Server effizienter wäre. In meinem HomeLab war Kubernetes daher keine praktische Lösung.