Veröffentlicht am 25. November 2024
In diesem Artikel erkläre ich euch kurz, wie mein technisches Setup lokal aussieht. Damit ermögliche ich euch, die anderen Tutorials / Blogbeiträge besser zu verstehen (vor allem wenn ich über spezifische Nodes, IPs und Anwendungen schreibe).
Ich wollte schon länger ein technisches Setup, mit dem ich Fähigkeiten im Umgang mit Kubernetes vertiefen kann. Dabei war es mir wichtig, den Multi-Node-Modus zu trainieren – also ein realistisches Setup, das sich von der typischen Docker-Umgebung unterscheidet. Ich möchte euch zeigen, wie sich ein Kubernetes-Cluster verhält, wenn mehrere Knoten miteinander kommunizieren, und so euer und mein Wissen über verteilte Systeme erweitern.
Außerdem möchte ich euch die einzelnen Bestandteile von Kubernetes besser beleuchten. Indem ihr einen „Bare-Metal“-Cluster selbst aufsetzt, kommt ihr viel direkter mit Komponenten wie etcd
, kubelet
oder kube-proxy
in Kontakt. Dieses tiefergehende Verständnis hilft nicht nur beim Debuggen, sondern gibt euch auch die Fähigkeit, Kubernetes in Zukunft gezielt anzupassen und Probleme schneller zu lösen.
Ein weiterer Punkt, der mich motiviert hat, war der Wunsch, mehr mit Raspberry Pis zu arbeiten. Sie bieten eine tolle Möglichkeit, kostengünstig und praktisch an Clustern zu arbeiten. Gleichzeitig lernt man, wie man Hardware-Ressourcen sinnvoll nutzt und ein System betreibt, das sich an echten Produktionsumgebungen orientiert.
Dieses Setup ist für mich eine perfekte Kombination aus Lernen, Experimentieren und Hands-on-Erfahrung.
Für mein Cluster-Experiment habe ich mir vier Raspberry Pi 4 Model B mit jeweils 4 GB SDRAM bestellt. Die Wahl fiel auf dieses Modell, da es für meine Anforderungen gut geeignet ist und genügend Leistung bietet. Tatsächlich sollte das Setup auch mit Modellen mit 2 GB RAM problemlos laufen. Wenn du mehr über das Modell erfahren möchtest, hier ist der Link zu den technischen Details: Raspberry Pi 4 Model B – 4 GB SDRAM.
Zusätzlich habe ich vier 64 GB SanDisk Extreme Speicherkarten geholt, um genug Speicherplatz für das Betriebssystem und die späteren Anwendungen zu haben. Auf diese Speicherkarten habe ich Debian 12 (Bookworm) installiert. Für Raspberry Pi gibt es dafür speziell angepasste Images, die du hier findest: Debian für Raspberry Pi.
Um das Setup übersichtlich und gut organisiert zu halten, verwende ich ein kompaktes Raspberry Pi Rack. Es hilft mir, die Geräte sauber an einem Ort unterzubringen und sorgt gleichzeitig für bessere Kühlung. Details dazu gibt es hier: Raspberry Pi Rack.
Mein Plan für die vier Raspberry Pis sah wie folgt aus:
Für die Installation von Kubernetes habe ich mich bewusst dafür entschieden, keinen Installer wie kubeadm
zu verwenden. Stattdessen wollte ich den Cluster Schritt für Schritt manuell aufsetzen, um die Funktionsweise der einzelnen Komponenten besser zu verstehen. Dabei hat mir ein extrem hilfreiches Tutorial von Kelsey Hightower geholfen: Kubernetes The Hard Way.
Dieses Tutorial ist eine echte Goldgrube, wenn es darum geht, die Grundlagen von Kubernetes zu lernen und alle wichtigen Setup-Schritte eigenständig durchzuführen. Es beleuchtet Bereiche, die bei vielen automatisierten Installationsmethoden im Hintergrund bleiben, wie zum Beispiel:
Dieses Vorgehen ist zwar zeitaufwendiger, aber es lohnt sich! Du lernst die Architektur von Kubernetes auf einer viel tieferen Ebene kennen und verstehst genau, wie die einzelnen Komponenten zusammenspielen. Für jeden, der Kubernetes wirklich meistern möchte, ist dieses Tutorial ein absolutes Muss.
Wenn du also Interesse hast, Kubernetes „von Hand“ aufzusetzen, kann ich dir dieses Tutorial nur wärmstens empfehlen. Es ist zwar eine Herausforderung, aber auch eine der besten Möglichkeiten, um tief in die Materie einzutauchen.
Nachdem mein Cluster eingerichtet war, habe ich direkt einige Anwendungen installiert, um die Umgebung produktiv zu nutzen und weiter zu testen.
Auf dem Cluster habe ich Cilium installiert, ein leistungsstarkes Networking- und Sicherheits-Tool für Kubernetes. Cilium ersetzt das Standard-Netzwerk-Plugin (CNI) und bietet erweiterte Networking-Funktionen wie:
Cilium hilft mir dabei, das Netzwerkverhalten innerhalb des Clusters besser zu verstehen und erweiterte Features wie Load-Balancing oder Observability zu testen.
Auf meinem Jumphost habe ich Gitea installiert, einen schlanken und einfach zu bedienenden privaten Git-Service. Gitea bietet mir die Möglichkeit, meine Projekte zentral zu verwalten, ohne auf externe Plattformen wie GitHub oder GitLab angewiesen zu sein.
Besondere Vorteile von Gitea:
Nach der Installation und Konfiguration sieht mein Kubernetes-Cluster jetzt folgendermaßen aus:
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-0 Ready <none> 64d v1.28.3 192.168.2.183 <none> Debian GNU/Linux 12 (bookworm) 6.1.0-25-arm64 containerd://1.7.8
node-1 Ready <none> 64d v1.28.3 192.168.2.184 <none> Debian GNU/Linux 12 (bookworm) 6.1.0-25-arm64 containerd://1.7.8
$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.2.182:6443
CoreDNS is running at https://192.168.2.182:6443/api/v1/namespaces/kube-system/services/coredns:udp-53/proxy
Um effizient mit meinem Kubernetes-Cluster zu arbeiten, nutze ich OpenLens. Diese grafische Benutzeroberfläche für Kubernetes macht es deutlich einfacher, den Status des Clusters zu überwachen, Ressourcen zu verwalten und Workloads direkt zu kontrollieren.
Mit diesem Aufbau habe ich ein leistungsstarkes und übersichtliches Cluster, das sowohl für Lernzwecke als auch für echte Anwendungen genutzt werden kann. Es bietet mir nicht nur die Möglichkeit, Kubernetes im Detail zu verstehen, sondern auch praktische Anwendungen wie Gitea direkt produktiv einzusetzen.