Skip to content
Learni
View all tutorials
Kubernetes

Comment maîtriser Kustomize pour Kubernetes en 2026

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 apply et 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.
Étude de cas : Chez une fintech, base pour un API Gateway inclut Istio VirtualService. Overlay 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.

ComposantRôleExemple d'usage
----------------------------------
resourcesInclure YAML- deployment.yaml
patchesModifierChanger image tag
generatorsCréerConfigMap 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 ; utilisez targetSelector pour précision (e.g., matchLabel: app=myapp).
  • Secrets management : Toujours secretGenerator avec literalSources + 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 comme vars: [{name: APP_TAG, objref: {kind: ConfigMap}}], mais préférez CI injection.

Erreurs courantes à éviter

  • Patch conflicts : StrategicMerge échoue sur listes non-associatives ; utilisez patchStrategicMerge avec annotations $patch: merge ou 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: merge sur 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.