Blog Hetzner – Kubernetes Cluster erstellen mit Cluster API
Schritt für Schritt zum eigenen Cluster auf Hetzner – mit der Cluster API sauber automatisiert.
Einleitung
Kubernetes-Cluster manuell aufzusetzen ist eine lehrreiche Erfahrung – aber auch zeitaufwändig und fehleranfällig. Wer schon einmal mit kubeadm, KubeOne oder anderen Tools experimentiert hat, kennt das Problem: Jeder Ansatz bringt seine eigenen Herausforderungen mit sich, und die Wartung wird schnell komplex. Cluster API verspricht hier Abhilfe durch einen standardisierten, deklarativen Ansatz zur Kubernetes-Cluster-Verwaltung.
In diesem Artikel zeigen wir, wie Sie mithilfe von Cluster API einen produktionstauglichen Kubernetes-Cluster auf Hetzner Cloud erstellen können. Die Kombination aus Hetzners attraktivem Preis-Leistungs-Verhältnis und der robusten Automatisierung von Cluster API macht dies zu einer interessanten Alternative zu den großen Cloud-Anbietern.
Was ist Cluster API
Cluster API ist ein Kubernetes-Projekt, das die Verwaltung von Kubernetes-Clustern über Kubernetes selbst ermöglicht. Der Grundgedanke ist elegant: Anstatt Cluster manuell zu konfigurieren, definieren Sie diese als Kubernetes-Ressourcen in YAML-Dateien. Ein sogenannter Management-Cluster übernimmt dann die Erstellung, Skalierung und Wartung der Workload-Cluster.
Diese Herangehensweise bringt mehrere Vorteile mit sich. Erstens erhalten Sie eine einheitliche API für verschiedene Cloud-Anbieter – der gleiche Workflow funktioniert bei AWS, Azure, Google Cloud und eben auch bei Hetzner. Zweitens können Sie Cluster-Definitionen versionieren und über Git verwalten, was GitOps-Workflows ermöglicht. Drittens automatisiert Cluster API viele Wartungsaufgaben wie Updates und Skalierung.
Vorbereitung der Infrastruktur
Bevor wir mit der eigentlichen Cluster-Erstellung beginnen, müssen einige Grundlagen bei Hetzner Cloud vorbereitet werden. Der wichtigste Schritt ist die Erstellung eines API-Tokens im Hetzner Cloud Panel unter "Access → API Tokens". Dieser Token ermöglicht es Cluster API, Ressourcen in Ihrem Namen zu verwalten. Bewahren Sie den Token sicher auf – er wird während des gesamten Prozesses benötigt.
Ein SSH-Key sollte ebenfalls in der Hetzner Cloud hinterlegt werden (unter "Security → SSH Keys"). Dieser wird später für den Zugriff auf die Cluster-Nodes verwendet, falls Debugging oder manuelle Eingriffe notwendig werden.
Besonders wichtig ist die Einrichtung eines privaten Netzwerks. Die Cluster-Nodes müssen untereinander kommunizieren können, was über das öffentliche Internet weder sicher noch performant wäre. Erstellen Sie daher ein privates Netzwerk mit einem ausreichend großen Adressbereich – 10.0.0.0/16 bietet genügend IP-Adressen für die meisten Anwendungsfälle.
Auf Ihrer lokalen Maschine sollten die Tools kubectl und clusterctl installiert sein. Letzteres ist das Kommandozeilen-Tool für Cluster API und übernimmt die meiste Arbeit. Optional kann auch die Hetzner Cloud CLI (hcloud) nützlich sein, um Ressourcen zu überwachen oder manuell zu verwalten.
Einrichtung des Management Clusters
Der erste Schritt besteht darin, einen Management-Cluster zu initialisieren. Dieser spezielle Cluster übernimmt die Verwaltung aller anderen Kubernetes-Cluster und muss daher stabil und verfügbar sein. Für Testzwecke genügt ein lokaler Kind-Cluster:
kind create cluster --name capi-management
Sobald der Management-Cluster läuft, kann Cluster API mit dem Hetzner-Provider initialisiert werden:
clusterctl init --infrastructure hcloud
Dieser Befehl installiert die notwendigen Controller in den Management-Cluster. Die Controller sind spezialisierte Programme, die kontinuierlich den gewünschten Cluster-Zustand mit der Realität abgleichen und bei Bedarf korrigierend eingreifen.
Cluster-Definition und Erstellung
Jetzt folgt der spannende Teil: die Definition des eigentlichen Workload-Clusters. Cluster API verwendet einen Template-basierten Ansatz, der die Erstellung standardisierter Cluster-Konfigurationen vereinfacht. Das folgende Kommando generiert eine Basis-Konfiguration:
clusterctl generate cluster dev-cluster \
--kubernetes-version v1.29.2 \
--control-plane-machine-count=1 \
--worker-machine-count=2 \
--infrastructure hcloud \
> dev-cluster.yaml
Die generierte YAML-Datei enthält alle notwendigen Kubernetes-Ressourcen für den Cluster, muss aber noch angepasst werden. Wichtig ist auch, dass vor der Generierung die Umgebungsvariablen gesetzt werden, da clusterctl diese direkt in die YAML-Datei einbettet:
export HCLOUD_TOKEN=your_token_here
export HCLOUD_REGION=fsn1
export HCLOUD_SSH_KEY_NAME=your-ssh-key-name
export HCLOUD_NETWORK_NAME=your-network-name
Die Cluster-Spezifikation definiert nicht nur die grundlegende Architektur, sondern auch Details wie die verwendeten VM-Images, Instanztypen und Netzwerk-Konfigurationen. Hetzner bietet verschiedene Ubuntu- und CentOS-Images an, wobei Ubuntu 22.04 LTS eine solide Basis für die meisten Anwendungsfälle darstellt.
Sobald die Konfiguration angepasst ist, kann der Cluster erstellt werden:
kubectl apply -f dev-cluster.yaml
Nun beginnt die eigentliche Magie: Cluster API erstellt automatisch die notwendigen Hetzner Cloud VMs, konfiguriert das Netzwerk, installiert Kubernetes auf allen Nodes und richtet die Cluster-Kommunikation ein. Dieser Prozess dauert typischerweise 5-10 Minuten, abhängig von der Anzahl der Nodes und der aktuellen Auslastung der Hetzner-Infrastruktur.
Cluster-Validierung und Zugriff
Während der Erstellung könnt ihr den Fortschritt mit verschiedenen kubectl-Kommandos verfolgen:
kubectl get clusters
kubectl get machines
kubectl get kubeadmcontrolplanes
Diese Befehle zeigen den Status der verschiedenen Cluster-Komponenten. Besonders interessant ist der machines-Befehl, der den Zustand der einzelnen VMs anzeigt. Sobald alle Maschinen den Status "Running" erreicht haben, ist der Cluster einsatzbereit.
Um auf den neuen Cluster zuzugreifen, müsst ihr zunächst die Kubeconfig aus dem Secret abrufen:
kubectl get secret dev-cluster-kubeconfig -o jsonpath='{.data.value}' | base64 -d > dev-cluster.kubeconfig
export KUBECONFIG=dev-cluster.kubeconfig
Jetzt könnt ihr mit dem neuen Cluster interagieren, als wäre es ein lokaler Cluster:
kubectl get nodes
kubectl get pods --all-namespaces
Cluster-Wartung und Lifecycle-Management
Einer der größten Vorteile von Cluster API ist die vereinfachte Wartung. Skalierung funktioniert durch einfache Änderungen an der Cluster-Definition. Um beispielsweise die Anzahl der Worker-Nodes zu erhöhen, müsst ihr lediglich die entsprechende MachineDeployment-Ressource editieren und die Änderungen anwenden.
Updates auf neue Kubernetes-Versionen sind ebenfalls stark vereinfacht. Cluster API kann Rolling Updates durchführen, bei denen einzelne Nodes nacheinander aktualisiert werden, ohne dass der Cluster-Betrieb unterbrochen wird.
Monitoring und Logging können über Standard-Kubernetes-Tools wie Prometheus und Grafana realisiert werden. Da es sich um einen vollwertigen Kubernetes-Cluster handelt, funktionieren alle bekannten Tools und Workflows ohne Einschränkungen.
Aufräumen und Kostenkontrolle
Ein großer Vorteil der automatisierten Cluster-Erstellung ist auch die automatisierte Löschung. Wenn der Cluster nicht mehr benötigt wird, genügt ein einziger Befehl:
kubectl delete cluster dev-cluster
Cluster API sorgt dafür, dass alle erstellten Ressourcen sauber entfernt werden – VMs, Netzwerk-Konfigurationen, Load Balancer und Speicher-Volumes. Dies ist besonders wichtig für die Kostenkontrolle, da vergessene Ressourcen schnell ins Geld gehen können.
Fazit und Ausblick
Cluster API in Kombination mit Hetzner Cloud bietet einen eleganten Mittelweg zwischen vollständig verwalteten Kubernetes-Diensten und der komplexen manuellen Cluster-Verwaltung. Sie behalten die Kontrolle über Ihre Infrastruktur und profitieren gleichzeitig von Automatisierung und Standardisierung.
Für Teams, die GitOps-Praktiken umsetzen möchten, bietet sich die Integration von Cluster API in CI/CD-Pipelines an. Cluster-Definitionen können versioniert, getestet und automatisch ausgerollt werden. Dies ermöglicht Infrastructure-as-Code-Workflows, die mit professionellen Plattform-Teams mithalten können.
Die Kombination aus Hetzners attraktiven Preisen und der Flexibilität von Cluster API macht diesen Ansatz besonders für Startups und mittelständische Unternehmen interessant, die ihre Kubernetes-Expertise ausbauen und gleichzeitig Kosten kontrollieren möchten.
Do you have questions or would you like a personalized offer? We are happy to advise you.
Contact
Our cloud experts are happy to provide personalized advice.
- Our Office
-
Sartoriusstraße 22
20257 Hamburg, Deutschland
Mon - Fri: 09:00 AM - 06:00 PM - Telefon
- +49 40 239 69 754 0
- hello@bnerd.com