Kustomize overlays — base manifest + patches for each environment.
Structure:
k8s/
base/
kustomization.yaml
deployment.yaml
service.yaml
overlays/
dev/
kustomization.yaml
patch-replicas.yaml
staging/
kustomization.yaml
production/
kustomization.yaml
patch-replicas.yaml
patch-resources.yaml
base/kustomization.yaml:
1apiVersion: kustomize.config.k8s.io/v1beta12kind: Kustomization3resources:4 - deployment.yaml5 - service.yaml6commonLabels:7 app: myapp
base/deployment.yaml:
1apiVersion: apps/v12kind: Deployment3metadata:4 name: myapp5spec:6 template:7 spec:8 containers:9 - name: myapp10 image: myapp:latest11 ports:12 - containerPort: 8080
overlays/production/kustomization.yaml:
1apiVersion: kustomize.config.k8s.io/v1beta12kind: Kustomization3namespace: production4bases:5 - ../../base6patchesStrategicMerge:7 - patch-replicas.yaml8 - patch-resources.yaml9commonLabels:10 environment: production11namePrefix: prod-
overlays/production/patch-replicas.yaml:
1apiVersion: apps/v12kind: Deployment3metadata:4 name: myapp5spec:6 replicas: 5
Usage:
1kubectl apply -k k8s/overlays/dev2kubectl apply -k k8s/overlays/production34# Render (without apply)5kustomize build k8s/overlays/production | kubectl apply -f -
Kustomize vs Helm: Kustomize is simpler for custom manifests. Helm for charts with templating.