Helm vs. Kustomize: Kubernetes richtig konfigurieren
Wer Kubernetes-Workloads verwaltet, stößt früher oder später auf die Frage: Wie verwalte ich meine YAML-Konfigurationen über verschiedene Umgebungen (Dev, Staging, Prod) konsistent und wartbar? Zwei Tools haben sich als de-facto-Standards etabliert: Helm und Kustomize.
Das Problem: YAML-Dschungel
Kubernetes lebt von YAML-Manifesten. Ein typisches Deployment besteht aus Deployment, Service, ConfigMap, Ingress, HPA – schnell sind es Dutzende Dateien. Das Problem: Dev braucht 1 Replica, Prod 10. Staging nutzt ein anderes Image-Tag. Die Datenbank-URL variiert pro Umgebung.
Ohne Werkzeuge entstehen Copy-Paste-Hölle oder unüberschaubare Konfigurations-Drifts. Helm und Kustomize lösen dieses Problem – auf unterschiedliche Weise.
Helm: Der Kubernetes Package Manager
Helm ist der älteste und verbreitetste Ansatz. Helm nutzt Templates (Go-Template-Syntax), in denen Platzhalter durch Werte aus values.yaml ersetzt werden.
Konzept:
Chart/
Chart.yaml # Metadaten
values.yaml # Standardwerte
values-prod.yaml # Produktionswerte
templates/
deployment.yaml # Template mit {{ .Values.replicas }}
service.yaml
Stärken von Helm:
- Package Manager – Charts können versioniert, geteilt und wiederverwendet werden
- Riesiges Chart-Repository – Artifact Hub bietet tausende Community-Charts
- Releases verwalten –
helm install,helm upgrade,helm rollback - Hooks – Pre/Post-Install-Aktionen
- Templating-Power – komplexe Logik in Templates möglich
Schwächen:
- Template-Syntax kann unleserlich werden (viele
{{ }}-Blöcke) - Debugging schwer –
helm templatenötig um das Ergebnis zu sehen - Helm Tiller (v2) war ein Sicherheitsproblem (v3 löst das)
- Eigene Lernkurve für Go-Templates
Kustomize: Overlays ohne Templates
Kustomize verfolgt einen anderen Ansatz: Es gibt keine Templates. Stattdessen werden valide Kubernetes-YAML-Dateien als Basis verwendet und durch Overlays angepasst – Patches, die Änderungen aufsetzen.
Struktur:
base/
deployment.yaml # Basis-YAML
service.yaml
kustomization.yaml
overlays/
prod/
kustomization.yaml # referenziert base + patches
replicas-patch.yaml # ändert replicas auf 10
Stärken von Kustomize:
- Kein Template-Chaos – Basis-YAML ist immer valides Kubernetes-YAML
- Seit kubectl 1.14 eingebaut – kein separates Tool nötig
- Transparenz – man sieht immer echtes YAML
- Einfaches Patching – Strategic Merge Patch oder JSON Patch
- Kein Paketmanager-Overhead
Schwächen:
- Kein eingebautes Release-Management (kein Rollback-Mechanismus)
- Kein Package-Repository wie Helm Hub
- Komplexe Konfigurationen erfordern viele Patch-Dateien
- Begrenzte Logik (keine Bedingungen, Schleifen)
Direkter Vergleich
| Merkmal | Helm | Kustomize |
|---|---|---|
| Ansatz | Go-Templates | YAML-Overlays/Patches |
| Lernkurve | Höher | Niedriger |
| Package-Management | Ja (Charts, Rollback) | Nein |
| In kubectl integriert | Nein (separates Tool) | Ja |
| Lesbarkeit | Mittel (viel {{ }}) |
Hoch (plain YAML) |
| Kompatibilität mit GitOps | Gut (mit Flux/ArgoCD) | Sehr gut |
| Third-Party Charts | Tausende auf Artifact Hub | Kein Repository |
| Komplexe Logik | Ja (Schleifen, Bedingungen) | Begrenzt |
Kombination: Helm + Kustomize
Ein in der Praxis beliebtes Muster: Helm für Third-Party-Charts (z.B. Ingress-Nginx, cert-manager, prometheus-stack), Kustomize für eigene Applikationen. Kustomize kann sogar Helm-Charts als Quelle verarbeiten – mit helmCharts in der kustomization.yaml.
Meine Empfehlung
- Eigene Applikationen: Kustomize ist einfacher, lesbarer und transparent.
- Community-Software installieren (Prometheus, ArgoCD, etc.): Helm ist unschlagbar durch die Community-Charts.
- GitOps mit ArgoCD oder Flux: Beide Tools werden unterstützt, Kustomize ist nativ integriert.
Für eigene Deployments starte ich mit Kustomize. Wenn die Konfigurationskomplexität wächst und ich Konditionen und Schleifen brauche, wechsle ich zu Helm.
Weiterführende Artikel
- ArgoCD vs. Flux CD – GitOps für Kubernetes: wie Helm-Charts und Kustomize-Overlays automatisch deployed werden
- Self-Hosting mit Kubernetes – Kubernetes produktionsreif betreiben – inkl. Helm, Kustomize und GitOps