- Authors

- Name
- Phillip Pham
- @ddppham
Hetzner Kubernetes Cluster erstellen: K3s Setup
TL;DR
K3s auf Hetzner Cloud ist die guenstigste Option fuer produktive Kubernetes-Cluster in Deutschland. Drei CX22-Server reichen fuer den Start. Mit Hetzner CCM und CSI bekommt ihr LoadBalancer und Persistent Volumes nativ. Gesamtkosten: unter 30 Euro pro Monat.
Warum Hetzner Cloud fuer Kubernetes
Hetzner betreibt Rechenzentren in Falkenstein, Nuernberg und Helsinki. Die Preise liegen 60-80% unter AWS und Azure. Fuer Teams, die DSGVO-konforme Infrastruktur in Deutschland brauchen, ohne Managed-Kubernetes-Aufpreis, ist Hetzner plus K3s eine solide Kombination.
Ein Vergleich der guenstigsten Optionen:
| Anbieter | 3-Node-Cluster (2 vCPU, 4 GB) | LoadBalancer | Volumes (20 GB) |
|---|---|---|---|
| Hetzner Cloud | 3 x 3,99 EUR = 11,97 EUR | 5,49 EUR | 0,96 EUR |
| AWS EKS | 3 x ~35 EUR + 73 EUR Control Plane | ~18 EUR | ~2,40 EUR |
| DOKS (DigitalOcean) | 3 x ~24 EUR (kostenlose Control Plane) | ~12 EUR | ~2,00 EUR |
K3s statt Vanilla-Kubernetes, weil: kein etcd-Cluster noetig (SQLite oder embedded etcd), ein Binary statt dutzende Komponenten, ~512 MB RAM fuer die Control Plane.
Voraussetzungen
- Hetzner Cloud Account mit API-Token
- SSH-Key im Hetzner-Projekt hinterlegt
hcloudCLI installiert- Lokaler Rechner mit
kubectl
# hcloud CLI installieren (macOS)
brew install hcloud
# Kontext erstellen
hcloud context create k8s-projekt
# API-Token eingeben wenn gefragt
# SSH-Key hochladen (falls noch nicht geschehen)
hcloud ssh-key create --name mein-key --public-key-from-file ~/.ssh/id_ed25519.pub
Server erstellen
Drei Server genuegen: ein Control-Plane-Node, zwei Worker. Fuer produktive Setups mit HA empfehle ich drei Control-Plane-Nodes -- K3s unterstuetzt das mit embedded etcd.
# Netzwerk erstellen
hcloud network create --name k8s-net --ip-range 10.0.0.0/16
hcloud network add-subnet k8s-net --type cloud --network-zone eu-central --ip-range 10.0.1.0/24
# Control-Plane-Node
hcloud server create \
--name k3s-master-1 \
--type cx22 \
--image ubuntu-24.04 \
--location fsn1 \
--ssh-key mein-key \
--network k8s-net
# Worker Nodes
for i in 1 2; do
hcloud server create \
--name k3s-worker-${i} \
--type cx22 \
--image ubuntu-24.04 \
--location fsn1 \
--ssh-key mein-key \
--network k8s-net
done
Notiert euch die oeffentlichen IPs:
hcloud server list -o columns=name,ipv4,status
Firewall konfigurieren
Hetzner-Firewalls arbeiten auf Netzwerkebene. Definiert Regeln, bevor ihr K3s installiert.
hcloud firewall create --name k8s-firewall
# SSH (einschraenken auf eure IP)
hcloud firewall add-rule k8s-firewall \
--direction in --protocol tcp --port 22 \
--source-ips "EURE_IP/32" --description "SSH"
# Kubernetes API
hcloud firewall add-rule k8s-firewall \
--direction in --protocol tcp --port 6443 \
--source-ips "EURE_IP/32" --description "K8s API"
# NodePort Range (optional)
hcloud firewall add-rule k8s-firewall \
--direction in --protocol tcp --port 30000-32767 \
--source-ips "0.0.0.0/0" --description "NodePorts"
# Flannel VXLAN (nur intern zwischen Nodes)
hcloud firewall add-rule k8s-firewall \
--direction in --protocol udp --port 8472 \
--source-ips "10.0.0.0/16" --description "VXLAN"
# Kubelet Metrics
hcloud firewall add-rule k8s-firewall \
--direction in --protocol tcp --port 10250 \
--source-ips "10.0.0.0/16" --description "Kubelet"
# Firewall an Server haengen
hcloud firewall apply-to-resource k8s-firewall \
--type server --server k3s-master-1
hcloud firewall apply-to-resource k8s-firewall \
--type server --server k3s-worker-1
hcloud firewall apply-to-resource k8s-firewall \
--type server --server k3s-worker-2
K3s installieren
SSH auf den Master-Node und K3s starten. Wichtig: --disable servicelb weil wir den Hetzner LoadBalancer nutzen. --disable traefik falls ihr Ingress-NGINX oder einen anderen Controller bevorzugt.
# Auf k3s-master-1
ssh root@MASTER_IP
# K3s Server installieren
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="\
server \
--disable servicelb \
--disable traefik \
--flannel-iface ens10 \
--node-ip 10.0.1.2 \
--advertise-address 10.0.1.2 \
--tls-san MASTER_PUBLIC_IP \
--tls-san 10.0.1.2 \
--kubelet-arg cloud-provider=external \
--write-kubeconfig-mode 644" sh -
# Token auslesen
cat /var/lib/rancher/k3s/server/node-token
--flannel-iface ens10 ist das Hetzner-interne Netzwerk-Interface. Damit laeuft der gesamte Cluster-Traffic ueber das private Netzwerk.
Worker hinzufuegen:
# Auf jedem Worker-Node
ssh root@WORKER_IP
curl -sfL https://get.k3s.io | K3S_URL="https://10.0.1.2:6443" \
K3S_TOKEN="TOKEN_VOM_MASTER" \
INSTALL_K3S_EXEC="\
--flannel-iface ens10 \
--node-ip 10.0.1.X \
--kubelet-arg cloud-provider=external" sh -
Kubeconfig lokal einrichten:
# Kubeconfig vom Master kopieren
scp root@MASTER_PUBLIC_IP:/etc/rancher/k3s/k3s.yaml ~/.kube/hetzner-k3s.yaml
# Server-Adresse anpassen
sed -i '' "s/127.0.0.1/MASTER_PUBLIC_IP/" ~/.kube/hetzner-k3s.yaml
export KUBECONFIG=~/.kube/hetzner-k3s.yaml
kubectl get nodes
Hetzner Cloud Controller Manager (CCM)
Der CCM integriert Kubernetes mit Hetzner: LoadBalancer-Services provisionieren automatisch Hetzner Load Balancer, Node-Informationen (Region, Typ) werden als Labels gesetzt, geloeschte Server werden als Nodes entfernt.
# Secret mit Hetzner API-Token und Netzwerk
kubectl -n kube-system create secret generic hcloud \
--from-literal=token=EUER_HCLOUD_TOKEN \
--from-literal=network=k8s-net
# CCM deployen
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml
# Pruefen
kubectl -n kube-system get pods -l app=hcloud-cloud-controller-manager
Hetzner CSI Driver
Fuer Persistent Volumes braucht ihr den CSI Driver. Der erstellt automatisch Hetzner Volumes und haengt sie an Nodes.
kubectl apply -f https://raw.githubusercontent.com/hetznercloud/csi-driver/main/deploy/kubernetes/hcloud-csi.yml
# StorageClass pruefen
kubectl get storageclass
# NAME PROVISIONER RECLAIMPOLICY
# hcloud-volumes csi.hetzner.cloud Delete
Test mit einem PVC:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: hcloud-volumes
EOF
kubectl get pvc test-pvc
# STATUS: Bound -> funktioniert
kubectl delete pvc test-pvc
Erster Workload mit LoadBalancer
Jetzt testen wir die komplette Kette: Deployment, Service mit Hetzner LoadBalancer.
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.27-alpine
ports:
- containerPort: 80
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 100m
memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
name: nginx-demo
annotations:
load-balancer.hetzner.cloud/location: fsn1
load-balancer.hetzner.cloud/use-private-ip: "true"
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: nginx-demo
EOF
# Warten bis External-IP zugewiesen
kubectl get svc nginx-demo -w
Nach 30-60 Sekunden bekommt der Service eine oeffentliche IP. In der Hetzner Console seht ihr den erstellten Load Balancer.
Ingress-Controller nachruesten
Fuer mehrere Domains auf einem LoadBalancer:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx --create-namespace \
--set controller.service.annotations."load-balancer\.hetzner\.cloud/location"=fsn1 \
--set controller.service.annotations."load-balancer\.hetzner\.cloud/use-private-ip"="true"
Produktions-Checkliste
Bevor ihr echte Workloads drauf laufen lasst:
- Backups: K3s-Snapshots mit
k3s etcd-snapshot save(bei embedded etcd) oder SQLite-Backup per Cronjob - Monitoring: kube-prometheus-stack via Helm -- Hetzner-Metriken ueber Node-Exporter
- Cert-Manager: Let's Encrypt Zertifikate automatisch per cert-manager
- Updates: K3s-Updates ueber system-upgrade-controller automatisieren
- Node-Redundanz: Mindestens 3 Control-Plane-Nodes fuer HA
- Netzwerk-Policies: Standard-Deny-All als Baseline setzen
Typische Fehler und Loesungen
Nodes zeigen "NotReady": Meistens liegt es an --flannel-iface. Prueft mit ip a welches Interface das private Netzwerk hat. Bei neueren Hetzner-Images kann es enp7s0 statt ens10 sein.
LoadBalancer bleibt auf "Pending": CCM-Logs pruefen mit kubectl -n kube-system logs -l app=hcloud-cloud-controller-manager. Haeufigste Ursache: falscher API-Token oder Netzwerk-Name im Secret.
Volumes mounten nicht: CSI-Driver braucht das gleiche Secret wie der CCM. Prueft ob hcloud Secret in kube-system existiert und der Token stimmt.
FAQ
Lohnt sich Hetzner Kubernetes fuer Produktion?
Ja, wenn euer Team K3s administrieren kann. Die Server sind stabil, das Netzwerk schnell, und der Preis unschlagbar. Fuer Teams ohne Kubernetes-Erfahrung ist ein Managed Service (DOKS, GKE) die sicherere Wahl.
Wie viele Nodes brauche ich?
Ein Control-Plane-Node plus zwei Worker reichen zum Start. Fuer HA: drei Control-Plane-Nodes mit embedded etcd. K3s skaliert problemlos auf 50+ Nodes.
Kann ich Hetzner Robot (Dedicated) statt Cloud nutzen?
Ja, K3s laeuft auch auf Dedicated Servern. Ihr verliert aber CCM-Integration (kein automatischer LoadBalancer) und muesstet Networking (z.B. via WireGuard) selbst konfigurieren.
Wie aktualisiere ich K3s auf Hetzner?
Am besten mit dem system-upgrade-controller. Der rollt Updates Node fuer Node aus. Alternativ: manuell per curl -sfL https://get.k3s.io | sh - auf jedem Node, Master zuerst.
Was kostet ein produktives Setup realistisch?
Drei CX22 (11,97 EUR), ein Load Balancer (5,49 EUR), drei Volumes 20 GB (2,88 EUR) und Snapshots (ca. 2 EUR): rund 22 EUR pro Monat. Deutlich unter 100 EUR fuer ein vollstaendiges Setup mit Monitoring.
Wer Kubernetes auf Hetzner aufsetzen will, ohne Wochen in Konfiguration zu versenken: Schreibt mir. Ich helfe bei der Planung und Umsetzung -- von der ersten VM bis zum produktiven Cluster.
Weiterführende Artikel:
Kubernetes-Beratung gesucht?
Wir helfen deutschen Unternehmen bei der Kubernetes-Implementierung, Migration und Optimierung. DSGVO-konform und praxiserprobt.
📖 Verwandte Artikel
Weitere interessante Beiträge zu ähnlichen Themen
K3s-Cluster unter 500 Euro mit Raspberry Pi oder Hetzner
K3s-Cluster auf drei Raspberry Pis oder Hetzner Cloud VMs für unter 500 Euro aufsetzen, inklusive Ansible-Playbook, Terraform-Config und Monitoring.
Kubernetes in Deutschland: ChromaDB Vector-Store für schnelle KI-Prototypen
ChromaDB Vector-Store für KI-Prototypen auf Kubernetes in Deutschland? Erfahren Sie, wie der deutsche Mittelstand agile RAG-Anwendungen kostengünstig implementiert und dabei bestehende Kubernetes-Ressourcen optimal nutzt.
Kubernetes Telepresence Debugging 2026: Remote Entwicklung für Teams in Deutschland
Telepresence revolutioniert 2026 das Kubernetes Debugging und die Remote-Entwicklung von Microservices. Entwickler in Kubernetes Deutschland können lokal mit Live-Cluster-Verbindung arbeiten, was die Effizienz steigert und compliance-relevante Debugging-Prozesse vereinfacht. Ein Muss für zukunftsorientierte Teams.
Kubernetes Automotive ASPICE 2026: Container für SDV und Compliance
Entdecken Sie, wie Kubernetes Automotive ASPICE 2026 Standards für die SDV-Entwicklung & Compliance revolutioniert. Effiziente Entwicklung, Tests und sichere Prozesse für OEMs in Deutschland – ein entscheidender Schritt für Kubernetes Compliance Deutschland.
Kubernetes Quantum Resistant Deutschland: Sicherung kritischer Infrastrukturen im deutschen Mittelstand
Erfahren Sie, wie Sie Ihre Kubernetes-Cluster in Deutschland zukunftssicher machen. Dieser Artikel beleuchtet die Wichtigkeit von Post-Quantum Cryptography (PQC) und Cryptographic Agility für `kubernetes quantum resistant deutschland` und den Schutz kritischer Infrastrukturen im Mittelstand.