What it does
Kustomize starts from a base (plain YAML) and applies overlays: change the namespace, image tag, replicas, labels, or patch any field. Nothing is copied by hand, and the output is plain YAML. It is built into kubectl (kubectl apply -k, kubectl kustomize) and into Argo CD and Flux.
Each folder has a kustomization.yaml that lists resources and changes.
How to write it
kustomize build DIR
kubectl apply -k DIR
kubectl kustomize DIRMain parts
kustomization.yaml fields
resources- Files or folders to include (also remote Git URLs).
namespace- Put everything in this namespace.
images- Change image names and tags.
replicas- Change replica counts.
patches- Strategic-merge or JSON patches for any field.
labels/commonAnnotations- Add labels / annotations to all objects.
namePrefix/nameSuffix- Change object names.
configMapGenerator/secretGenerator- Make ConfigMaps/Secrets from files (with a hash suffix).
components- Re-usable optional parts.
Options 5
Most used
Commands
Nothing matches this filter.
Examples 10
$ run as a normal user# run as root (or with sudo)
1The folder layout
tree shop shop/ ├── base/ │ ├── deployment.yaml │ ├── service.yaml │ └── kustomization.yaml └── overlays/ ├── dev/kustomization.yaml └── prod/kustomization.yaml2The base
cat shop/base/kustomization.yaml resources: - deployment.yaml - service.yaml labels: - pairs: { app: shop }3A prod overlay
cat shop/overlays/prod/kustomization.yaml resources: [../../base] namespace: shop-prod images: - name: ghcr.io/s0sta/shop newTag: 1.4.0 replicas: - name: shop count: 3 patches: - target: { kind: Deployment, name: shop } patch: |- - op: add path: /spec/template/spec/containers/0/resources value: { limits: { memory: 512Mi, cpu: 500m } }4See and apply the result
5Change the image tag in CI
6Make a ConfigMap from a file
cat shop/base/kustomization.yaml configMapGenerator: - name: shop-config files: [app.properties]The name gets a hash; pods restart by themselves when the file changes.
7Scan the final YAML
kustomize build shop/overlays/prod > prod.yaml && trivy config prod.yaml8Use a remote base from Git
cat kustomization.yaml resources: - https://github.com/s0sta/platform//apps/shop/base?ref=v1.4.09Add a label and a name prefix to everything
cat overlays/dev/kustomization.yaml resources: [../../base] namePrefix: dev- labels: - pairs: { env: dev }10Patch with a small YAML file
cat overlays/prod/probe.yaml apiVersion: apps/v1 kind: Deployment metadata: { name: shop } spec: template: spec: containers: - name: shop readinessProbe: { httpGet: { path: /health, port: 8080 } } kustomize edit add patch --path probe.yaml
Nothing matches this filter.
Watch out
secretGeneratorwith real values in Git is not safe; encrypt with SOPS or use External Secrets.- The kubectl built-in kustomize can be older than the standalone one.
Files
kustomization.yaml- The file in every base and overlay folder.
Tips to remember
- Use Helm for third-party apps and Kustomize for your own apps — or Kustomize on top of a rendered chart.
Exit codes
0 | Success. |
1 | Error. |