[email protected]

Anleitung · Kubernetes

Kubernetes auf Proxmox installieren: k3s mit drei VMs

Hinweis zum Inhalt: Versionen, Befehle und Preise können sich ändern. Bitte prüfen Sie kritische Schritte vor dem produktiven Einsatz eigenständig. Dieser Leitfaden ersetzt keine individuelle Fach-, Rechts- oder Steuerberatung.

Aufbau und Betrieb abstimmen: WZ-IT plant, implementiert und betreibt Kubernetes auf Proxmox. Die Auslegung verbindet Hypervisor, Kubernetes, Netzwerk und Storage.

Diese Anleitung erstellt einen neuen k3s-Cluster in Proxmox-KVM-VMs: drei Server mit Embedded etcd, optional zusätzliche Worker und ein fester API-Endpunkt. Sie konkretisiert den Aufbau, während die Architekturübersicht die Betriebsmodelle vergleicht. Für die Plattformwahl gibt es Proxmox vs Kubernetes.

Stand: Oktober 2026. Befehle und Adressen sind ein anzupassendes Gerüst für neue VMs. Installieren Sie k3s nicht auf dem Proxmox-Host. Bestehende Cluster werden nicht neu initialisiert.

Inhaltsverzeichnis

1. Topologie und Voraussetzungen

Für Embedded-etcd-HA benötigt k3s mindestens drei Server; Worker heißen bei k3s Agents und sind optional. Server können auch Workloads ausführen. Prüfen Sie vorab Ressourcen und Datenträger anhand der k3s-Anforderungen. Hersteller-Mindestwerte sind keine Dimensionierung für Ihre Anwendungen. Verwenden Sie ausreichend schnellen Speicher für etcd und planen Sie Reserve für Wartung und Ausfälle.

Rolle Beispieladresse Platzierung für Hostausfallschutz
API-Endpunkt 10.20.0.10, api.k8s.example.test Redundanter TCP-Load-Balancer vor den Servern
cp1 10.20.0.11 Proxmox-Host A
cp2 10.20.0.12 Proxmox-Host B
cp3 10.20.0.13 Proxmox-Host C
Worker nach Bedarf Aus dem eigenen Node-Netz Nach Kapazität und Anwendung verteilen

Alle Adressen und Namen sind Beispiele. Drei VMs auf einem Host sind ein Laboraufbau mit gemeinsamem Ausfallpunkt. Eine redundante API-IP ersetzt keine unabhängigen Hosts, Strom-, Netzwerk- oder Storage-Pfade. RKE2 ist ein anderer Installationsweg; die Distributionsauswahl und die Talos-Anleitung behandeln Alternativen.

2. Cloud-Init-Template und VMs

Folgen Sie dem dokumentierten Proxmox-Cloud-Init-Ablauf: ein Cloud-Image des ausgewählten Linux-Herstellers beziehen und dessen Prüfsumme verifizieren, eine neue VM anlegen, die Image-Disk importieren und als Bootdisk verbinden. Ergänzen Sie ein Cloud-Init-Laufwerk sowie die zum Image passenden Controller- und Konsoleneinstellungen. Prüfen Sie Image, Gastbetriebssystem und k3s-Version gemeinsam gegen die Anforderungen.

Vor dem ersten Boot jedes Klons setzen Sie in Proxmox Cloud-Init einen administrativen Benutzer, dessen SSH-Schlüssel, eine eigene IP samt Gateway und die DNS-Konfiguration. Wandeln Sie die ausgeschaltete Basis in ein Template um und erstellen Sie daraus drei vollständige Klone. Jeder Gast erhält eine eigene VM-ID, MAC-Adresse und einen eindeutigen Hostnamen. Das Template enthält noch keinen k3s-Zustand und keine Cluster-Secrets.

Starten Sie die Klone auf den vorgesehenen Hosts. Kontrollieren Sie im Gast die fertige Cloud-Init-Verarbeitung mit cloud-init status --wait, IP, DNS-Auflösung, Zeitsynchronisation und SSH-Zugang. Notieren Sie VM-ID und Hostzuordnung. Das offizielle Quelldokument zur Cloud-Init-Unterstützung beschreibt Template, Klonen und IP-/Schlüsselzuweisung ebenfalls.

3. Netzwerk und API-Endpunkt

Node-, Pod- und Service-Netze dürfen sich nicht mit vorhandenen Netzen überschneiden. Der folgende Aufbau verwendet die k3s-Defaults für Pod- und Service-CIDR nur, wenn diese in Ihrer Umgebung frei sind. Andernfalls setzen Sie cluster-cidr und service-cidr auf allen Servern identisch, bevor der Cluster entsteht. Prüfen Sie Netzanforderungen und Firewall-Regeln, ohne pauschal die Firewall abzuschalten.

Verkehr Freigabe im beschriebenen Modell
Nodes und administrativer Zugang zur API TCP 6443 zu API-Endpunkt und Servern
Embedded etcd TCP 2379 und 2380 zwischen Servern
Flannel VXLAN UDP 8472 zwischen Nodes, nicht öffentlich
Kubelet und Metrics TCP 10250 zwischen Nodes

