Bereits Kunde? Jetzt einloggen.
Lesezeit ca. 9 Min.

Kubernetes-Cluster: Raspberry-Pi-Cluster mit MicroK8s und Ubuntu 20.10: Flottenkapitän


Raspberry Pi Geek - epaper ⋅ Ausgabe 2/2021 vom 03.12.2020

Mithilfe von Canonicals minimaler Kubernetes-Implementierung MicroK8s lässt sich mit bescheidenen Mitteln ein Cluster aus mehreren RasPis realisieren.


Artikelbild für den Artikel "Kubernetes-Cluster: Raspberry-Pi-Cluster mit MicroK8s und Ubuntu 20.10: Flottenkapitän" aus der Ausgabe 2/2021 von Raspberry Pi Geek. Dieses epaper sofort kaufen oder online lesen mit der Zeitschriften-Flatrate United Kiosk NEWS.

Bildquelle: Raspberry Pi Geek, Ausgabe 2/2021

Die private Cloud zu Hause ist in Zeiten allgegenwärtiger Ausforschung der Privatsphäre eine Idee, mit der immer mehr Menschen sympathisieren. Dass wir unsere Daten, Anwendungen und Entwicklungsumgebungen auf diese Art günstig erstellen, verwalten und vorhalten können, will dieser Artikel aufzeigen. Er kombiniert zwei Erfolgsrezepte, die - obwohl in verschiedenen Welten zu Hause - für den Einstieg ein gutes Team bilden.

Überall zu Hause

Vom RasPi, der vor ...

Weiterlesen
epaper-Einzelheft 7,99€
NEWS 14 Tage gratis testen
Bereits gekauft?Anmelden & Lesen
Leseprobe: Abdruck mit freundlicher Genehmigung von Raspberry Pi Geek. Alle Rechte vorbehalten.

Mehr aus dieser Ausgabe

Titelbild der Ausgabe 2/2021 von Angetestet: Web-Vermittler. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Angetestet: Web-Vermittler
Titelbild der Ausgabe 2/2021 von Video-Archivar. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Video-Archivar
Titelbild der Ausgabe 2/2021 von Den Raspberry Pi im Blut, den C64 im Herzen: Himbeere komplett. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Den Raspberry Pi im Blut, den C64 im Herzen: Himbeere komplett
Titelbild der Ausgabe 2/2021 von detLFS: Ein minimales RasPi-OS selbst aus den Quellen erstellen: Selbst gestrickt. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
detLFS: Ein minimales RasPi-OS selbst aus den Quellen erstellen: Selbst gestrickt
Titelbild der Ausgabe 2/2021 von Octoprint: Mit Octoprint 3D-Drucker fernsteuern: Im 3D-Griff. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Octoprint: Mit Octoprint 3D-Drucker fernsteuern: Im 3D-Griff
Titelbild der Ausgabe 2/2021 von OpenSCAD: 3D-Modelle mit OpenSCAD programmieren statt konstruieren: Ganz einfach formen. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
OpenSCAD: 3D-Modelle mit OpenSCAD programmieren statt konstruieren: Ganz einfach formen
Vorheriger Artikel
Android 11: OmniROM mit Android 11 auf dem Raspberry Pi 4: Robote…
aus dieser Ausgabe
Nächster Artikel Moodlebox als lokale Lernplattform: Lernen leicht gemacht
aus dieser Ausgabe

... acht Jahren mit einem Bildungsauftrag gestartet ist und mittlerweile weit über 30 Millionen mal verkauft wurde, haben die meisten Computernutzer zumindest gehört. Viele nutzen einen oder mehrere der kleinen Rechner im privaten Umfeld. Auch in der Industrie ist der Mini-PC nicht mehr wegzudenken und übernimmt dort Automations- und Steuerungsaufgaben oder kommt als Testbasis für Proof-of-Concept-Untersuchungen (PoC) zum Einsatz. Der NetPi ist nur eine von mehreren Versionen des Winzlings für den Industrieeinsatz. In diesem Jahr stiegen unter anderem aufgrund der Corona-Pandemie die Verkaufszahlen des Raspberry Pi noch einmal signifikant. Aber nicht nur das, der kleine Rechner steht im Kampf gegen das Virus selbst in vorderster Front: So testen Medizinforscher an mehreren Universitäten verschiedene Open-Source- Ventilatoren für Beatmungsgeräte. Diese stammen aus dem 3D-Drucker und werden mit freier Software auf einem Raspberry Pi betrieben.

K8s und MicroK8s

Wir bleiben aber im privaten Bereich, indem wir eine Anwendung einbeziehen, die für das Big Business konzipiert wurde. Kubernetes , die bekannteste Orchestrierungssoftware für Linux-Container in der Cloud, ist als Begriff zwar allgegenwärtig, doch das Konzept bleibt für viele Nutzer oft schwammig, da sie dafür vermeintlich keinen Einsatzzweck haben. Das wollen wir ändern, indem wir beispielhaft zwei Raspberry Pi 4 zu einem Cluster verbinden und Canonicals minimale Kubernetes-Implementierung MicroK8s zur sogenannten Orchestrierung verwenden.

Bei Kubernetes, oder kurz K8s, handelt es sich um eine von Google entwickelte Open-Source-Plattform, hinter der mittlerweile eine große Community steht, die das Projekt weiterentwickelt und pflegt. Was als einfaches Tool begann, entwickelte sich in den letzten Jahren zu einer Plattform für das Bereitstellen, Überwachen und Verwalten von Anwendungen und Diensten über Clouds hinweg.

Der Dirigent

Was bedeutet in diesem Zusammenhang der Begriff Orchestrierung? Der aus der klassischen Musik entlehnte Begriff bezeichnet in der IT das Automatisieren und Koordinieren von Rechnern, deren Diensten und Prozessen sowie die Kombination dieser Teile zu einem Workflow. Die kleinste Einheit von K8s, mit der Sie es zu tun bekommen, ist ein Pod, der aus einem oder mehreren Containern besteht. Container sind in diesem Zusammenhang virtuelle Behältnisse, die Anwendungen für mehr Sicherheit gegeneinander und nach außen hin isolieren.

Das System unterstützt selbstverständlich mehr als zwei Rechner, dabei ändert sich am hier beschriebenen Vorgehen grundsätzlich nichts. MicroK8s erlaubt sogar einen Single-Node-Cluster, um den es hier aber nicht gehen soll. Um einen geordneten Aufbau zu gewährleisten, stecken die für den Bericht genutzten Mini-Rechner in einem Cluster Case der Firma PiHut. Es kostet inklusive Lüfter für zwei Einheiten rund 10 Euro und ist nach oben unbegrenzt erweiterbar 1.

Kubernetes ist ein komplexes System. Wir können daher hier nur an der Oberfläche kratzen, bieten aber damit einen Ausgangspunkt für eigene Recherchen und Experimente. Das Aufsetzen von Docker und Kubernetes sowie vielen anderen damit in Zusammenhang stehenden Anwendungen gestaltet sich für Anwender, die sich nicht täglich damit beschäftigen, komplex und fehleranfällig.

MicroK8s als Einstieg

Wir haben daher nach einem Weg gesucht, den Einstieg für Experimente mit K8s möglichst einfach zu halten, und wurden bei Canonical fündig. Das Unternehmen hinter Ubuntu verdient sein Geld mittlerweile im Enterprise-Segment mit Angeboten rund um die Cloud. In diesem Rahmen bietet es eine eigene Version von K8s an, die sie MicroK8s nennt. Weitere Möglichkeiten, Kubernetes lokal zu erkunden, sind beispielsweise Minikube und K3S

Dateien zum Artikel herunterladen unter

www.raspi-geek.de/dl/45172

1 Das Cluster Case von PiHut sorgt für einen geordneten Aufbau und bringt pro Einheit zwei Lüfter mit, die sich für den Dauerbetrieb des Raspberry Pi 4 empfehlen.


Der Artikel gliedert sich in zwei Teile: In diesem ersten Teil beschreiben wir das Aufsetzen eines Clusters und dessen Inbetriebnahme. Der zweite Teil erscheint im nächsten Heft und beschäftigt sich mit den Einsatzmöglichkeiten des Raspberry- Pi-Clusters bei Ihnen zu Hause.

