Aller au contenu
CI/CD & Automatisation medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

ArgoCD — Concepts et architecture

11 min de lecture

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.

  • 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

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 :

ApprocheCe qui se passeRisque
kubectl apply en CILe cluster est modifié une fois, puis oubliéDrift : le cluster peut dériver sans que personne ne le sache
ArgoCDArgoCD surveille en permanence, réconcilie en continuDrift détecté et corrigé automatiquement

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 cluster
4. REPEAT → Reprendre depuis le début

Ce 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.

TermeDéfinitionOù ça vit
Desired stateCe que vous voulez (décrit dans Git)Dépôt Git
Live stateCe qui tourne réellementCluster Kubernetes
DriftÉcart entre desired et liveDétecté par ArgoCD

ArgoCD est lui-même une application Kubernetes composée de plusieurs pods, chacun avec un rôle précis :

Composants internes d'ArgoCD dans le namespace argocd : argocd-server, repo-server, application-controller, Redis et Dex

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 argocd et les outils externes utilisent

Il ne touche jamais directement au cluster de destination — c’est l’application-controller qui fait les synchronisations.

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.

Le chef d’orchestre. Il :

  1. Appelle le repo-server pour obtenir le desired state
  2. Interroge l’API Kubernetes pour obtenir le live state
  3. Compare les deux
  4. 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.

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.

ArgoCD étend Kubernetes avec des Custom Resource Definitions (CRD) qui représentent les concepts ArgoCD en tant que ressources Kubernetes.

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/v1alpha1
kind: Application
metadata:
name: mon-app
namespace: argocd
spec:
# 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 Git

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/v1alpha1
kind: AppProject
metadata:
name: equipe-backend
namespace: argocd
spec:
# 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: Namespace

Sans AppProject explicite, les Applications utilisent le projet default qui n’a aucune restriction. En production, chaque équipe doit avoir son propre AppProject.

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/v1alpha1
kind: ApplicationSet
metadata:
name: apps-par-env
namespace: argocd
spec:
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: true

Ce 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.

Quand vous regardez l’interface ArgoCD ou que vous utilisez le CLI, deux dimensions de statut s’affichent toujours :

StatutSignification
SyncedLe cluster correspond exactement à Git
OutOfSyncIl y a des différences — une synchro est nécessaire
UnknownImpossible de déterminer (problème de connexion, permissions)
StatutSignification
HealthyToutes les ressources sont saines (Pods Running, Services OK…)
ProgressingDéploiement en cours (rollout, Job en attente…)
DegradedErreur détectée (Pod CrashLoopBackOff, PVC non monté…)
SuspendedRessource intentionnellement pausée (CronJob suspendu…)
MissingLa ressource est dans Git mais n’existe pas dans le cluster
UnknownArgoCD ne peut pas déterminer l’état de santé

Avant de passer à l’installation, assurez-vous de maîtriser ces termes :

ConceptDéfinition simple
Opérateur GitOpsProgramme K8s qui synchronise le cluster depuis Git
RéconciliationBoucle de contrôle : observe → compare → agit
Desired stateCe que Git dit (les manifestes)
Live stateCe qui tourne réellement dans le cluster
DriftÉcart entre desired et live
ApplicationObjet K8s ArgoCD : source Git → destination cluster
AppProjectPérimètre de sécurité autour d’Applications
ApplicationSetGénérateur automatique d’Applications
Sync StatusLe cluster est-il identique à Git ?
Health StatusLes workloads déployés sont-ils sains ?
  • 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’Application est l’objet central : elle lie une source Git à une destination Kubernetes.
  • L’AppProject ajoute des garde-fous de sécurité (qui peut déployer quoi où).
  • L’ApplicationSet gé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).

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn