Kustomize ist ein Werkzeug zur Anpassung von Kubernetes-Manifesten ohne Template-Sprache. Es ist seit Kubernetes 1.14 direkt in kubectl integriert (kubectl apply -k) und arbeitet nach einem anderen Prinzip als Helm: Statt Platzhalter in Vorlagen zu setzen, legt man unveränderte Basismanifeste vor und beschreibt in einer kustomization.yaml, welche Änderungen darübergelegt werden sollen.
Aufbau: Base und Overlays
app/
├── base/
│ ├── kustomization.yaml
│ ├── deployment.yaml
│ └── service.yaml
└── overlays/
├── staging/
│ ├── kustomization.yaml
│ └── replicas-patch.yaml
└── prod/
├── kustomization.yaml
└── replicas-patch.yaml
Die base beschreibt die Anwendung einmal, die Overlays übernehmen sie und ändern nur, was sich unterscheidet. Eine Overlay-Datei sieht so aus:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namespace: app-prod
namePrefix: prod-
commonLabels:
env: prod
images:
- name: registry.example.org/team/app
newTag: 1.4.0
patches:
- path: replicas-patch.yaml
target:
kind: Deployment
name: app
Die wichtigsten Werkzeuge
- patches: gezielte Änderungen an Feldern, wahlweise als strategischer Merge-Patch oder als JSON-Patch. Ersetzt das frühere
patchesStrategicMergeundpatchesJson6902. - namePrefix / nameSuffix: verhindert Namenskollisionen, wenn dasselbe Base mehrfach im Cluster liegt.
- namespace: setzt den Namespace für alle Ressourcen zentral.
- commonLabels / labels: bringt Labels an allen Objekten an – praktisch für Auswahl und Kostenauswertung.
LabelsmitincludeSelectorssteuert, ob sie auch in Selektoren landen. - images: ersetzt Repository und Tag, ohne Manifeste von Hand zu bearbeiten.
- configMapGenerator / secretGenerator: erzeugen ConfigMaps aus Dateien und hängen einen Inhalts-Hash an den Namen. Dadurch starten Pods bei geänderter Konfiguration neu – ein sehr eleganter Weg, den klassischen „Konfiguration geändert, Pod läuft noch alt“-Fehler zu vermeiden.
- components: optionale Bausteine, die nur bei Bedarf eingebunden werden – etwa ein Ingress oder ein Monitoring-Sidecar.
Ansehen und Anwenden
# Render-Ergebnis prüfen, ohne etwas anzuwenden
kubectl kustomize overlays/prod
# oder eigenständig:
kustomize build overlays/prod
# Anwenden
kubectl apply -k overlays/prod
# Änderungen gegenüber dem Cluster sehen
kubectl diff -k overlays/prod
Vergleich mit Helm
Helm ist ein Paketmanager: Es erzeugt Manifeste aus Vorlagen, verwaltet Releases und unterstützt Rollbacks. Kustomize ist ein Renderer: Es erzeugt fertiges YAML und kennt keinen Zustand – die Verwaltung übernimmt kubectl oder ein GitOps-Werkzeug. Für fremde Anwendungen mit vielen Einstellmöglichkeiten ist Helm meist bequemer; für eigene Manifeste und Umgebungsvarianten ist Kustomize die transparentere Lösung, weil kein Template-Code versteckt wird. In der Praxis werden beide kombiniert: Ein Kustomize-Overlay kann ein Helm-Chart als Basis einbinden.
Verwandte Grundlagen: Kubernetes, Helm, Argo CD, Flux.