Was brauchen Sie nun, um in diese Welt hineinzuschnuppern? Neben der gewünschten Anzahl von RasPi-4-Geräten mit 4 GByte RAM und der entsprechenden Anzahl von SD-Karten mit einer Größe von mindestens 8 GByte benötigen Sie ein Betriebssystem als Grundlage. Da wir im weiteren Verlauf ARM64/ AArch64-Container-Images verwenden wollen und das offizielle Raspberry Pi OS derzeit noch keine offizielle 64-Bit Version anbietet, entschieden wir uns für Ubuntu 20.10 Server in der ARM64-Architektur . Das sollte auch Kompatibilität garantieren, da beide essenziellen Zutaten aus demselben Haus stammen.

2 Nach erfolgreichem Start und der ersten Initialisierung von Ubuntu Server zeigt das Terminal einige Systeminformationen an, neben der Temperatur der CPU unter anderem auch die jeweilige IP-Adresse.


3 Nach der Installation von MicroK8s verschaffen Sie sich einen Überblick über die Installation und erhalten zudem eine Übersicht über die verfügbaren Befehle.


Achten Sie beim Herunterladen von Ubuntu Server darauf, explizit die 64-Bit- Version für den RasPi 4 auszuwählen.

Falls sich für Ihren Anwendungsfall die Desktop-Variante besser eignet, können Sie auch diese verwenden. Soll der Cluster im Dauerbetrieb laufen, empfiehlt es sich, den Rechnern jeweils einen Lüfter zu spendieren.

Zudem vergeben Sie für die RasPis auf dem Router jeweils eine feste IP-Adresse für Ihr Netzwerk sowie einen eigenen Hostnamen, wie etwa ubuntu0, ubuntu1 und so weiter. Falls Sie den Cluster zusätzlich von außerhalb des lokalen Netzes erreichen möchten, setzen Sie außerdem einen dynamischen DNS-Dienst auf.

Installation

Der erste Schritt nach dem Herunterladen des Betriebssystems ist das Entpacken des Archivs mit der Endung .xz in ein Abbild mit der Endung .img. Dieses Image schreiben Sie nun auf die entsprechenden SD-Karten. Nachdem Sie den ersten RasPi gestartet haben, dauert es ein paar Minuten, bis ein User angelegt ist und ein Prompt erscheint.

User und Passwort lauten ubuntu; das Passwort müssen Sie nach der ersten Anmeldung ändern. Daraufhin zeigt das Terminal verschiedene Informationen an, unter anderem auch die IPv4- und IPv6- Adressen. Sie sollten sich die IP-Adresse samt Hostnamen notieren, da ja zumindest noch eine weitere folgt 2.

Listing 1

$ sudo groupadd docker
$ sudo usermod ‑aG docker $USER
$ newgrp docker
$ sudo systemctl daemon‑reload
$ sudo systemctl restart docker
$ sudo systemctl enable docker

Docker bereitstellen

Beim anschließenden Versuch, uns per SSH zu verbinden, stellten wir erfreut fest, dass Ubuntu hier seit unserem letzten Versuch nachgelegt und die Voraussetzungen für den SSH-Zugang bereits installiert und aktiviert hat. Das erspart langwierige Vorbereitungen.

Bevor es an die Installation von MicroK8s geht, stellen Sie zunächst Docker bereit, um später Container zu erstellen. Das erledigen Sie mit dem Befehl sudo apt install docker.io, der in etwa 270 MByte auf den RasPi spült, was einen Moment dauert. Dann bereiten Sie Docker auf seine Aufgaben vor (Listing 1).

Zur besseren Verwaltung der Ressourcen und Isolation der Container durch MicroK8s konfigurieren Sie anschließend die Kernel-Funktion Control Groups (Cgroups ). Den jetzigen Konfigurationsstand lassen Sie sich per sudo docker info anzeigen. Am Ende sehen Sie einige Warnungen, die Sie für die Nutzung mit MicroK8s beheben müssen. Zudem wird als Cgroup-Driver cgroups angezeigt. Auch das sollten Sie ändern, damit Systemd die Verwaltung übernimmt.

Zunächst erstellen Sie mit dem Kommando sudo nano /etc/docker/ daemon.json die Datei daemon.json und befüllen Sie mit den Anweisungen aus Listing 2. Danach passen Sie noch die Kernel-Zeile in der Datei /boot/firmware/ cmdline.txt an, um weitere Cgroup-Funktionen zu aktivieren.

Um die Anweisungen automatisch richtig zu platzieren, bedienen Sie sich des Stream-Editors Sed - den entsprechenden Befehl finden Sie in der ersten Zeile von Listing 3. Anschließend überzeugen Sie sich vom Erfolg der Aktion (zweite Zeile).

Nach einem Reboot des RasPi sollte der Befehl sudo docker info nun das gewünschte Ergebnis zeigen. Sie können als schnellen Funktionstest einen Container mit einem minimalen Ubuntu erstellen (Zeile 4), der Sie mit einem Root-Terminal eines eingebetteten Ubuntu innerhalb Ihrer Ubuntu-Installation ausstattet.

MicroK8s installieren

Jetzt ist das System bereit für die Installation von MicroK8s. Dazu dienen die Befehle aus Listing 4. Eigentlich ließe sich das Paket mit nur einem Befehl einspielen, doch das funktionierte im Test nicht, sodass wir mit dem zweiten Befehl die Version aktualisieren mussten. Einen Weg, MicroK8s ohne Snapd zu installieren, konnten wir nicht finden.

Informationen über das installierte Paket erhalten Sie dann mittels snap info microk8s. Damit haben Sie neben der installierten Version immer auch Informati- onen über die verfügbaren Befehle und die bereits aktivierten Dienste zur Hand. Weitere Dienste lassen sich über Addons hinzufügen 3.

Listing 2

{ "exec‑opts": ["native. cgroupdriver=systemd"],
"log‑driver": "json‑file",
"log‑opts": {
"max‑size": "100m" },
"storage‑driver": "overlay2" }

4 Das Hinzufügen von Leaf-Nodes zum Cluster verläuft in zwei Schritten: Zunächst wird auf dem Master der Code zum Einbinden erzeugt. Er besteht aus der IP und dem Port des Masters, individualisiert durch ein Token. Den String übertragen Sie dann auf den Leaf.


5 Einige Sekunden nach dem Join-Befehl auf dem Leaf zeigt eine Abfrage auf dem Master den neu hinzugefügten Knoten.


Weitere Infos und interessante Links

www.raspi-geek.de/qr/45172

6 MicroK8s arbeitet mit Erweiterungen; in der Standardkonfiguration sind allerdings nur wenige der Dienste aktiv. Eine Statusabfrage zeigt die bereits aktivierten Addons. Weitere Erweiterungen listet die Webseite auf.


Zu guter Letzt fügen Sie den Standard- User ubuntu der Gruppe microk8s hinzu und machen ihn zum Besitzer des Verzeichnisses ~/.kube/ (Listing 5).

Cluster aufsetzen

Damit sind die Vorbereitungen erledigt, die Sie auf allen Knoten des Clusters vornehmen müssen. Jetzt geht es ans Aufsetzen des Clusters. Wählen Sie einen RasPi aus, der als Master-Node dienen soll, also als Kontrollrechner. Die weiteren Rechner im Cluster koppeln sich als Leaf- Nodes (Rechenknoten) an den Master.
Haben Sie sich für einen Master-Node entschieden, führen Sie auf dem entsprechenden RasPi den Befehl sudo microk8s. add‑node zum Hinzufügen von Leafs zum Cluster aus. Die Rückgabe erfolgt als String im Format IP_Master‑Pi: Port/token. Den Befehl zum Beitritt eines Knotens geben Sie auf dem entsprechenden Leaf-Pi ein; er folgt dem bereits erwähnten Schema in der Form microk8s. join IP-Adresse_Master‑Pi:Port/ token 4.

Knoten hinzufügen

Haben Sie im ersten Schritt alles richtig gemacht, sollte nach wenigen Sekunden der Befehl microk8s.kubectl get nodes auf dem Master den Leaf-Node zeigen 5.
Bei Bedarf entfernen Sie ein Leaf mit dem Kommando microk8s remove‑node Node,
wobei Sie den Namen des gewünschten Nodes der Ausgabe des vorigen Befehls entnehmen.

Listing 3

01 $ sudo sed ‑i '$ s/$/ cgroup_enable=cpuset cgroup_ enable=memory cgroup_memory=1 swapaccount=1/' /boot/ firmware/cmdline.txt
02 $ cat /boot/firmware/cmdline. txt
03 […]
04 $ sudo docker run ‑it ubuntu bash

Listing 4

$ sudo snap install microk8s ‑‑classic ‑‑channel=1.18/stable
$ sudo snap refresh microk8s ‑‑classic ‑‑channel=1.19/stable

