Kustomize vs Helm
Helm:
Templates mit Go-Template-Syntax
values.yaml fuer Konfiguration
Chart-Paket (distributierbar)
Gut fuer: Drittanbieter-Software
Kustomize:
Reines YAML (kein Templating!)
Overlays auf Base-Konfiguration
Eingebaut in kubectl (kubectl apply -k)
Gut fuer: Eigene Anwendungen, Umgebungsunterschiede
Kustomize-Grundstruktur
k8s/
base/
deployment.yaml
service.yaml
kustomization.yaml
overlays/
dev/
kustomization.yaml
replica-patch.yaml
staging/
kustomization.yaml
ingress-patch.yaml
production/
kustomization.yaml
resource-patch.yaml
hpa.yaml
Basis-Konfiguration
# k8s/base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: meine-app
spec:
replicas: 1
selector:
matchLabels:
app: meine-app
template:
metadata:
labels:
app: meine-app
spec:
containers:
- name: app
image: meine-app:latest
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "500m"
# k8s/base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
commonLabels:
app.kubernetes.io/managed-by: kustomize
Production Overlay
# k8s/overlays/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
namePrefix: prod-
namespace: production
images:
- name: meine-app
newTag: "1.5.2"
patchesStrategicMerge:
- resource-patch.yaml
resources:
- hpa.yaml
# k8s/overlays/production/resource-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: meine-app
spec:
replicas: 3
template:
spec:
containers:
- name: app
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1000m"
Anwenden
# Kustomize installieren (oder kubectl eingebaut)
curl -s https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh | bash
mv kustomize /usr/local/bin/
# YAML generieren (preview)
kustomize build k8s/overlays/production
# Direkt anwenden
kubectl apply -k k8s/overlays/production
# Mit kubectl eingebaut
kubectl diff -k k8s/overlays/production
kubectl apply -k k8s/overlays/production
FAQ
Kann ich Kustomize und Helm zusammen nutzen?
Ja. Kustomize kann Helm-Charts als Basis nutzen (helmCharts field in kustomization.yaml). Dann Kustomize-Patches drueber fuer umgebungsspezifische Aenderungen.
Fazit
Kustomize ist ideal fuer eigene Kubernetes-Manifeste: Basis einmal definieren, Umgebungsunterschiede als Patches - kein Templating-Overhead.
Kubernetes DevOps fuer KMU in Heidelberg, Mannheim und der Rhein-Neckar-Region. Beratung anfragen.