Introduction
Dans l'écosystème Kubernetes en 2026, la gestion des configurations reste un défi majeur pour les équipes DevOps. Kustomize, intégré nativement à kubectl depuis la version 1.14, émerge comme la solution declarative par excellence pour personnaliser des manifests YAML sans les templates complexes d'Helm ou les scripts bash fragiles.
Pourquoi Kustomize ? Imaginez un manifeste de base pour un Deployment PostgreSQL que vous devez adapter pour dev (ressources limitées), staging (réplicas x3) et prod (secrets rotatifs). Au lieu de copier-coller et maintenir 15 fichiers identiques, Kustomize applique des overlays : une base commune + transformations ciblées. Cela réduit les erreurs de 70% selon les benchmarks CNCF, améliore la traçabilité GitOps et scale horizontalement pour des microservices.
Ce tutoriel intermédiaire, sans code, se concentre sur la théorie : structures, transformations et patterns avancés. À la fin, vous concevrez des pipelines Kustomize production-ready, comme un mentor avec 15 ans d'expérience vous guiderait pas à pas des fondations vers l'expertise.
Prérequis
- Connaissances solides en Kubernetes : Pods, Deployments, Services, ConfigMaps.
- Familiarité avec YAML et Git pour le GitOps.
- Expérience avec
kubectl applyet Helm (pour comparer les limites). - Environnement : Cluster K8s accessible (Minikube ou EKS pour tests).
Fondations de Kustomize : Le modèle déclaratif
Kustomize repose sur un paradigme base + overlay, comme des couches Photoshop appliquées à une image source. Au cœur : le fichier kustomization.yaml, manifeste déclaratif listant resources (fichiers YAML à inclure), patches (modifications JSONPatch/StrategicMergePatch) et transformers (générateurs comme namespace ou labels).
Exemple concret : Pour un app web, base/ contient deployment.yaml et service.yaml. L'overlay dev/ ajoute un patch réduisant CPU à 100m et injecte un ConfigMap avec DEBUG=true. Résultat : kustomize build dev/ génère un YAML unique, prêt pour kubectl apply.
Avantage théorique : Pas d'évaluation runtime (contrairement à Helm), tout est statique et auditable. Analogie : Un cuisinier qui assemble ingrédients (base) + assaisonnements (overlay) pour des plats variés sans recette dupliquée.
Structure d'un projet Kustomize : Hiérarchie et modularité
Un projet Kustomize s'organise en arborescence Git-friendly :
base/: Ressources communes (Deployment, HPA, etc.).overlays/: kustomization.yaml spécifique (dev/staging/prod)./ patches/: Fichiers réutilisables (.yaml ou .json).configs/: ConfigMaps/Secrets partagés.
eu-west1/ patch le namespace et ajoute un label region=eu. Overlay us-east1/ merge un patch pour replicas=5. Build : kustomize build overlays/prod | kubectl apply -k -.
Progression : Commencez par une base mono-ressource, montez à multi-bases via resources: [- ../base1, - ../base2]. Cela favorise la composition, évitant les monolithes Helm charts.
| Composant | Rôle | Exemple d'usage |
|---|---|---|
| ----------- | ------ | ----------------- |
| resources | Inclure YAML | - deployment.yaml |
| patches | Modifier | Changer image tag |
| generators | Créer | ConfigMap de secrets |
Transformations avancées : Patches et generators
Les patches sont le cœur magique : StrategicMergePatch pour merges récursifs (idéal Deployments), JSONPatch pour ops précises (e.g., op: replace /spec/replicas 3).
Cas concret : Patch un Ingress pour ajouter TLS : { target: { kind: Ingress }, patch: | tls: [{ secretName: prod-tls }] }. Generators comme configMapGenerator hashe automatiquement les valeurs, rendant immutable (e.g., env: [{name: DB_PASS, value: secret123}] → nom hashé).
Images et labels : images: [{name: app, newTag: v1.2.3}] updaté via CI/CD. commonLabels: {team: backend} propage partout.
Analogie : Patches comme des post-it sur un blueprint ; generators comme des tampons automatiques. Pour le complexe : Chaînage d'overlays (bases: [- ../../base]) pour hériter, comme une ontologie YAML.
Gestion multi-environnements et GitOps
En 2026, Kustomize excelle en GitOps avec ArgoCD/Flux : Chaque branche/env a son overlay. Pipeline CI : kustomize build overlays/$ENV > k8s-manifest.yaml, push vers repo GitOps.
Pattern avancé : Matrix d'overlays (overlays/prod/kustomization.yaml references ../common + region/eu). Pour namespaces dynamiques : namespaceTransformer: { target: { kind: * }, namespace: dynamic-ns }.
Étude de cas e-commerce : Base microservices + overlays par tenant (B2B/B2C). Résultat : 50+ envs gérés par 3 devs, zéro drift config.
Checklist progression :
- Niv.1 : Base simple.
- Niv.2 : Patches images/labels.
- Niv.3 : Héritage overlays + generators secrets.
Bonnes pratiques essentielles
- Modularité stricte : Une responsabilité par base (un service), max 5 overlays par env pour lisibilité.
- Naming convention :
patch-deployment-replicas.yaml; utiliseztargetSelectorpour précision (e.g.,matchLabel: app=myapp). - Secrets management : Toujours
secretGeneratoravecliteralSources+ sops/SealedSecrets ; évitez plaintext. - Validation CI : Intégrez
kustomize build --enable-helm --validate+ kubeval pour dry-run. - Versioning : Tag images via
newTag: {{ .Values.tag }}non, attendez : pur Kustomize utilise vars commevars: [{name: APP_TAG, objref: {kind: ConfigMap}}], mais préférez CI injection.
Erreurs courantes à éviter
- Patch conflicts : StrategicMerge échoue sur listes non-associatives ; utilisez
patchStrategicMergeavec annotations$patch: mergeou passez à JSONPatch. - Over-inheritance : Trop de bases chaînées causent builds lents (limitez à 3 niveaux) ; testez avec
kustomize build --enable-exec. - Namespace oublie : Sans
namespace: myns, resources polluent default ; forcez via transformer. - Hash collisions : Generators changent nom à chaque build si valeurs varient ; fixez avec
behavior: mergesur ConfigMaps existants.
Pour aller plus loin
Approfondissez avec la doc officielle Kustomize et les patterns CNCF. Intégrez à ArgoCD pour GitOps avancé.
Découvrez nos formations Learni sur Kubernetes et GitOps : ateliers pratiques Kustomize + Helm migration.
Ressources :
- Livre : "Kubernetes Patterns" (chap. Config Management).
- Repo exemple : kubernetes-sigs/kustomize.
- Outils : kustomize-controller pour Flux v2.