Listing 5

$ sudo usermod ‑a ‑G microk8s ubuntu
$ sudo chown ‑f ‑R ubuntu ~/.kube

7 Nach dem Aktivieren der benötigten Dienste per Addon bereiten Sie das Dashboard vor. Die ausgegebene IP und das Token geben Sie anschließend in den Browser ein.


Jetzt ist ein guter Zeitpunkt, einen Alias zu setzen, um den Befehl microk8s.kubectl auf kubectl zu verkürzen, da Sie diesen häufiger anwenden werden. Das erreichen Sie im Terminal mit dem Kommando sudo snap alias microk8s.kubectl kubectl.

Module per Addon

Um leichtgewichtig zu bleiben, installiert MicroK8s nur die Module, die es benötigt, um grundsätzlich zu funktionieren. Dem Bedarf weiterer Dienste trägt es durch Addons Rechnung. Eine Liste verfügbarer Addons liefert microk8s status 6. Weitere, zum Teil nicht vorinstallierte Erweiterungen listet Canonical auf seiner Webseite auf. Nach der Aktivierung über das Kommando microk8s enable Addon funktionieren die Erweiterungen meist umgehend und ohne weitere Konfiguration.

Ein Beispiel für die Verwendung von Addons bietet das Kubernetes-Dashboard, das die Kontrolle des Clusters via Webbrowser erlaubt. Dazu müssen Sie vier Addons aktivieren, was Sie mittels microk8s enable dashboard dns registry istio erledigen. Daraufhin besorgen Sie sich die benötigten Zugangsdaten auf dem Master-Node mittels microk8s dashboard‑proxy. Die Ausgabe enthält eine URL und ein Token 7. In unserem Fall erhielten wir eine URL, die auf Localhost verwies, was aber nicht funktionierte.

8 Nach Eingabe der IP-Adresse und des Ports im Webbrowser fragt eine Maske das zuvor erzeugte Token ab. Im Test funktionierte das allerdings nur mit Firefox, Google Chrome verweigerte den Zugang aus Sicherheitsgründen.


9 Im Kubernetes-Dashboard lässt sich der Cluster grafisch verwalten. Den bereits vorhandenen Steuerungsmechanismen kann man über die Anwendung Heapster weitere Metriken hinzufügen. Die Installation erfolgt dabei über das Paketmanager-Addon Helm.


10 „Hello World“ ist ein beliebtes Beispiel, um die Funktionstüchtigkeit von Webanwendungen zu testen. Für diesen Zweck gibt es auch ein kleines Docker-Image.


Nachdem wir 127.0.0.1 gegen die IPAdresse (falls die Namensauflösung funktioniert, auch den Rechnernamen) unseres Masters getauscht hatten, klappte es - allerdings nicht beim ersten Versuch in Chrome. Googles Browser verweigerte aus Sicherheitsgründen strikt den Zugang, eine Ausnahme war nicht möglich. Firefox erlaubte hingegen, eine Ausnahme zu wählen, und stellte nach Eingabe des Tokens 8 das Dashboard dar 9.

Zum Abschluss dieses ersten Teils noch ein kleines Hello-World-Beispiel: Die ersten beiden Befehle aus Abbildung 0 laden, wenn Sie diese auf dem Master abgesetzen, ein Docker-Image und erstellen einen Container. Der dritte exponiert dann den vergebenen Port, den Sie per http://IP‑Adresse:Port verwenden, um in Ihrem ersten Pod den Dienst im Browser anzuzeigen.

Fazit und Ausblick

Nachdem Sie sich nun die Grundlagen von MicroK8s erarbeitet haben, steht dem Versuch des Umstiegs auf das mächtigere Kubernetes nichts im Weg. Im zweiten Teil des Artikels widmen wir uns in der nächsten Ausgabe dem sinnvollen Einsatz von MicroK8s für die private Cloud. In der Zwischenzeit können Sie sich mit der Befehlsreferenz und der Dokumentation zu MicroK8s und Kubernetes beschäftigen. (cla/jlu)

README

Kubernetes ist die bekannteste Container- Orchestrierung am Markt. Mittlerweile erfordert K8s, wie der Dienst abgekürzt heißt, mit seinen vielen Zusatzdiensten einiges an Know-how bei der Installation.