Déployer une application dans un seul environnement est simple. La vraie
difficulté commence quand vous gérez dev, staging et production avec des
configurations différentes (replicas, ressources CPU/mémoire, URLs, feature
flags...). Ce guide vous montre comment structurer votre config-repo avec
Kustomize pour ArgoCD et comment automatiser les déploiements
multi-clusters avec les ApplicationSet. Kustomize est l'outil natif de
Kubernetes qui compose des manifestes par base plus surcouches
(overlays), sans dupliquer la configuration. Si vous débutez avec lui, lisez
d'abord le guide prérequis
Kustomize.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comparer les trois stratégies multi-environnements (branches, dossiers, overlays Kustomize)
- Structurer un config-repo avec Kustomize : base commune + overlays par environnement
- Créer un ApplicationSet avec générateur
Listpour déployer sur plusieurs clusters - Implémenter un workflow de promotion : dev → staging → production via Pull Request
- Effectuer un rollback ciblé avec
git revertsur un environnement sans affecter les autres
Stratégies de gestion multi-environnements
Section intitulée « Stratégies de gestion multi-environnements »Il existe trois approches pour gérer plusieurs environnements dans Git :
| Stratégie | Description | Avantage | Inconvénient |
|---|---|---|---|
| Branches | Une branche par env (dev, staging, main) | Workflow familier | Divergence difficile à gérer, merges complexes |
| Dossiers | Un dossier par env (envs/dev/, envs/prod/) | Simple | Duplication des manifestes |
| Kustomize overlays | Base commune + sur-couches par env | Pas de duplication, diff clair | Courbe d'apprentissage |
Les overlays Kustomize sont la méthode recommandée. C'est celle décrite dans ce guide.
Structure de dépôt avec Kustomize
Section intitulée « Structure de dépôt avec Kustomize »La logique de Kustomize repose sur deux niveaux. La base rassemble les manifestes communs à tous les environnements. Les overlays (un par environnement) ne décrivent que les différences à appliquer sur cette base. Cette organisation évite de recopier un même Deployment trois fois : vous ne maintenez qu'un seul socle, et chaque environnement le personnalise par petits patches.
config-repo/└── nginx-demo/ ├── base/ # Manifestes communs à tous les envs │ ├── kustomization.yaml │ ├── deployment.yaml │ └── service.yaml └── overlays/ # Sur-couches par environnement ├── dev/ │ ├── kustomization.yaml │ └── patch-replicas.yaml # 1 replica en dev ├── staging/ │ ├── kustomization.yaml │ └── patch-replicas.yaml # 2 replicas en staging └── production/ ├── kustomization.yaml ├── patch-replicas.yaml # 5 replicas en production └── patch-resources.yaml # Limites CPU/mémoire plus élevéesLa base contient les manifestes partagés, sans valeurs spécifiques à un environnement :
apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - deployment.yaml - service.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 1 # Valeur par défaut, écrasée dans chaque overlay selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.27@sha256:6784fb0834aa7dbbe12e3d7471e69c290df3e6ba810dc38b34ae33d3c1c05f7d resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256MiL'overlay production
Section intitulée « L'overlay production »L'overlay production est le plus chargé, car la production a les exigences les plus strictes. Il patche la base sur trois points : il monte à 5 replicas pour la haute disponibilité, relève les ressources CPU/mémoire pour encaisser la charge réelle, et épingle le tag d'image sur une version précise plutôt que de suivre une cible mouvante.
apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - ../../base # Hérite de la basepatches: - path: patch-replicas.yaml - path: patch-resources.yamlimages: - name: nginx newTag: "1.27.4" # Version épinglée en productionapiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 5apiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: template: spec: containers: - name: nginx resources: requests: cpu: 500m memory: 512Mi limits: cpu: 1000m memory: 1GiL'overlay dev
Section intitulée « L'overlay dev »L'overlay dev vise l'inverse : un environnement léger, où chaque nouvelle
build arrive en premier. Il garde donc 1 replica (inutile de gaspiller des
ressources sur un environnement de travail) et porte le tag de la dernière
build, que la CI écrit dans ce fichier à chaque construction. Ce tag reste
une version précise, jamais latest : c'est lui que la promotion recopie ensuite
vers staging, puis vers la production.
apiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources: - ../../basepatches: - path: patch-replicas.yamlimages: - name: nginx newTag: "1.27.5" # Écrit par la CI à chaque build, puis promuapiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 1Vérifier localement avant de pousser
Section intitulée « Vérifier localement avant de pousser »Avant de pousser un overlay dans Git, prenez l'habitude de rendre le résultat en local. Comme ArgoCD déploiera exactement ce que Kustomize génère, mieux vaut inspecter ce YAML final vous-même : vous confirmez que le bon nombre de replicas et le bon tag d'image sont appliqués, et vous détectez une erreur de patch avant qu'elle n'atteigne le cluster.
# Vérifier ce que Kustomize va générer pour productionkubectl kustomize nginx-demo/overlays/production
# Diff entre dev et productiondiff \ <(kubectl kustomize nginx-demo/overlays/dev) \ <(kubectl kustomize nginx-demo/overlays/production)ApplicationSet multi-environnements
Section intitulée « ApplicationSet multi-environnements »Avec Kustomize et la structure overlays, vous pouvez créer un
ApplicationSet qui déploie une Application par environnement depuis un
seul template :
apiVersion: argoproj.io/v1alpha1kind: ApplicationSetmetadata: name: nginx-envs namespace: argocdspec: generators: - list: elements: - env: dev namespace: nginx-dev cluster: https://kubernetes.default.svc - env: staging namespace: nginx-staging cluster: https://kubernetes.default.svc - env: production namespace: nginx-production cluster: https://prod-cluster.example.com template: metadata: name: "nginx-{{env}}" spec: project: default source: repoURL: https://github.com/votre-org/config-repo targetRevision: main path: "nginx-demo/overlays/{{env}}" destination: server: "{{cluster}}" namespace: "{{namespace}}" syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=trueCet ApplicationSet crée trois Applications : nginx-dev, nginx-staging et
nginx-production, chacune pointant vers son overlay.
Promotion entre environnements
Section intitulée « Promotion entre environnements »Via PR (recommandé en production)
Section intitulée « Via PR (recommandé en production) »La promotion manuelle via Pull Request est la méthode la plus sûre : elle permet une revue humaine avant que le changement n'atteigne la production.
Workflow type :
- La CI pousse le nouveau tag dans
overlays/dev/kustomization.yaml - Dev se synchronise automatiquement
- Après validation, ouvrez une PR pour mettre à jour
overlays/staging/ - Après approbation, mergez. Staging se synchronise
- Ouvrez une PR vers
overlays/production/. Approbation par l'équipe - Fusion → déploiement automatique en production
# Script de promotion dev → stagingCURRENT_TAG=$(yq '.images[0].newTag' nginx-demo/overlays/dev/kustomization.yaml)yq -i ".images[0].newTag = \"${CURRENT_TAG}\"" \ nginx-demo/overlays/staging/kustomization.yamlgit add nginx-demo/overlays/staging/kustomization.yamlgit commit -m "chore(staging): promote nginx to ${CURRENT_TAG}"git push origin promote/staging-nginx-${CURRENT_TAG}# Ouvrir la PR depuis cette brancheVia argocd app sync (dev/staging uniquement)
Section intitulée « Via argocd app sync (dev/staging uniquement) »Pour des environnements non-critiques, vous pouvez forcer une synchronisation depuis la CI après le déploiement en dev :
argocd app sync nginx-staging \ --server argocd.example.com \ --auth-token "$ARGOCD_TOKEN" \ --timeout 120Rollback ciblé sur un environnement
Section intitulée « Rollback ciblé sur un environnement »L'intérêt du multi-environnements, c'est de pouvoir revenir en arrière sur un
seul environnement sans toucher aux autres. Comme chaque environnement a son
overlay dans Git, un rollback consiste simplement à annuler le commit qui a
modifié cet overlay. C'est la méthode GitOps, et elle est parfaitement isolée :
revenir en arrière sur overlays/production/ ne change rien à dev ou staging.
# Annuler le dernier commit qui a modifié l'overlay productiongit revert <sha-du-commit-production>git push origin mainArgoCD détecte le nouveau commit, resynchronise uniquement nginx-production
sur la version d'avant, et l'Application repasse Synced + Healthy. La
traçabilité est préservée : l'historique Git montre ce qui a été annulé et
pourquoi.
À retenir
Section intitulée « À retenir »- Kustomize overlays est la stratégie recommandée pour le multi-env : une base commune + sur-couches spécifiques par environnement. Pas de duplication.
- Un
ApplicationSetavec le générateur List permet de déployer la même application dans N environnements depuis un seul template. - La promotion via PR est la méthode la plus sûre pour la production : revue humaine avant déploiement.
kubectl kustomize path/permet de vérifier localement ce que Kustomize générera, avant de pousser.- Préférez le git revert au
argocd app rollbacken production pour maintenir Git comme source de vérité. - Épinglez une version d'image précise dans chaque overlay, jamais
latest: la promotion recopie ce tag d'un environnement à l'autre.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Score par domaine
Un domaine regroupe plusieurs guides et reçoit plusieurs questions : son score est plus fiable qu'un score par thème, qui porte souvent sur une seule question.
Bilan
Points forts
Aucun sujet réussi à 80 % sur au moins deux questions pour l’instant.
Points faibles
Aucun sujet sous le seuil de réussite.
À faire ensuite
Des indices pour retenter votre chance ?
Continuer le cours : Promouvoir avec Kargo
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications