Kustomize Configuration Management
Introductie
Kustomize is een configuratie management tool voor Kubernetes die het mogelijk maakt om applicatie configuraties aan te passen zonder de originele YAML bestanden te wijzigen. Deze documentatie beschrijft de implementatie en het gebruik van Kustomize binnen de organisatie.
Basis Concepten
1. Directory Structuur
Een typische Kustomize project structuur:
project/
├── base/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml
└── overlays/
├── development/
│ └── kustomization.yaml
└── production/
└── kustomization.yaml
2. Base Configuratie
# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
commonLabels:
app: example-app
3. Overlay Configuratie
# overlays/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
patches:
- path: replica-count.yaml
configMapGenerator:
- name: app-config
literals:
- ENV=production
Werken met Patches
1. Strategic Merge Patches
Controleer eerst de structuur van de target resource voordat je een strategic merge patch implementeert:
# patches/deployment-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: project-name
spec:
template:
spec:
containers:
- name: main
resources:
limits:
memory: "512Mi"
cpu: "500m"
2. JSON Patches
# patches/service-patch.yaml
- op: replace
path: /spec/ports/0/port
value: 8080
3. Inline Patches
patches:
- patch: |-
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: project-name-ingress
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/8"
Configuratie Componenten
1. Resources
Basis Kubernetes resources definities:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-app
spec:
template:
spec:
containers:
- name: app
image: example-app:latest
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
2. ConfigMap en Secret Generators
# kustomization.yaml
configMapGenerator:
- name: app-config
files:
- config.properties
literals:
- API_URL=https://api.example.com
- DEBUG=true
secretGenerator:
- name: app-secrets
files:
- secret.properties
type: Opaque
3. Image Transformers
# kustomization.yaml
images:
- name: nginx
newName: custom-registry/nginx
newTag: v1.0.0
Veelgebruikte Use Cases
1. Ingress Configuratie
Configureer ingress instellingen met patches voor toegangscontrole en routing:
Ingress Controller
We gebruiken ingress-nginx als Ingress Controller. Voor meer informatie, zie de officiële documentatie: ingress-nginx
# patches/ingress-patch.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: project-name-ingress
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/8,192.168.1.0/24"
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
2. Resource Aanpassingen
# patches/resources-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: project-name
spec:
template:
spec:
containers:
- name: main
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
3. Environment Variables
# patches/env-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: project-name
spec:
template:
spec:
containers:
- name: main
env:
- name: DEBUG
value: "true"
- name: API_URL
value: "https://api.example.com"
Best Practices
1. Structuur
- Implementeer een duidelijke base/overlay structuur
- Gebruik betekenisvolle directory namen
- Houd base configuraties minimaal
- Documenteer overlay-specifieke aanpassingen
2. Configuratie Management
- Gebruik ConfigMapGenerator voor omgevingsvariabelen
- Implementeer SecretGenerator voor gevoelige data
- Definieer resource limieten in base configuratie
- Pas resource requests aan per omgeving
3. Versiebeheer
- Gebruik specifieke image tags
- Implementeer hash suffixes voor ConfigMaps
- Documenteer breaking changes
- Beheer dependencies expliciet
Deployment Workflow
1. Lokale Validatie
# Genereer en valideer configuratie
kustomize build overlays/development
# Dry-run deployment
kustomize build overlays/development | kubectl apply --dry-run=client -f -
2. Deployment
# Apply configuratie
kustomize build overlays/production | kubectl apply -f -
# Verificatie
kubectl get deployments,services,configmaps
Troubleshooting
1. Common Issues
| Issue | Oplossing |
|---|---|
| Resource conflict | Controleer name prefixes |
| Patch error | Verifieer resource selectors |
| ConfigMap mismatch | Controleer hash suffixes |
2. Debug Tools
# Debug output
kustomize build --enable-alpha-plugins overlays/production
# Diff changes
kustomize build overlays/production | kubectl diff -f -
3. Veelvoorkomende Problemen
- Resource niet gevonden: Controleer resource namen in patches
- Patch niet toegepast: Verifieer apiVersion en kind
- Syntax fouten: Valideer YAML formatting
- Verkeerde base path: Controleer relatieve paden
Integratie
1. ArgoCD
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: example-app
spec:
source:
path: overlays/production
kustomize:
commonLabels:
environment: production
2. GitHub Actions
name: Deploy
on:
push:
branches: [ main ]
jobs:
deploy:
steps:
- uses: actions/checkout@v3
- name: Deploy
run: |
kustomize build overlays/production | kubectl apply -f -
Volgende Stappen
- Leer over Helm Charts voor package management
- Verdiep je in ArgoCD voor GitOps deployments
- Verken Platform Management voor praktische toepassingen