Installation von Kubernetes auf einem Raspberry Pi Cluster

Kubernetes wird in Rechenzentren bei Cloudanbietern eingesetzt, um dort containerisierte Anwendungen zu orchestrieren.

Ein beliebtes Raspberry PI Projekt ist die Installation eines solchen Clusters auf diesen kleinen Rechnern, z.B. um damit die Funktionsweise zu erlernen oder zu testen.

Ich habe mir ein solches Cluster aufgebaut, und will es heute in groben Zügen vorstellen.

Rechenzentren

Ein typisches Rechenzentrum beheimatet viele Server, auf denen die einzelnen Anwendungen laufen. Die Anwendungen stehen dann den Usern über das Internet zur Verfügung.

Container

Typischerweise werden die Anwendungen nicht wie am heimischen PC direkt auf dem Rechner installiert, sondern werden in Containern verpackt. Ein solcher Container bringt neben der eigentlichen Anwendung die notwendige Laufzeitumgebung mit. Dies macht es möglich, daß ein Container frei verschoben oder skaliert werden kann, ohne, daß die Anwendung davon etwas mitbekommt.

Rechenzentren müssen ihren Kunden Service Level Agreements garantieren, d.h u.a. Parameter wie Verfügbarkeit, oder Performance sicherstellen. Daher sind solche Container nicht statisch, sondern werden dynamisch installiert, bzw deinstalliert. Normalerweise laufen in einem Rechenzentrum sehr viele solcher Container, und müssen entsprechend orchestriert werden.

Kubernetes

Kubernetes ist einer der bekannten Orchestrierungsframeworks, und zeichnet sich laut Homepage wie folgt aus:

„Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.“

Raspberry PI

Seit einiger Zeit ist es möglich, Kubernetes auf ARM Rechnern, wie dem Raspberry Pi zu installieren. Im Internet kursieren entsprechend viele Beschreibungen, wie man dabei vorgeht, und welche Hardware man benötigt.

Einkaufsliste

Eine brauchbare Einkaufsliste finden Sie in dem unten verlinkten Artikel „Setting up a Kubernetes 1.11 Raspberry Pi Cluster using kubeadm„.

Installation des Images

Für die Installation habe ich die Lösung und Beschreibung der Firma Hypriot benutzt.

Dabei zeigt „Releasing HypriotOS 1.8.0: Raspberry Pi 3 B+, Stretch and more„, wie man ein spezielles dockerfähiges Image auf den Raspberry Pi Rechnern installiert. Besonders interessant ist, daß man eigene Konfigurationen („Cloud Init“) nutzen kann, die das Image dann passend einstellen (z.B WLAN Zugang).

Der Prozess funktioniert wie angegeben, wobei ich festgestellt habe, daß die die Konfigurationsdateien für „Cloud Init“ sehr sensibel sind – ein Leerzeichen zuviel und die Installation scheitert. Der erwähnte Artikel erwähnt ein „rainbow.yml“, das gut klappt. Damit kann man anfangen, sollte sich aber an das Format halten.

Ein zweites Problem ist, daß die Beschreibung leicht veraltet ist. Z.B werden die Konfigurationen nicht in einer Konfigurationsdatei gespeichert, wie in einem Befehl angeben, sondern müssen nach „user-data“ gespielt werden.

Kubernetes

Der Artikel „Setup Kubernetes on a Raspberry Pi Cluster easily the official way!“ zur Inbetriebnahme von Kubernetes ist ebenfalls leicht veraltet, klappt aber im Großen und Ganzen wie beschrieben.

Abweichend zur Beschreibung mußte ich ganz am Anfang der Installation folgende Befehle benutzen (diese werden weiter unten in den Kommentaren erwähnt):

#sudo iptables -A FORWARD -i cni0 -j ACCEPT

#sudo iptables -A FORWARD -o cni0 -j ACCEPT

# sysctl net.bridge.bridge-nf-call-iptables=1

Weiter unten im Skript treten dann Probleme beim Starten von Flannel auf („CrashLoopBackOff“). Dabei handelt es sich um einen Bug, der mit Hypriot 1.9. auftritt. Den Workaround habe ich in „flannel.1 link gets 2 ipv4 addresses on secondary nodes“ gefunden.

Danach lief mein Cluster bestehend aus einem Master und drei Nodes.

Praxis

Sobald das Cluster läuft kann man interessante Experimente damit machen. Ein Klassiker ist, daß man ausprobiert, was passiert wenn ein Rechner ausfällt.

Wenn Sie den Stecker ziehen, werden Sie feststellen, daß der Kubernetes Master dies merkt und den betroffenen Container auf einem anderen Rechner neu startet. Auf Hochdeutsch: Der Nutzer bemerkt den Ausfall nicht, während die Orchestrierung die notwendigen Aktionen sicherstellt – ganz so, wie es sein soll.

Weiterführende Informationen

Das Original dieses Artikels ist auf Der Produktmanager erschienen (©Andreas Rudolph). Folgeartikel zum Thema gibt es über die (→Mailingliste), oder indem Sie →mir auf Twitter folgen.

In der Online Version des Artikels finden Sie hier die versprochenen weiterführenden Links:

Comments are closed.