Vor dem Bootstrap richten Sie den TCP-Load-Balancer mit Health-Checks auf die drei Serveradressen an Port 6443 ein. Ein einzelner Load Balancer wäre erneut ein Ausfallpunkt; für das HA-Ziel gehören redundante Instanzen und deren IP-Umschaltung zur Voraussetzung. DNS zeigt auf die API-IP. Prüfen Sie Routing und die IP-Zuständigkeit, bevor diese Adresse verwendet wird.

Diese API-IP ist kein Kubernetes-Anwendungs-LoadBalancer. Ein Kubernetes Service vom Typ LoadBalancer, Ingress und Zertifikate für Anwendungen werden getrennt geplant. Mitgelieferte Komponenten wie Traefik und ServiceLB bleiben in diesem Beispiel zunächst auf ihrem k3s-Standard; alternative Controller erst nach einer bewussten Entscheidung einführen.

4. k3s initialisieren und Server verbinden

Arbeiten Sie innerhalb der neuen Linux-VMs mit administrativen Rechten. Legen Sie /etc/rancher/k3s/ mit Zugriff nur für root an. Erstellen Sie auf cp1 die Datei /etc/rancher/k3s/config.yaml und schützen Sie sie mit Dateimodus 0600. Ersetzen Sie den Token-Platzhalter durch ein langes zufälliges Secret aus Ihrer geschützten Secret-Verwaltung.

# Nur cp1 bei der erstmaligen Initialisierung
cluster-init: true
token: "REPLACE_WITH_PRIVATE_CLUSTER_SECRET"
tls-san:
  - "10.20.0.10"
  - "api.k8s.example.test"
write-kubeconfig-mode: "0600"

Der Konfigurationspfad und die YAML-Optionen sind dokumentiert. Wählen Sie eine konkrete freigegebene k3s-Version aus den Release Notes und setzen Sie K3S_VERSION auf deren vollständigen Release-Tag. Verwenden Sie denselben Wert auf allen neuen Nodes. Anschließend auf cp1:

# K3S_VERSION zuvor auf einen konkreten freigegebenen Tag setzen
: "${K3S_VERSION:?Konkreten k3s-Release-Tag setzen}"
curl -fL https://get.k3s.io -o install-k3s.sh
# Skript vor der Ausführung prüfen
sudo env INSTALL_K3S_VERSION="${K3S_VERSION:?Konkreten k3s-Release-Tag setzen}" sh install-k3s.sh server
sudo k3s kubectl get nodes -o wide

Auf cp2 und cp3 erstellen Sie jeweils eine eigene geschützte config.yaml. Verwenden Sie den gemeinsamen Token, dieselben TLS-Namen und gegebenenfalls identische angepasste CIDRs. Kein cluster-init auf diesen Nodes:

server: "https://10.20.0.10:6443"
token: "REPLACE_WITH_PRIVATE_CLUSTER_SECRET"
tls-san:
  - "10.20.0.10"
  - "api.k8s.example.test"
write-kubeconfig-mode: "0600"

Sobald cp1 über den Load Balancer erreichbar ist, führen Sie denselben versionsgebundenen Installationsblock mit Rolle server nacheinander auf cp2 und cp3 aus. Prüfen Sie nach jedem Beitritt den Node-Zustand. Das ist der dokumentierte HA-Bootstrap mit gemeinsamem Token, hier mit festem API-Zugang. Wiederholen Sie die Initialisierung nicht als Reparatur eines bereits vorhandenen Clusters.

5. Worker und Clusterzugang

Für jede zusätzliche Worker-VM erstellen Sie vor der Installation eine root-geschützte config.yaml mit server: "https://10.20.0.10:6443" und demselben privaten Token. Laden und prüfen Sie das Installationsskript wie oben, setzen Sie denselben Release-Tag und verwenden Sie die Rolle agent:

: "${K3S_VERSION:?Konkreten k3s-Release-Tag setzen}"
sudo env INSTALL_K3S_VERSION="${K3S_VERSION:?Konkreten k3s-Release-Tag setzen}" sh install-k3s.sh agent

Auf einem Server kontrollieren Sie Nodes und System-Pods:

sudo k3s kubectl get nodes -o wide
sudo k3s kubectl get pods -A -o wide
sudo k3s kubectl get --raw='/readyz?verbose'

Die administrative Kubeconfig liegt laut k3s-Clusterzugang unter /etc/rancher/k3s/k3s.yaml. Legen Sie auf dem vorgesehenen Admin-Rechner das Verzeichnis ~/.kube mit Dateimodus 0700 an beziehungsweise prüfen Sie dessen Schutz. Übertragen Sie die Datei geschützt als ~/.kube/proxmox-k3s.yaml mit Dateimodus 0600, ohne eine vorhandene Konfiguration zu überschreiben. Ersetzen Sie in dieser Kopie den Wert von server durch https://api.k8s.example.test:6443 beziehungsweise Ihren tatsächlichen API-Endpunkt. Sie enthält administrative Zugangsdaten; nicht in Git ablegen und nicht allgemein lesbar machen. Prüfen Sie anschließend auf dem Admin-Rechner den Zugriff über den Load Balancer ausdrücklich mit dieser Datei:

