Kustomize : gérer facilement ses environnements Kubernetes (exemple simple Dev/Prod)
Quand on déploie des applications sur Kubernetes, on se retrouve très vite avec plusieurs environnements : développement, préproduction, production… Et souvent, les manifests YAML se ressemblent à 95 %.
Résultat : beaucoup de copier-coller, et autant de risques d’erreurs.
👉 C’est exactement le problème que Kustomize résout.
Qu’est-ce que Kustomize ?
Kustomize est un outil intégré à kubectl
qui permet de :
- Définir une base commune (déploiement, service, configmaps…)
- Créer des overlays (patchs) pour chaque environnement, sans dupliquer tous les YAML
- Gérer simplement les variations (ex : debug activé en dev, scaling en prod)
Pas besoin de templating compliqué : tout reste du YAML natif.
Exemple : une app simple (Nginx hello-world)
Imaginons que nous ayons une petite application web.
On veut :
- En dev → 1 pod, debug activé, ressources limitées.
- En prod → plusieurs pods pour absorber la charge.
1. La base commune
k8s/base/deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-app
spec:
replicas: 1
selector:
matchLabels:
app: demo-app
template:
metadata:
labels:
app: demo-app
spec:
containers:
- name: web
image: nginxdemos/hello:latest
ports:
- containerPort: 80
env:
- name: DEBUG
value: "false"
k8s/base/service.yaml
:
apiVersion: v1
kind: Service
metadata:
name: demo-app
spec:
selector:
app: demo-app
ports:
- port: 80
targetPort: 80
k8s/base/kustomization.yaml
:
resources:
- deployment.yaml
- service.yaml
2. Overlay pour le dev
k8s/overlays/dev/kustomization.yaml
:
resources:
- ../../base
patchesStrategicMerge:
- patch-dev.yaml
k8s/overlays/dev/patch-dev.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-app
spec:
template:
spec:
containers:
- name: web
env:
- name: DEBUG
value: "true"
resources:
requests:
cpu: "100m"
memory: "64Mi"
limits:
cpu: "250m"
memory: "128Mi"
3. Overlay pour la prod
k8s/overlays/prod/kustomization.yaml
:
resources:
- ../../base
patchesStrategicMerge:
- patch-prod.yaml
k8s/overlays/prod/patch-prod.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-app
spec:
replicas: 3
4. Déploiement
- Pour déployer en dev :
kubectl apply -k k8s/overlays/dev
- Pour déployer en prod :
kubectl apply -k k8s/overlays/prod
Résultat 🎉
- Dev : 1 pod, DEBUG activé, ressources limitées → idéal pour tester localement sans tout casser.
- Prod : 3 pods, scalés → prêt à encaisser la charge en production.
Pourquoi c’est puissant ?
- Moins de YAML dupliqué : la base est commune.
- Plus de lisibilité : les patchs ne montrent que ce qui change.
- Évolutif : facile d’ajouter un nouvel environnement (staging, tests E2E…).
🐻❄️ Chez PG3, on recommande souvent Kustomize comme première étape avant d’aller vers du GitOps (ArgoCD ou FluxCD), car il garde les choses simples et claires.