Himbeercluster (k3s) Teil 2: Software Setup

Weil wir auf dem Raspberry Pi unterwegs sind liegt natürlich nichts näher als Raspbian als OS für das Cluster zu wählen. Entscheidet man sich bei
den Varianten statt für k3s zum Beispiel für microk8s würde sich eventuell Ubuntu empfehlen, da beide Produkte aus der Feder von Canonical stammen. Rancher bietet auch ein eigenes leichtgewichtiges OS für den Betrieb von k3s
an (Rancher OS), zum Zeitpunkt zu dem der Autor für die Erstellung der
Inhalte dieses Buches herumexperimentiert gab es aber (noch) keine Version,
die wirklich mit dem Raspberry Pi 4 kompatibel war. Also Raspbian… Allerdings brauchen wir hier vieles der normalen Version nicht. Eine grafische Benutzeroberfläche ist für den Betrieb in einem Cluster zum Beispiel völlig unnötig. Daher werden wir unser Cluster auf der Lite Version von Raspbian aufbauen. Da diese zum Zeitpunkt, an dem ich die Kapitel für mein Buch geschrieben habe nur in einer 32bit Variante vorlag müssen wir hier noch etwas dran basteln.

Inzwischen gibt die 64bit Variante immerhin schon in einer Beta Version, die aktuell auch bei mir im Betrieb ist. Nach der Erläuterung der notwendigen Konfigurationen für die 32bit Variante werde ich daher auch noch mal kurz auf die Konfigurationsunterschiede zur 64bit Variante eingehen.

Vorbereitungen:

