Was ist Kubernetes
diesen Artikel gibt es auch auf englisch: What is Kubernetes?
Kubernetes ist mehr als nur ein Buzzword – es ist das Rückgrat moderner Cloud-Infrastrukturen.
In diesem Blogartikel nehme ich dich mit auf eine spannende Reise: Gemeinsam bauen wir Schritt für Schritt einen eigenen Kubernetes-Cluster mit K3s auf – bestehend aus einer Control Plane (Master) und zwei Worker-Knoten.
Dabei lernst du nicht nur, was Kubernetes eigentlich ist und wie ein Cluster im Innersten funktioniert, sondern auch, welche Voraussetzungen du brauchst, um es selbst erfolgreich zu betreiben. Und weil Hochverfügbarkeit in produktiven Umgebungen entscheidend ist, zeige ich dir ebenfalls, was einen High Availability Cluster ausmacht – und worauf du achten musst, wenn du ihn wirklich stabil und sicher betreiben willst.
Zuerst führe ich dich durch die manuelle Installation – damit du ein tiees Verständnis für jeden einzelnen Schritt bekommst. Danach stelle ich dir den K3Nova vor: ein von mir entwickeltes Tool, das den Cluster-Aufbau automatisiert und dich mit klar strukturierten Anleitungen durch den Prozess begleitet.
Warum habe ich K3Nova entwickelt?
Die Welt von Kubernetes und Cloud-Native-Technologien ist faszinierend – aber der Einstieg ist oft steinig. Komplexe Architektur, unzählige YAML-Dateien, verwirrende CLI-Befehle und ein scheinbar endloser Dschungel an Tools und Konzepten. Gerade als Softwareentwickler:in will man doch einfach loslegen: Anwendungen entwickeln, testen, iterieren. Doch bevor es überhaupt so weit ist, steht häufig ein Berg an Infrastrukturarbeit im Weg.
Genau hier setzt K3Nova an:
Ich habe K3Nova entwickelt, weil ich überzeugt bin, dass der Zugang zu Kubernetes deutlich einfacher sein muss – vor allem für Entwickler:innen, die nicht gleich zum Kubernetes-Administrator werden wollen, sondern einfach eine produktionsnahe Umgebung zum Ausprobieren und Entwickeln brauchen.
Mit K3Nova verfolge ich drei zentrale Ziele:
-
Barrieren abbauen
Ich möchte dir den Einstieg in die Cloud-Native- und Kubernetes-Welt so leicht wie möglich machen – egal, ob du gerade erst anfängst oder dein Wissen vertiefen willst. -
Verständnis fördern
Durch einen geführten, strukturierten Setup-Prozess lernst du, wie ein Kubernetes-Cluster funktioniert – von der Control Plane über Worker Nodes bis hin zu Themen wie Ingress, Registry, NFS und Monitoring. So bekommst du schnell ein besseres Gefühl für die Konzepte hinter Kubernetes, ohne dich in der Komplexität zu verlieren. -
Schnell startklar sein
Mit wenigen Klicks oder einem einfachen Befehl kannst du dir lokal eine vollständige, realitätsnahe Kubernetes-Umgebung aufsetzen – ohne manuelle Konfigurationsarbeit, ohne zeitraubende Recherche. Du kannst direkt mit dem entwickeln beginnen – genau dafür ist K3Nova gemacht.
So kannst du dich voll auf das konzentrieren, was dir wichtig ist: die Entwicklung moderner Anwendungen.
K3Nova ist nicht einfach nur ein weiteres Tool in der endlosen Liste von Kubernetes-Werkzeugen.
Es ist aus der Praxis heraus entstanden – aus Frustration über unnötige Komplexität und aus dem Wunsch, Dinge einfacher, verständlicher und zugänglicher zu machen. K3Nova richtet sich an alle, die Kubernetes wirklich verstehen und nutzen wollen, ohne sich durch unzählige Hürden kämpfen zu müssen.
Es ist mein persönlicher Versuch, eine Brücke zu schlagen: Zwischen Theorie und Praxis, zwischen Komplexität und Klarheit, zwischen Infrastruktur und Entwicklung.
Wenn du neugierig bist, wie ein Kubernetes-Cluster aufgebaut ist, wie du ihn lokal selbst betreiben kannst und dabei gleichzeitig ein Gespür für Cloud-Native Architekturen entwickeln willst – dann ist K3Nova genau für dich gedacht.
Mein Ziel ist es, dir nicht einfach nur Wissen zu vermitteln – ich möchte dich für Kubernetes begeistern und dir zeigen, wie viel Freude es macht, eine eigene Infrastruktur aufzubauen, zu verstehen und zu beherrschen.
Warum ist Kubernetes in der Cloud-Native-Welt so wichtig ist?
Kubernetes (K8s) ist das Betriebssystem der modernen Cloud. Es orchestriert deine Container, automatisiert Deployments, skaliert deine Anwendungen bei Bedarf – und sorgt dafür, dass alles stabil läuft, selbst wenn einzelne Teile ausfallen.
In einer Welt, in der Software ständig schneller, verteilter und dynamischer wird, bietet Kubernetes genau das, was du brauchst: Selbstheilung, Skalierbarkeit, Portabilität – und das Ganze plattformunabhängig, ob in der Cloud oder On-Premises.
Cloud-Native bedeutet: flexibel, robust, automatisiert – und Kubernetes ist das Fundament dafür. Es macht dich unabhängig von Cloud-Anbietern, gibt dir die volle Kontrolle über deine Infrastruktur und öffnet die Tür zu einem riesigen Ökosystem moderner Tools wie Prometheus, Helm oder GitOps.
Jetzt geht loos!
1. Voraussetzungen
- Drei Ubuntu-Server (VMs oder physisch) mit Ubuntu Server und Root-Rechten
- SSH-Zugang zu allen Hosts (Passwort oder SSH-Key)
- Lokaler Rechner mit installiertem Git
1.2. Ubuntu Server mit SSH-Server einrichten
1.2.1 Voraussetzungen
- Ubuntu 20.04, 22.04 oder neuer (Server oder Desktop)
- Root-Zugang oder ein Benutzer mit
sudo
-Rechten
1.2.2 OpenSSH-Server installieren
sudo apt update
sudo apt install openssh-server -y
1.2.3 Überprüfen, ob der SSH-Dienst läuft
sudo systemctl status ssh
Du solltest eine Ausgabe sehen wie:
● ssh.service - OpenBSD Secure Shell server
Active: active (running)
Falls nicht:
sudo systemctl enable --now ssh
1.2.4 IP-Adresse des Servers ermitteln
Damit du dich später verbinden kannst:
ip a
Oder:
hostname -I
Notiere dir die IP-Adresse des Netzwerkschnittstelle z. B.
192.168.1.100
1.2.5 SSH-Server sicher konfigurieren (optional, aber empfohlen)
Die Konfigurationsdatei liegt unter:
sudo nano /etc/ssh/sshd_config
Hier ein sicherer Basissatz an Einstellungen:
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
AllowUsers andrej
💡 Wichtig: Nur
PasswordAuthentication no
setzen, wenn Public-Key-Login funktioniert, sonst sperrst du dich aus.
Änderungen übernehmen:
sudo systemctl reload ssh
1.2.6 Firewall konfigurieren (UFW – falls aktiv)
sudo ufw allow OpenSSH
sudo ufw enable
🔒 Das erlaubt eingehende Verbindungen auf Port 22 (Standard für SSH).
1.2.7 Verbindung testen
Auf deinem lokalen Rechner (Linux, macOS oder Git-Bash / PuTTY unter Windows):
ssh kubernete@192.168.1.100
Wenn alles richtig eingerichtet ist, solltest du direkt verbunden werden – entweder über Passwort oder über den SSH-Key.
1.2.8 Bonus: Port ändern (für Sicherheit durch Verschleierung)
Ändere in /etc/ssh/sshd_config
:
Port 2222
Dann:
sudo ufw allow 2222/tcp
sudo systemctl restart ssh
Und künftig so verbinden:
ssh -p 2222 andrej@192.168.1.100
1.2.9 Tipps zur Sicherheit
Maßnahme | Beschreibung |
---|---|
Root-Login deaktivieren | PermitRootLogin no |
Nur bestimmte User zulassen | AllowUsers oder AllowGroups |
Fail2Ban installieren | Schutz vor Brute-Force-Angriffen (sudo apt install fail2ban ) |
SSH-Key statt Passwort | Höhere Sicherheit durch kryptografische Authentifizierung |
Firewall einrichten | Nur notwendige Ports öffnen |
1.3. Repository klonen und Umgebung vorbereiten
Bevor wir mit der Installation beginnen können, müssen wir das K3Nova-Repository klonen. Dieses enthält die vorkompilierte Binary sowie alle notwendigen Konfigurationsdateien, die für die Einrichtung des Clusters erforderlich sind.
Führe dazu die folgenden Befehle aus:
# Klone das k3s_installation-Repository
git clone https://github.com/AndrejSchefer/K3Nova.git
cd K3Nova
Im Verzeichnis K3Nova
findest du:
- die K3Nova-Binaries, mit der du die Cluster-Installation über die Kommandozeile steuern kannst.
- Die vorbereitete Konfigurationsdateien (z. B.
config/k3nova-config.json.tpl
), mit denen du das Setup deines Clusters individuell anpassen kannst
1.4. Konfiguration anpassen
Erstelle aus der Vorlage config/k3nova-config.json.tpl
eine Datei config/k3nove-config.json
und trage die Zugangsdaten für einen Master und zwei Worker ein. Beispiel:
{
"masters": [
{
"ip": "192.168.56.10", # Master node IP address
"ssh_user": "ubuntu", # SSH user for master
"ssh_pass": "yourpassword", # SSH password for master
"cluster_init": false
}
],
"workers": [
{
"ip": "192.168.56.11", # Worker node 1 IP address
"ssh_user": "ubuntu", # SSH user for worker
"ssh_pass": "yourpassword", # SSH password for worker
"cluster_init": false
},
{
"ip": "192.168.56.12", # Worker node 2 IP address
"ssh_user": "ubuntu", # SSH user for worker
"ssh_pass": "yourpassword", # SSH password for worker
"cluster_init": false
}
],
"k3s_token_file": "master-node-token", # Path to token file
"docker_registry": {
"url": "registry.local",
"pvc_storagy_capacity": "10Gi",
"pass": "123456",
"user": "registry",
"local": true
},
"redis": {
"url": "redis.local",
"pvc_storage_capacity": "10Gi",
"pass": "123456",
"user": "registry",
"image": "redis:8.0.2",
"local": true
},
"nfs": {
"network_CIDR": "192.168.179.0/24",
"nfs_server": "192.168.179.12",
"nfs_user": "kubernetes",
"nfs_pass": "123456",
"server": "10.0.0.10",
"export": "/mnt/k3s-nfs-localstorage",
"capacity": "100Gi"
},
"email": "public@andrejschefer.de",
"domain": "igneos.cloud",
"cluster_issuer_name": "letsencrypt-prod"
}
2. Installiere eine Control-Plane und zwei worker
Nachdem du das Repository erfolgreich geklont hast, kannst du nun die K3Nova-Binary für dein Betriebssystem ausführbar machen und starten. Im folgenden Beispiel zeigen wir, wie du die Linux-Version (k3nova-linux-amd64
) einrichtest:
# Am Beispiel Linux
mv k3nova-linux-amd64 k3nova
chmod +x k3nova
./k3nova
- Zuerst wird die heruntergeladene Binary umbenannt, um sie einfacher per Befehl auszuführen (
mv
). - Anschließend wird die Datei mit
chmod +x
ausführbar gemacht. - Mit
./k3nova
startest du das Tool direkt im Terminal.
Nach dem Start führt dich K3Nova interaktiv oder konfigurationsbasiert durch die Clusterinstallation. Stelle sicher, dass die zugehörige config/k3nova-config.json
im selben Verzeichnis liegt – sie definiert, wie der Cluster aufgebaut werden soll (z. B. Control Planes, Worker, NFS, Registry, Monitoring etc.).
2.1 Installiere K3s Master (Control Plane)
Im K3s-Cluster übernimmt der „Control Plane“ (technisch korrekter als „Server-Knoten“) die entscheidende Rolle der Steuerung und Verwaltung des gesamten Clusters. K3s ist eine leichtgewichtige Kubernetes-Distribution, die darauf abzielt, die Komplexität zu reduzieren, aber die Kernfunktionen von Kubernetes beibehält.
Was ist der K3s Master (Server-Knoten)?
Der K3s Control-Plane ist der Knoten, der die Kubernetes-Steuerungsebene (Control Plane) ausführt. Im Gegensatz zu einer vollwertigen Kubernetes-Installation, bei der die Komponenten der Steuerungsebene oft auf separaten Maschinen laufen, fasst K3s diese in einer einzigen Binärdatei zusammen.
Der K3s Control Plane-Knoten ist das „Gehirn“ des K3s-Clusters. Er ist verantwortlich für:
- Die Bereitstellung der Kubernetes API.
- Das Speichern des Cluster-Zustands.
- Das Planen von Workloads auf verfügbaren Knoten.
- Das Sicherstellen, dass die gewünschten Zustände der Ressourcen im Cluster aufrechterhalten werden.
Ohne den Control-Plane-Knoten kann der K3s-Cluster keine neuen Workloads planen oder den Zustand des Clusters verwalten. In Hochverfügbarkeits-Setups (HA-Cluster) gibt es mehrere Server-Knoten, um Redundanz zu gewährleisten und einen Single Point of Failure zu vermeiden. (mehr in Abschnitt 3)
2.1.1 Manuelle Installation der K3s Control Plane (Single-Node)
Auf dem ersten Master-Node (192.168.56.10
) installieren wir K3s in der Rolle einer eigenständigen Control Plane. Dafür verwenden wir das offizielle Installationsskript von K3s und geben dabei gezielt Parameter mit, um die Sicherheit und Nutzbarkeit der Umgebung zu erhöhen:
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--write-kubeconfig-mode=644 --secrets-encryption" sh -s - server
Wichtige Parameter im obigen Befehl:
--write-kubeconfig-mode=644
erlaubt nicht-root Nutzern auf dem Master, die erzeugte kubeconfig (/etc/rancher/k3s/k3s.yaml
) zu lesen. So können Sie später als normaler Benutzer mitkubectl
arbeiten, ohne Root-Rechte.--secrets-encryption
aktiviert die Verschlüsselung von Kubernetes-Secrets (in etcd/SQLite) auf dem Server. k3s generiert dabei automatisch einen AES-Schlüssel und ein Encryption-Config, das dem API-Server übergeben wird (Secrets Encryption | K3s). Diese Einstellung sorgt dafür, dass vertrauliche Daten (Secrets) auch im etcd-Storage verschlüsselt vorliegen.
2.1.2 Alternative: K3s-Master-Installation mit dem K3Nova
Anstatt die K3s-Control-Plane manuell mit dem offiziellen Skript zu installieren, kann die Einrichtung auch vollständig automatisiert über das CLI-Tool K3Nova
erfolgen. Dieses Tool wurde entwickelt, um sowohl einfache als auch hochverfügbare K3s-Cluster schnell, reproduzierbar und sicher zu installieren.
Um einen K3s Master-Node auf 192.168.56.10
zu installieren und gleichzeitig die kube-config
auf Ihrem lokalen Rechner (/home/user/.kube/config
) für den sofortigen kubectl
-Zugriff einzurichten, wähle bitte den Menüpunkt „Install Kubernetes Master“ in K3Nova. Der K3Nova führt automatisch die Befehle aus die du manuell oben ausgeführt hast
2.1.2.1 Installationsablauf
Nach dem Start des Installers mit:
./K3Nova
öffnet sich ein interaktives Terminalmenü. Dort kannst du auswählen, ob du:
- einen einzelnen Master installieren möchtest
- einen vollständigen Cluster mit Master-, Worker-, Monitoring-, Registry- und Storage-Komponenten aufsetzen willst
- oder ein hochverfügbares K3s-Cluster mit mehreren Control-Plane-Knoten konfigurieren möcht est
Sobald du im Tool die Option „Install Kubernetes Master“ auswählst, startet K3Nova automatisch den Installationsprozess. Dabei wird eine sichere SSH-Verbindung zum Zielserver aufgebaut, über die alle erforderlichen Befehle remote ausgeführt werden.
Im Hintergrund verwendet K3Nova nahezu denselben Befehl wie bei einer manuellen K3s-Installation – mit einem entscheidenden Unterschied: Statt des standardmäßig mitgelieferten Traefik-Ingress-Controllers richtet K3Nova eine erweiterte Traefik-Variante ein, die sowohl TCP- als auch UDP-Ingress unterstützt. Aus diesem Grund wird Traefik zunächst über den Parameter --disable=traefik
deaktiviert:
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--write-kubeconfig-mode=644 --secrets-encryption --disable=traefik" sh -s - server
Diese Konfiguration sorgt dafür, dass die erzeugte kubeconfig
für nicht-root-Nutzer lesbar ist und dass Secrets im Cluster verschlüsselt gespeichert werden.
2.1.2.2 Was bedeutet „Advanced Traefik“ in K3Nova?
Standardmäßig installiert K3s beim Setup automatisch eine einfache Traefik-Konfiguration als Ingress-Controller. Diese reicht für viele Webanwendungen aus, ist jedoch auf HTTP(S)-Ingress beschränkt. Sobald man Dienste wie Redis, PostgreSQL, MQTT oder andere Protokolle auf TCP/UDP-Basis absichern oder veröffentlichen möchte, stößt diese Standardinstallation an ihre Grenzen.
K3Nova geht hier bewusst einen Schritt weiter – und setzt auf eine erweiterte („advanced“) Traefik-Installation, die folgende Vorteile bietet:
2.1.2.3 Nach der Installation
Sobald die K3s-Installation abgeschlossen ist, lädt K3Nova automatisch die erzeugte kubeconfig
vom Server herunter und speichert sie lokal ab. Der Pfad sieht dabei typischerweise so aus:
~/.kube/config
Du kannst diese Datei direkt mit kubectl
verwenden oder als KUBECONFIG
-Umgebungsvariable setzen, um gegen den neuen Cluster zu arbeiten.
Beispiel:
kubectl get nodes
2.1.2.4 Vorteile gegenüber der manuellen Methode
Im Vergleich zur manuellen Installation bietet der K3Nova
folgende Vorteile:
- Erhebliche Zeitersparnis durch Automatisierung
- Konsistente Konfiguration über alle Knoten hinweg
- Sichere Speicherung der
kubeconfig
auf dem lokalen Rechner - Möglichkeit, den Cluster schrittweise oder vollständig aufzubauen
- Optionale Zusatzmodule wie Monitoring oder Redis sofort verfügbar
- Reduzierte Fehleranfälligkeit durch geprüfte Installationslogik
2.2 Installiere K3s-Agent (Worker)
Im K3s-Ökosystem übernimmt der Agent die Rolle des Ausführungs-“Workers” im Cluster. Er verbindet sich mit dem k3s-Server (oft fälschlich „Master“ genannt), lädt Pods und Services herunter und führt sie aus. Im Folgenden die wesentlichen Punkte:
Ein K3s-Agent ist ein Prozess, der auf jedem Worker-Node läuft und folgende Kernkomponenten von Kubernetes beherbergt:
- kubelet: Hält die Pods am Laufen, meldet Status ans Control Plane.
- kube-proxy: Setzt die Kubernetes-Netzwerkregeln auf Node-Ebene um.
- Container Runtime: Standardmäßig
containerd
, führt Container aus.
Der Agent registriert den Node beim Server, überwacht die Node-Gesundheit und führt alle ihm zugewiesenen Workloads aus.
Hauptaufgaben des K3s-Agent
- Node-RegistrationBaut beim Start eine sichere Verbindung zum Server auf (via TLS) und registriert sich mit Token oder Zertifikat.
- Pod-ManagementDer kubelet-Prozess auf dem Agent empfängt Pod-Definitionen vom API-Server und startet bzw. verwaltet die zugehörigen Container.
- Netzwerkvermittlungkube-proxy sorgt für Service-IP-Routing und Lastverteilung auf dem Node.
- Health-ChecksFührt Liveness- und Readiness-Probes durch und meldet Status zurück.
- Log- und Metrik-SammlungLeitet Logs und Node-Metriken ggf. an Monitoring-Komponenten weiter.
2.2.1 Manuelle Installation eines K3s-Agents
Führe auf dem Worker-Server (192.168.56.11
) das k3s-Installationsscript so aus, dass es sich mit dem Master verbindet:
Zunächst benötigen wir das Cluster-Token zur Authentifizierung.
Dieses findest du nach Master-Installation in /var/lib/rancher/k3s/server/node-token
auf dem Master. Kopiere den Inhalt dieses Tokens sicher (z.B. per SSH):
# Auf dem Master Node (192.168.56.10): Token auslesen
cat /var/lib/rancher/k3s/server/node-token
# Beispielausgabe (nicht real verwenden):
K1066b9f4e97c2e87ea47d6facf56e76828e62198e1f908d58e29cce355956f9c::server:37c672b9c9d3f9f4dce7f297bef856d1
Führe nun auf dem Worker folgendes aus (ersetzen Sie <MASTER_IP>
durch 192.168.56.10
und <TOKEN>
durch den kopierten Token-String):
# Auf dem Worker-Node ausführen (Master-IP und Token einsetzen):
curl -sfL https://get.k3s.io | K3S_URL="https://<MASTER_IP>:6443" K3S_TOKEN="<TOKEN>" sh -s - agent
Dieser Befehl installiert k3s im Agent-Modus und verbindet den Node zum Master-API-Server auf Port 6443 mittels des Tokens. Wenn die Installation abgeschlossen ist, prüfe auf dem Master erneut die Nodes
# Zurück auf dem Master (mit gesetztem KUBECONFIG):
kubectl get nodes -o wide
Du solltest nun zwei Nodes gelistet sehen – den Master (192.168.56.10
) mit Role control-plane und den Worker (192.168.56.11
) als agent – beide mit STATUS „Ready“. Damit ist der Basis-Cluster eingerichtet.
DIESEN PROZESS MUSST DU AUF JEDEM SERVER DURCHFÜHREN
2.2.2 Installiere K3s-Agents mit K3Nova
Alternativ kannst du den Prozess über den K3Nova abwickeln. Dieser ruft den benötigten Token vom Master ab und richtet die K3s-Agents auf jeder einzelnen VM automatisch ein.
2.3 Unterschiede zum K3s Server („Control Plane“)
Merkmal | k3s Server | k3s Agent |
---|---|---|
Control Plane | Enthält API-Server, Scheduler, Controller Manager und Backend (SQLite oder externes DB) | Nur execution plane (kubelet, kube-proxy) |
State Store | Persistiert Cluster-Zustand | Kein Local Store |
API-Endpoint | Stellt API-Endpoint unter Port 6443 bereit | Konsumiert API über Agent-Verbindung |
Cluster-Init | Führt k3s server initial aus |
Führt k3s agent zum Joinen aus |
Rollen | Control Plane & optional auch Workloads | Nur Worker, keine Control Plane |
2.3.1 Zusammenfassung
- k3s Server („Master“) stellt das Control Plane und den API-Endpoint bereit, speichert den Cluster-Zustand und verwaltet Scheduling und Controller.
- k3s Agent sind die Worker-Nodes, die kubelet, kube-proxy und Container Runtime betreiben, um Pods auszuführen und Netzwerk-Routing zu übernehmen.
- Die Trennung erlaubt Skalierung: Mehr Agenten für mehr Workloads Was ist ein Workloads?, während der Server die zentrale Steuerung übernimmt.
Mit dieser Aufteilung bleibt k3s leichtgewichtig und besonders für Edge- und IoT-Szenarien geeignet.
3 High-Availability-Setups (HA-Cluster)
Ein Hochverfügbarkeits-Setup (HA-Cluster) erhöht die Ausfallsicherheit deines Kubernetes-Clusters, indem mehrere Master-Knoten parallel betrieben werden. Fällt ein Master aus, übernehmen die anderen Master-Knoten automatisch die Steuerung und Verwaltung des Clusters. So vermeidest du einen Single Point of Failure. Ein typisches HA-Setup besteht aus mindestens drei Master-Knoten, um Quorum-Entscheidungen treffen zu können und den Clusterzustand zuverlässig zu sichern.
3.1 Installation des K3s-Clusters im High-Availability (HA)-Setup
Ein High-Availability-Cluster sorgt für eine hohe Verfügbarkeit und Ausfallsicherheit deines Kubernetes-Clusters. Für unser Beispiel verwenden wir ein Setup mit drei Master-Nodes (Control Plane) und einem integrierten etcd-Cluster zur Verwaltung und Synchronisierung der Kubernetes-Datenbank.
Unsere Server haben folgende IP-Adressen:
- Master-Node 1:
192.168.56.10
- Master-Node 2:
192.168.56.11
- Master-Node 3:
192.168.56.14
3.1.1 Manuelle Installation des HA-Setup mit eigener etcd-Datenbank:
3.1.1.2 Erster Master-Node (Control Plane)
Auf dem ersten Master-Node (192.168.56.10
) installieren wir K3s und initialisieren damit den Cluster. Dieser Schritt startet den ersten Control-Plane-Knoten mit einer eingebetteten etcd-Datenbank und bildet somit das Fundament für ein hochverfügbares Setup.
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --cluster-init --write-kubeconfig-mode=644 --secrets-encryption" sh -
Wichtige Parameter im obigen Befehl:
--cluster-init
Dieser Parameter initialisiert den etcd-Cluster, also die zentrale Datenbank des Kubernetes-Clusters. Der Node, auf dem dieser Befehl ausgeführt wird, wird dadurch zum ersten Mitglied der etcd-Cluster-Replikation und übernimmt die Rolle eines Leaders (bis eventuell eine Replikation erfolgt).In einem HA-Setup mit mehreren Control-Plane-Knoten bildetetcd
das Rückgrat der Cluster-Konsistenz: alle Steuerungsdaten wie Deployments, Pods, Secrets, ConfigMaps oder Cluster-Zustände werden hier gespeichert.--write-kubeconfig-mode=644
Dieser Parameter sorgt dafür, dass die generierte Konfigurationsdatei (/etc/rancher/k3s/k3s.yaml
) mit den Dateiberechtigungen 644 gespeichert wird. Damit ist sichergestellt, dass nicht-root Benutzer die Datei lesen können und somitkubectl
verwenden können, ohne Root-Rechte zu benötigen.--secrets-encryption
Mit diesem Parameter wird die Verschlüsselung sensibler Kubernetes-Daten (z. B. Secrets) in der etcd-Datenbank aktiviert.K3s erzeugt dabei automatisch einen AES-Schlüssel und eine passendeencryption-config.yaml
, die dem API-Server übergeben wird. Dadurch wird sichergestellt, dass z. B. Passwörter, Tokens oder Zertifikate, die als Secrets gespeichert werden, nicht im Klartext in der Datenbank landen.
Hinweis: Dieser Node wird der erste von mindestens drei Control-Plane-Knoten in einem hochverfügbaren etcd-Cluster. Alle weiteren Control-Plane-Nodes werden sich später mit diesem initialisierten Cluster verbinden.
3.1.1.2 Weitere Master-Nodes zum Cluster hinzufügen
Nachdem der erste Master-Node erfolgreich mit etcd initialisiert wurde, können die beiden weiteren Control-Plane-Nodes dem bestehenden Cluster beitreten. Dafür benötigst du den Token des ersten Masters, der sich auf folgendem Pfad befindet:
Token auf dem ersten Master-Node (192.168.56.10) anzeigen:
sudo cat /var/lib/rancher/k3s/server/token
Kopiere diesen Token – er wird gleich benötigt, um die neuen Master-Nodes korrekt anzubinden.
Installation auf den weiteren Master-Nodes (z. B. 192.168.56.11 und 192.168.56.12):
Führe nun den folgenden Befehl auf den beiden zusätzlichen Nodes aus. Wichtig: Den Parameter --cluster-init
darfst du nur beim ersten Master verwenden – auf allen weiteren wird er weggelassen!
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server \
--server https://192.168.56.10:6443 \
--token <TOKEN> \
--write-kubeconfig-mode=644 \
--secrets-encryption" sh -
Ersetze <TOKEN>
durch den zuvor kopierten Wert.
Erklärung der wichtigsten Parameter:
Parameter | Beschreibung |
---|---|
--server https://192.168.56.10:6443 |
Gibt die Adresse des initialen Master-Nodes an, mit dem sich der neue Node verbindet. |
--token <TOKEN> |
Authentifiziert den neuen Node gegenüber dem bestehenden Cluster. |
--write-kubeconfig-mode=644 |
Erlaubt auch Nicht-Root-Benutzern den Zugriff auf die kubeconfig . |
--secrets-encryption |
Aktiviert die Verschlüsselung von Kubernetes-Secrets (z. B. in etcd), genau wie beim ersten Master. |
Sobald alle drei Master-Nodes korrekt beigetreten sind, ist dein hochverfügbarer K3s-Control-Plane-Cluster vollständig ein
3.1.1.3 Abschluss der Installation
Nach der erfolgreichen Installation kannst du den Cluster-Status mit folgendem Befehl prüfen:
kubectl get nodes
Alle drei Master-Nodes sollten im Status Ready
erscheinen. Durch dieses HA-Setup stellst du sicher, dass dein Kubernetes-Cluster selbst beim Ausfall einzelner Nodes weiterhin verfügbar bleibt.
Nun kannst du wie im Abschnitt 2.2 zusätzliche K3s-Agents für dein HA-Cluster installieren.
3.2 Alternative: Hochverfügbaren K3s-Cluster mit drei Control-Plane-Knoten automatisiert einrichten – mit K3Nova
Die manuelle Einrichtung eines hochverfügbaren (HA) K3s-Clusters mit mehreren Control-Plane-Knoten ist nicht nur zeitaufwendig, sondern auch fehleranfällig. Für jede Control-Plane müssen spezifische Konfigurationsschritte beachtet werden – angefangen bei der Initialisierung des etcd
-Clusters über das Setzen von Umgebungsvariablen bis hin zur Netzwerkkommunikation zwischen den Knoten.
Um dir diesen Aufwand zu ersparen, kannst du K3Nova verwenden. Mit nur wenigen Eingaben installiert der Installer:
- ab drei vollständig konfigurierte Control-Plane-Knoten,
- einen intern replizierten etcd-Verbund (zur Absicherung gegen Datenverlust und Ausfälle),
- eine konsistente Cluster-Topologie, die sofort bereit für den produktiven Betrieb ist.
Das Tool übernimmt dabei nicht nur die Initialisierung des Clusters, sondern sorgt auch dafür, dass alle Control-Planes korrekt miteinander verbunden sind, sich gegenseitig kennen und ein funktionierender Leader im etcd-Verbund gewählt wird.
Vorteile auf einen Blick:
- Kein manuelles Setup von etcd oder
cluster-init
- Einheitliche Konfiguration aller Knoten
- Minimierung von Fehlerquellen
- Zeitersparnis und erhöhte Reproduzierbarkeit
3.2.1 Konfiguration Datei
Um einen hochverfügbaren K3s-Cluster mit mehreren Control-Plane-Knoten aufzusetzen, musst du mindestens drei Nodes in die Datei config/k3nova-config.json
eintragen.
Wichtig dabei: Setze beim ersten Node im Feld cluster_init
den Wert auf true
. Dadurch wird bei diesem Knoten die K3s-Installation mit dem Parameter --cluster-init
durchgeführt, was zur Initialisierung des internen etcd-Clusters führt.
Alle weiteren Control-Plane-Nodes müssen mit cluster_init: false
gekennzeichnet werden – sie treten dem Cluster bei, nachdem der erste Node erfolgreich initialisiert wurde.
Beispielkonfiguration (config/k3nova-config.json
):
{
"control_planes": [
{
"ip": "192.168.179.10",
"ssh_user": "kubernetes",
"ssh_pass": "123456",
cluster_init": true # set true for insta
},
{
"ip": "192.168.179.11",
"ssh_user": "kubernetes",
"ssh_pass": "123456",
"cluster_init": false
},
{
"ip": "192.168.179.14",
"ssh_user": "kubernetes",
"ssh_pass": "123456",
"cluster_init": false
}
],
"workers": [
{
"ip": "192.168.56.11",
"ssh_user": "kubernetes",
"ssh_pass": "123456",
"cluster_init": false
},
{
"ip": "192.168.56.12",
"ssh_user": "ubuntu",
"ssh_pass": "yourpassword",
"cluster_init": false
}
],
}
- Das Feld
cluster_init: true
darf nur bei einem einzigen Control-Plane-Knoten gesetzt werden – und zwar bei dem, der denetcd
-Cluster startet. - Der Installer nutzt diese Datei, um automatisch via SSH alle Nodes korrekt zu konfigurieren und den Cluster aufzubauen.
- Die
ssh_user
undssh_pass
Felder müssen auf allen Hosts gültig sein und ausreichende Berechtigungen für administrative Tasks haben.
Starte K3Nova und wähle den Punkt „Install High Availability Kubernetes Masters“ aus
3.2.2 Abschluss der Installation
Nach der erfolgreichen Installation kannst du den Cluster-Status mit folgendem Befehl prüfen:
kubectl get nodes
Alle drei Master-Nodes sollten im Status Ready
erscheinen. Durch dieses HA-Setup stellst du sicher, dass dein Kubernetes-Cluster selbst beim Ausfall einzelner Nodes weiterhin verfügbar bleibt.
Nun kannst du wie im Abschnitt 2.2 zusätzliche K3s-Agents für dein HA-Cluster installieren.