Kustomize Basics
Kubernetes configuration customization without templates.
Basic Structure
app/ ├── base/ │ ├── kustomization.yaml │ ├── deployment.yaml │ └── service.yaml └── overlays/ ├── development/ │ └── kustomization.yaml └── production/ └── kustomization.yaml
Base Kustomization
base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization
resources:
- deployment.yaml
- service.yaml
commonLabels: app: myapp
namePrefix: myapp-
images:
- name: myapp newTag: v1.0.0
Overlay Kustomization
overlays/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization
bases:
- ../../base
replicas:
- name: myapp-deployment count: 5
images:
- name: myapp newTag: v2.0.0
patches:
- patch: |- apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment spec: template: spec: containers: - name: myapp resources: limits: memory: "1Gi" cpu: "1000m"
Common Commands
Build kustomization
kustomize build base/
Build overlay
kustomize build overlays/production/
Apply with kubectl
kubectl apply -k overlays/production/
Diff before apply
kubectl diff -k overlays/production/
Transformers
Common Labels
commonLabels: app: myapp environment: production
Name Prefix/Suffix
namePrefix: prod- nameSuffix: -v2
Namespace
namespace: production
Config Map Generator
configMapGenerator:
- name: app-config
files:
- config.properties literals:
- LOG_LEVEL=info
Secret Generator
secretGenerator:
- name: app-secrets
literals:
- password=secret123
Best Practices
Use Bases for Common Configuration
Keep common configuration in base and environment-specific in overlays.
Strategic Merge Patches
patches:
- path: patch-deployment.yaml
JSON Patches
patchesJson6902:
- target:
group: apps
version: v1
kind: Deployment
name: myapp
patch: |-
- op: replace path: /spec/replicas value: 3