Ich kann nur DRINGEND empfehlen, den Raspberry Pi Imager (zu finden hier: https://www.raspberrypi.com/software/) zu verwenden, da dieser einem das Leben doch sehr erleichtert. Damit flashen wir nun Raspbian Lite (oder wie es eigentlich nun heißt: Raspberry OS lite) auf eine SD Karte. Es empfiehlt sich hier schon über das Super-Top-Secret-Spezial-Menü (*hust* Strg+X *hust*) SSH zu aktivieren, ein Passwort zu setzen und der Himbeere einen sinnvollen Hostnamen zu geben.

Die fertig geflashte SD Karte wandert dann in die Himbeere und die an den Strom. Nun heißt es etwas Geduld haben und den kleinen Rechner einmal booten und die SD Karte einrichten lassen. Nach diesem ersten Boot (zum feststellen ob die kleine Kiste gebootet hat empfiehlt sich die Kiste einfach anzupingen) muss der Pi wieder runtergefahren und die SD Karte entfernt werden.

Im nächsten Schritt öffnen wir die SD Karte mit unserem Hauptrechner und bearbeiten zwei Dateien:

Die erste Datei ist die bootconfig, auch bekannt als config.txt. Dort fügen wir ganz am Ende die folgende Zeile hinzu:

arm_64bit=1

Hiermit fordern wir Raspberry OS auf den 64bit Kernel zu nutzen. Als Nächstes müssen wir die Datei cmdline.txt ergänzen. Hier fügen wir am Ende der Zeile (KEINE neue Zeile) folgende Parameter an:

cgroup_memory=1 cgroup_enable=memory

Diese beiden Argumente sind etwas schwerer in wenigen Zeilen zu erklären, aber die Kurzfassung ist, dass sich mit den cgroups auf Linux zusammengehörige Prozesse gruppieren und organisieren lassen. Grade beim Thema Ressourcenmanagement sind cgroups hilfreich. Hier aktivieren wir das memory-Subsystem, was speziell den Speicherbedarf der gruppierten Prozesse kontrolliert.

Damit sind die Vorbereitungen weitestgehend abgeschlossen. Alles was jetzt noch nötig ist können wir direkt auf der Himbeere erledigen. Also SD Karte wieder im Raspi versenkt, den kleinen Rechenknecht an den Strom gehangen und die Konsole aufgemacht.

Raspi Vorbereitungen:

Im letzten Abschnitt haben wir in der bootconfig den Raspi aufgefordert den 64bit Kernel zu verwenden. Diesen müssen wir nun auch im ersten Schritt einmal updaten. Also flugs eine SSH Verbindung zum kleinen Taschencomputer aufgebaut und folgendes in die Tastatur gehackt:

$ sudo rpi-update

Das kann nun etwas dauern (Kaffee irgendjemand?). Wenn das Update durchgelaufen ist wird die kleine Kiste einmal neugestartet mit:

$ sudo reboot

Nun kommt das reguläre einrichten des Raspberry Pi via raspi-config. Da wir in der lite Version von Raspberry OS allerdings keine grafische Oberfläche zur Bedienung haben (und wir ja auch via SSH mit der Kiste Verbunden sind) muss das ganze über die Konsole passieren. Aufgerufen wird das Ganze mit:

$ sudo raspi-config

Das Menü ist vom Inhalt her das gleiche wie man es von der Desktop Bedienung her gewohnt ist. Im „Performance“ Menü setzen wir den für die GPU reservierten Speicher auf 16MB herunter und im „Localisation„-Menü können wir die deutschen Sprachdateien erzeugen. Das ist aber ggf. optional. Nun gehen wir noch in die „Advanced Options“ und aktivieren die Funktion „Expand Filesystem“ um Raspberry OS dazu zu bringen den kompletten Speicherplatz der SD Karte zu nutzen. Nach Bedarf kann jetzt noch der Wifi Zugang eingerichtet werden. Für ein Cluster empfiehlt sich aber üblicherweise eine Netzwerkverbindung via Kabel. Ist alles eingerichtet kommt -Überraschung- wieder ein reboot.

Ist die Kiste wieder anwesend muss im nächsten Schritt einmal die vorhandene Software aktualisiert werden. Das geht ganz klassisch mit:

$ sudo apt-get update && sudo apt-get upgrade

Das Update wird wieder einen Moment dauern, da es einiges zu tun geben wird. Wenn das Upgrade durchgelaufen ist folgt, mal wieder, ein:

$ sudo reboot

Nun fehlt nur noch eine Kleinigkeit um die Vorbereitungsarbeiten abzuschließen. Damit die Netzwerkkommunikation zwischen den Cluster Knoten mit k3s nachher richtig funktioniert müssen wir noch iptables auf die legacy Version umstellen. Das geht folgendermaßen:

$ sudo iptables -F

$ sudo update-alternatives --set iptables /usr/sbin/iptables-legacy

$ sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

$ sudo reboot

Damit sind die Vorbereitungsarbeiten ENDLICH abgeschlossen. Diese Arbeiten müssen für jeden Raspberry Pi vorgenommen werden, der nachher als Teil des Clusters laufen soll. In nicht übermäßig ferner Zukunft werde ich dafür vermutlich auch auf meinem GitHub Account ein Ansible Playbook zur Verfügung stellen.

Und was ist nun mit der versprochenen 64bit-Beta Version???

Jaaaajaaa, nicht drängeln. Zunächst einmal brauchen wir das Image. Leider ist das nicht im Raspberry Pi Imager hinterlegt, aber wir können es hier (https://downloads.raspberrypi.org/raspios_lite_arm64/images/) runterladen. Auch wenn es „nur“ eine Beta Version ist, ich habe mein Cluster jetzt seit annähernd einem halbem Jahr auf Basis dieser Version im Betrieb und konnte (noch) keine Probleme feststellen. Von den oben erwähnten Schritten können wir uns beim Verwenden der Beta Version alles sparen, was mit dem Kernel zu tun hat. Dementsprechend müssen wir die bootconfig nicht anpassen und auch kein Firmware Update mit rpi-update durchführen.

Im nächsten Abschnitt folgt dann die Installation von k3s auf den Knoten des Clustert.

Himbeeren und Reptilien?

Leider gibt es schlechte Nachrichten. Also fast, je nach Perspektive. Wie das so ist mit dem „echten Leben“ kommt ja doch gerne mal alles anders als man denkt (oder geplant hat), weswegen sich mein erstes Buch wohl noch verzögern wird. Da sich der Fokus auch ändern wird und ich nicht alle bereits geschriebenen Teile weiterverwenden können werde habe ich beschlossen die Kapitel hier als Blogeinträge zu veröffentlichen.

Das Buch sollte ursprünglich einen Überblick darüber geben, was man mit meiner Lieblingssprache Python und dem guten, alten Raspberry Pi so alles anstellen kann. Daher werden hier in den nächsten Wochen Artikel zu den folgenden Themen erscheinen:

  • Kurze Einführung in Python und OOP
  • Kurze Einführung in die Mehrzweckhimbeere
  • GPIO mit Python
  • Webentwicklung auf dem Raspberry Pi
  • Der Raspi im Netzwerk
  • Clustering mit dem Raspberry Pi

Erscheinen werden die Artikel vermutlich in wilder Reihenfolge (logische Folge wäre halt auch zu einfach), beginnend mit dem Setup von Kubernetes in Form von k3s auf Raspis, in Kombination mit dem Rancher Dashboard.