ArgoCD fonctionne comme un gardien permanent de votre cluster Kubernetes : il
compare en continu l’état souhaité (décrit dans Git) avec l’état réel (ce qui
tourne dans le cluster), et corrige automatiquement les écarts. Ce guide
explique comment ce mécanisme fonctionne, pourquoi il est plus fiable qu’un
kubectl apply en fin de pipeline, et quels objets ArgoCD introduce dans
votre cluster.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Le modèle de réconciliation : desired state, live state, control loop et drift
- Les composants internes d’ArgoCD (argocd-server, repo-server, application-controller, Redis, Dex) et le rôle de chacun
- L’objet
Application: source Git, destination Kubernetes, politiques de sync - Les
AppProject: périmètres d’autorisation pour isoler les équipes - L’
ApplicationSet: génération automatique d’Applications depuis un template
Qu’est-ce qu’ArgoCD ?
Section intitulée « Qu’est-ce qu’ArgoCD ? »ArgoCD est un opérateur GitOps — c’est-à-dire un programme qui tourne dans votre cluster Kubernetes et qui est spécialisé dans une seule tâche : garder le cluster synchronisé avec un dépôt Git.
L’analogie : Imaginez un contremaître sur un chantier. Il reçoit les plans de l’architecte (votre dépôt Git) et s’assure que les ouvriers (Kubernetes) construisent exactement ce qui est dessiné. Si quelqu’un modifie quelque chose sur le terrain sans passer par les plans, le contremaître le remet dans l’état prévu.
Ce qui distingue ArgoCD d’un simple kubectl apply dans un pipeline :
| Approche | Ce qui se passe | Risque |
|---|---|---|
kubectl apply en CI | Le cluster est modifié une fois, puis oublié | Drift : le cluster peut dériver sans que personne ne le sache |
| ArgoCD | ArgoCD surveille en permanence, réconcilie en continu | Drift détecté et corrigé automatiquement |
Le modèle de réconciliation
Section intitulée « Le modèle de réconciliation »Le cœur d’ArgoCD est une boucle de contrôle (control loop), qui effectue ces étapes en permanence :
1. OBSERVE → Lire l'état actuel du cluster (live state)2. DIFF → Comparer avec l'état souhaité dans Git (desired state)3. ACT → Si différents, appliquer les manifestes Git sur le cluster4. REPEAT → Reprendre depuis le débutCe cycle s’appelle la réconciliation. Par défaut, ArgoCD le déclenche toutes les 3 minutes (polling Git) et immédiatement à chaque webhook Git.
Desired state vs Live state
Section intitulée « Desired state vs Live state »| Terme | Définition | Où ça vit |
|---|---|---|
| Desired state | Ce que vous voulez (décrit dans Git) | Dépôt Git |
| Live state | Ce qui tourne réellement | Cluster Kubernetes |
| Drift | Écart entre desired et live | Détecté par ArgoCD |
Les composants internes d’ArgoCD
Section intitulée « Les composants internes d’ArgoCD »ArgoCD est lui-même une application Kubernetes composée de plusieurs pods, chacun avec un rôle précis :
argocd-server
Section intitulée « argocd-server »C’est le point d’entrée d’ArgoCD. Il expose :
- L’interface web (dashboard) accessible depuis votre navigateur
- L’API gRPC/REST que le CLI
argocdet les outils externes utilisent
Il ne touche jamais directement au cluster de destination — c’est l’application-controller qui fait les synchronisations.
repo-server
Section intitulée « repo-server »Son rôle : cloner vos dépôts Git et générer les manifestes Kubernetes finaux. C’est lui qui sait lire du Helm, du Kustomize, ou du YAML brut, et qui produit la liste de toutes les ressources à appliquer.
application-controller
Section intitulée « application-controller »Le chef d’orchestre. Il :
- Appelle le repo-server pour obtenir le desired state
- Interroge l’API Kubernetes pour obtenir le live state
- Compare les deux
- Déclenche les synchronisations si nécessaire
C’est le composant le plus critique — si vous avez plusieurs clusters gérés, c’est lui qui doit scaler.
Un cache utilisé par l’application-controller pour stocker le résultat des comparaisons récentes et éviter de surcharger l’API Kubernetes.
Dex (optionnel)
Section intitulée « Dex (optionnel) »Un service d’authentification OIDC qui permet à ArgoCD de déléguer la connexion à un fournisseur d’identité externe : GitHub, GitLab, LDAP, Active Directory, etc. Obligatoire en production dans une équipe.
Les objets Kubernetes qu’ArgoCD introduce
Section intitulée « Les objets Kubernetes qu’ArgoCD introduce »ArgoCD étend Kubernetes avec des Custom Resource Definitions (CRD) qui représentent les concepts ArgoCD en tant que ressources Kubernetes.
Application
Section intitulée « Application »L’objet Application est la pièce centrale. Il déclare :
- Où est la source (dépôt Git + chemin + révision)
- Où déployer (cluster + namespace)
- Comment synchroniser (manuel ou automatique)
apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata: name: mon-app namespace: argocdspec: # La source : quel dépôt Git et quel chemin source: repoURL: https://github.com/mon-org/config-repo targetRevision: main path: mon-app/overlays/production
# La destination : quel cluster et quel namespace destination: server: https://kubernetes.default.svc # cluster local namespace: production
# La politique de synchronisation syncPolicy: automated: # synchronisation automatique selfHeal: true # correction du drift automatique prune: true # suppression des ressources retirées de GitAppProject
Section intitulée « AppProject »Un AppProject est un périmètre de sécurité autour d’un groupe
d’Applications. Il répond à la question : “Qui a le droit de déployer quoi,
où ?”
apiVersion: argoproj.io/v1alpha1kind: AppProjectmetadata: name: equipe-backend namespace: argocdspec: # Dépôts Git autorisés sourceRepos: - https://github.com/mon-org/config-repo
# Clusters et namespaces de destination autorisés destinations: - namespace: backend-* server: https://kubernetes.default.svc
# Types de ressources Kubernetes autorisés clusterResourceWhitelist: - group: '' kind: NamespaceSans AppProject explicite, les Applications utilisent le projet default qui
n’a aucune restriction. En production, chaque équipe doit avoir son propre
AppProject.
ApplicationSet
Section intitulée « ApplicationSet »Un ApplicationSet est un générateur d’Applications. Plutôt que de créer
20 objets Application à la main (un par environnement, ou un par dépôt), on
crée un ApplicationSet qui les génère depuis un template :
apiVersion: argoproj.io/v1alpha1kind: ApplicationSetmetadata: name: apps-par-env namespace: argocdspec: generators: - list: elements: - env: dev namespace: app-dev - env: staging namespace: app-staging - env: production namespace: app-production template: metadata: name: 'mon-app-{{env}}' spec: source: repoURL: https://github.com/mon-org/config-repo path: 'mon-app/overlays/{{env}}' targetRevision: main destination: server: https://kubernetes.default.svc namespace: '{{namespace}}' syncPolicy: automated: selfHeal: true prune: trueCe fichier crée automatiquement 3 Application ArgoCD : mon-app-dev,
mon-app-staging, mon-app-production.
Les ApplicationSets seront détaillés dans le module Multi-environnements.
Les statuts à comprendre
Section intitulée « Les statuts à comprendre »Quand vous regardez l’interface ArgoCD ou que vous utilisez le CLI, deux dimensions de statut s’affichent toujours :
Sync Status
Section intitulée « Sync Status »| Statut | Signification |
|---|---|
Synced | Le cluster correspond exactement à Git |
OutOfSync | Il y a des différences — une synchro est nécessaire |
Unknown | Impossible de déterminer (problème de connexion, permissions) |
Health Status
Section intitulée « Health Status »| Statut | Signification |
|---|---|
Healthy | Toutes les ressources sont saines (Pods Running, Services OK…) |
Progressing | Déploiement en cours (rollout, Job en attente…) |
Degraded | Erreur détectée (Pod CrashLoopBackOff, PVC non monté…) |
Suspended | Ressource intentionnellement pausée (CronJob suspendu…) |
Missing | La ressource est dans Git mais n’existe pas dans le cluster |
Unknown | ArgoCD ne peut pas déterminer l’état de santé |
Résumé des concepts fondamentaux
Section intitulée « Résumé des concepts fondamentaux »Avant de passer à l’installation, assurez-vous de maîtriser ces termes :
| Concept | Définition simple |
|---|---|
| Opérateur GitOps | Programme K8s qui synchronise le cluster depuis Git |
| Réconciliation | Boucle de contrôle : observe → compare → agit |
| Desired state | Ce que Git dit (les manifestes) |
| Live state | Ce qui tourne réellement dans le cluster |
| Drift | Écart entre desired et live |
| Application | Objet K8s ArgoCD : source Git → destination cluster |
| AppProject | Périmètre de sécurité autour d’Applications |
| ApplicationSet | Générateur automatique d’Applications |
| Sync Status | Le cluster est-il identique à Git ? |
| Health Status | Les workloads déployés sont-ils sains ? |
À retenir
Section intitulée « À retenir »- ArgoCD est un opérateur Kubernetes qui tourne dans votre cluster et surveille Git en permanence.
- La réconciliation est une boucle : observe → compare → agit. Elle tourne en continu, toutes les 3 minutes par défaut.
- L’
Applicationest l’objet central : elle lie une source Git à une destination Kubernetes. - L’
AppProjectajoute des garde-fous de sécurité (qui peut déployer quoi où). - L’
ApplicationSetgénère des Applications automatiquement depuis des templates — indispensable pour gérer plusieurs environnements. - Deux statuts à surveiller : Sync Status (Git vs cluster) et Health Status (santé des workloads).