kubectl --kubeconfig ~/.kube/proxmox-k3s.yaml get nodes

6. Storage, Backup und Abnahme

Der mitgelieferte Local Path Provisioner stellt node-lokalen Speicher bereit, keine automatische Replikation. Ein vorhandenes Proxmox-Ceph wird nicht allein durch die Installation zur Kubernetes-StorageClass. Wählen Sie ein passendes CSI-/Storage-Modell, bevor persistente Anwendungen starten. Prüfen Sie eine Test-PVC, Schreib-/Lesezugriff und das Verhalten bei geplantem Node-Wechsel anhand der Volume-Eigenschaften.

Für Embedded etcd können Sie auf einem Server einen manuellen Snapshot anfordern:

sudo k3s etcd-snapshot save --name acceptance
sudo k3s etcd-snapshot ls

Der Snapshot-Befehl bestätigt noch keine Wiederherstellbarkeit. Sichern Sie Snapshot und den tatsächlichen Server-Token aus /var/lib/rancher/k3s/server/token getrennt vom Cluster und zugriffsgeschützt; der Restore benötigt den Token. Anwendungsdaten werden zusätzlich gesichert. Planen Sie den isolierten Wiederherstellungstest nach Kubernetes Backup und Restore.

Abnahme Nachweis vor Produktivbetrieb
Control Plane Drei Server-Nodes bereit, API-Zustand und Hostzuordnung dokumentiert
Netzwerk Node-Kommunikation, DNS und Pod-Verkehr geprüft
Anwendung Eigene Testanwendung über den vorgesehenen Zugangsweg erreichbar
Persistenz Gewählte StorageClass und Datenzugriff nach zulässigem Wiederanlauf geprüft
Ausfall Genehmigter Test eines einzelnen Hosts und des API-Load-Balancers; Quorum und Anwendung beobachten
Wiederherstellung etcd samt Token und Anwendungsdaten isoliert wiederhergestellt

Führen Sie Ausfalltests nur nach vereinbartem Plan in der Testumgebung aus. Ein gesunder Node-Status allein ist keine vollständige Abnahme. Dieses Gerüst ergänzt weder automatische Härtung noch einen fertigen Produktionsbetrieb.

Von der Installation zum Betrieb: Kubernetes auf Proxmox verbindet den vereinbarten Cluster-Aufbau mit Netzwerk-, Storage- und Betriebsplanung. Die Architekturübersicht ordnet HA und Lebenszyklen beider Ebenen ein.

Quellen

Lieber betreiben lassen?

Sie möchten Kubernetes nicht selbst betreiben? WZ-IT übernimmt Einrichtung, Betrieb und Wartung - datenschutzorientiert aus Deutschland.

Anfrage

Kubernetes planen, übernehmen oder betreiben

Wir planen und betreiben Kubernetes auf Bare Metal, Proxmox und europäischen Cloud-Plattformen samt Netzwerk, GitOps, Observability und Backup.

  • Direkt mit Timo und Robin - kein Vertrieb, kein Sales-Pitch
  • Fachliche Einschätzung Ihrer Situation
  • Konkrete nächste Schritte für Infrastruktur, Software oder KI

Das Gespräch ist unverbindlich und kostenlos.

WZ-IT hat uns professionell mit der Bereitstellung und Einrichtung von NetBird begleitet. Neben der technischen Umsetzung haben wir auch eine fundierte Beratung zur Anbindung unserer Kubernetes-Cluster erhalten. Die Empfehlungen waren konkret und direkt umsetzbar. Die Zusammenarbeit war durchgehend zuverlässig, schnell und auf Augenhöhe. Wir können WZ-IT uneingeschränkt empfehlen.
Kai ClaußEntwicklungsleiter, SweetConnect GmbH
Timo und Robin, Gründer von WZ-IT

Kubernetes planen, übernehmen oder betreiben

WZ-IT hat uns professionell mit der Bereitstellung und Einrichtung von NetBird begleitet. Neben der technischen Umsetzung haben wir auch eine fundierte Beratung zur Anbindung unserer Kubernetes-Cluster erhalten. Die Empfehlungen waren konkret und direkt umsetzbar. Die Zusammenarbeit war durchgehend zuverlässig, schnell und auf Augenhöhe. Wir können WZ-IT uneingeschränkt empfehlen.
Kai ClaußEntwicklungsleiter, SweetConnect GmbH

Häufig gestellte Fragen

Antworten auf die wichtigsten Fragen

Unternehmen weltweit vertrauen WZ-IT

  • Stadtwerke Brühl
  • DGHO e.V.
  • ABCO Water Systems
  • Golem.de
  • EVADXB
  • nextGYM
  • AInergy
  • ml&s
  • Odiseo Solutions
  • Annota
  • ARGE
  • SweetConnect GmbH
  • Aphy AG
  • CORGOS
  • Rekorder
  • SolidProof
  • Yonju
  • Keymate
  • Paritel
  • Mr. Clipart
  • Millenium
  • Negosh
  • Führerscheinmacher
  • Boese VA
Kundenstimmen ansehen