Raspberry Pi Kubernetes Cluster bauen – Master
Die bisherige Konfiguration war für alle Raspberry Pis im Cluster gleich. In diesem Artikel folgen nun die Schritte die nur am Master ausgeführt werden müssen. Der Master ist bei mir der leistungsfähigste der Raspberry Pi Nodes. Das muss aber nicht sein!
Raspberry Pi Kubernetes Cluster bauen – Master
Für die folgenden Schritte sind am Master Raspberry Pi auszuführen und sind die Kubernetes Master Konfiguration. Der Rechner heißt bei mir master-pi3. Nähere Informationen rund um die Konfiguration von kubeadm findet man in der Kubernates Dokumentation.
sudo kubeadm config images pull -v3
Im nächsten Schritt wird Kubernetes initialisiert:
sudo kubeadm init --token-ttl=0
Mit dem zusätzlichen Parameter token-ttl=0 setzen wir die Lebenszeit des Tokens auf unendlich, so werden diese nie ungültig. Laut Dokumentation ist das aber in einem Echtbetrieb keine gute Idee!
Wir folgen nun der Handlungsanweisung aus der Ausgabe. Neuen Ordner im home Verzeichnis erstellen und die Basiskonfiguration kopieren. Weiters setzen wir auch noch die nötigen Rechte auf die Datei:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Wir kopieren uns die admin.config Datei ins Heimatverzeichnis (/home/pi/.kube). Ihr dürft euch gerne die Datei ansehen. Sie enthält erzeugte Zertifikate.
Wenn alles korrekt durchgelaufen ist, dann zeigt uns der Befehl
kubectl get nodes
den neu erstellten Master Node an. Lasst euch von dem NotReady Status nicht verunsichern. Damit der Node funktioniert muss noch ein Container Netzwerk installiert werden. Zuerst kümmern wir uns jedoch um die Worker Nodes.
In der Ausgabe von kubeadm init findet man unten eine Zeile mit kubadm join … diese kopieren wir nun! Wir brauchen diese Zeile um später Worker dem Cluster zuzuweisen. Wichtig sind da das Token und der Hash. Damit sind wir auch schon fertig. Leider klappt die Konfiguration nicht immer so einfach. Ich habe in einer Sammlung alle möglichen Fehler protokolliert auf die ich so gestoßen bin.
Mögliche Fehlerquellen
Während der Konfiguration des Master Nodes bin ich über einige Fehler gestolpert. Solltet ihr auch Schwierigkeiten haben findet ihr in meinen Tipps hoffentlich die nötigen Informationen.
Some fatal errors occured:
Ich dürfte beim ersten init etwas falsch gemacht haben, es wurde mir nach einer Zeit folgende Meldung angezeigt:
sudo kubeadm reset
hat die Kubernetes Konfiguration wieder zurückgesetzt, bei der nächsten Ausführung von kubeadm init wie oben beschrieben hat er dann alles korrekt aufgesetzt.
detected „cgroupfs“ as the Docker cgroup driver
Einen Lösungshinweis findet man auf der Kubernetes GitHub Seite. Variante 1 hat mir geholfen, d.h. die Anlage der Datei /etc/docker/daemon.json mit dem JSON code. Mit folgenden Befehl wird docker neu gestartet:
sudo systemctl restart docker
Nach einem kubeadm reset und neuerlicher kubeadm init wurde der Fehler nicht mehr angezeigt.
Timeout
Am Raspberry Pi seht ihr sehr wahrscheinlich eine Fehlermeldung bezüglich eines Timeout:
Laut der Meldung schaut es aus, als wäre die Initialisierung schief gegangen. Der Aufruf von
kubectl get nodes
liefert kein Ergebnis. Keine Angst, das dürfte normal sein. Ein kurzer Blick auf die laufenden Tasks zeigt eine hohe Auslastung von Kubernetes Prozessen die laufen:
Abwarten und Tee trinken ist nun eine gute Idee. Nach 10 – 15 Minuten zeigt mir kubectl get nodes den Master an. Siehe dazu den Screenshot weiter oben.
Fazit
Die Einrichtung vom Kubernetes Master Raspberry Pi war ganz schön spannend. Man kann einige Fehler machen und die langsame Hardware führt gerne zu einem Timeout Fehler, der gar keiner ist. Ob der Cluster mit diesen Problemen später performant ist? Alles weitere in den folgenden Artikeln. Wir starten mit der Konfiguration der anderen 3 Raspberry Pis welche als Worker Nodes arbeiten werden.
Alle Artikel dieser Serie: