Vous avez ArgoCD installé. Il est maintenant temps de lui confier votre première
application. Ce guide vous fait créer un dépôt de manifestes, déclarer une
Application ArgoCD, déclencher une synchronisation et comprendre tous les
statuts affichés dans le dashboard. À la fin, une application tourne dans votre
cluster et ArgoCD la surveille en continu.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Préparer un dépôt de manifestes Kubernetes minimal pour ArgoCD
- Déclarer une
ApplicationArgoCD via CLI et via YAML (méthode GitOps) - Déclencher et suivre une synchronisation manuelle
- Interpréter les statuts Sync (
Synced,OutOfSync) et Health (Healthy,Degraded) - Activer le self-heal (réconciliation automatique) et le prune (suppression des ressources orphelines)
- Inspecter les diffs et diagnostiquer un échec de synchronisation
Préparer un dépôt de manifestes
Section intitulée « Préparer un dépôt de manifestes »ArgoCD déploie ce qu’il trouve dans un dépôt Git. Il vous faut donc un dépôt contenant des manifestes Kubernetes. Si vous n’en avez pas, créez-en un minimal.
Pour cet exemple, nous allons déployer une application Nginx simple. Créez un dépôt Git (GitHub, GitLab ou autre) avec cette structure :
config-repo/└── nginx-demo/ ├── deployment.yaml ├── service.yaml └── namespace.yamlContenu des fichiers :
apiVersion: v1kind: Namespacemetadata: name: demoapiVersion: apps/v1kind: Deploymentmetadata: name: nginx namespace: demospec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.27 ports: - containerPort: 80apiVersion: v1kind: Servicemetadata: name: nginx namespace: demospec: selector: app: nginx ports: - port: 80 targetPort: 80Commitez ces trois fichiers et poussez sur la branche main. Notez l’URL de
votre dépôt.
Créer une Application ArgoCD
Section intitulée « Créer une Application ArgoCD »Une Application ArgoCD lie une source Git à une destination Kubernetes. Il y
a deux façons de la créer : via le CLI ou via un fichier YAML appliqué avec
kubectl. Nous allons utiliser les deux pour bien comprendre.
Via le CLI
Section intitulée « Via le CLI »argocd app create nginx-demo \ --repo https://github.com/votre-org/config-repo \ --path nginx-demo \ --dest-server https://kubernetes.default.svc \ --dest-namespace demo \ --revision mainVérification :
argocd app get nginx-demo# Sync Status: OutOfSync from main (abc1234)# Health Status: Missing# Source:# - Repo: https://github.com/votre-org/config-repo# Target: main# Path: nginx-demoLe statut OutOfSync est normal : ArgoCD a lu le dépôt Git mais n’a pas encore
appliqué les ressources sur le cluster. Missing signifie que les ressources
n’existent pas encore.
Via un fichier YAML (méthode GitOps)
Section intitulée « Via un fichier YAML (méthode GitOps) »La méthode recommandée en production : déclarer les Applications elles-mêmes dans Git.
apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata: name: nginx-demo namespace: argocdspec: project: default source: repoURL: https://github.com/votre-org/config-repo targetRevision: main path: nginx-demo destination: server: https://kubernetes.default.svc namespace: demo syncPolicy: syncOptions: - CreateNamespace=true # Crée le namespace si absentkubectl apply -f argocd-app.yamlDéclencher une synchronisation
Section intitulée « Déclencher une synchronisation »Par défaut, cette Application est en mode synchronisation manuelle : ArgoCD surveille Git mais ne déploie pas tant que vous ne le demandez pas. C’est le comportement sécurisé pour commencer.
# Synchronisation manuelle via CLIargocd app sync nginx-demoSortie attendue :
TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH2026-03-30T12:00:00+02:00 Namespace demo OutOfSync Missing2026-03-30T12:00:01+02:00 Namespace demo Synced Healthy2026-03-30T12:00:01+02:00 apps Deployment demo nginx OutOfSync Missing2026-03-30T12:00:02+02:00 Service demo nginx Synced Healthy2026-03-30T12:00:03+02:00 apps Deployment demo nginx Synced Progressing
Name: argocd/nginx-demoSync Status: Synced to main (abc1234)Health Status: Progressing
Operation: SyncSync Revision: abc1234Phase: SucceededHeath passe de Progressing à Healthy en quelques secondes, le temps que le
pod démarre.
Vérification sur le cluster :
kubectl get pods -n demo# NAME READY STATUS RESTARTS# nginx-xxxxxxxxxx-xxxxx 1/1 Running 0Comprendre les statuts
Section intitulée « Comprendre les statuts »Après la synchronisation, ArgoCD affiche deux statuts pour chaque Application.
Sync Status
Section intitulée « Sync Status »| Statut | Signification | Que faire |
|---|---|---|
Synced | Le cluster est identique à Git | Rien — tout va bien |
OutOfSync | Des différences existent | Inspecter le diff, synchroniser si voulu |
Unknown | Impossible de vérifier | Vérifier les droits ArgoCD sur le cluster |
Pour voir ce qui diffère :
argocd app diff nginx-demoHealth Status
Section intitulée « Health Status »| Statut | Signification |
|---|---|
Healthy | Tous les pods tournent correctement |
Progressing | Un déploiement est en cours |
Degraded | Un pod est en erreur (CrashLoopBackOff, ImagePullBackOff…) |
Suspended | Un CronJob est pausé |
Missing | La ressource est dans Git mais pas dans le cluster |
Unknown | ArgoCD ne peut pas évaluer la santé |
Pour inspecter en détail :
argocd app get nginx-demo# Sync Status: Synced to main (abc1234)# Health Status: Healthy# Source:# - Repo: https://github.com/votre-org/config-repo# Target: main# Path: nginx-demo
argocd app resources nginx-demo# GROUP KIND NAMESPACE NAME ORPHANED# Namespace demo No# Service demo nginx No# apps Deployment demo nginx NoActiver la synchronisation automatique
Section intitulée « Activer la synchronisation automatique »La synchronisation manuelle est bien pour comprendre. En pratique, on active l’auto-sync pour que le cluster se rapprocle de Git dès qu’un commit est poussé.
argocd app set nginx-demo \ --sync-policy automated \ --auto-prune \ --self-healOu par YAML en modifiant la syncPolicy :
syncPolicy: automated: prune: true # Supprime les ressources retirées de Git selfHeal: true # Corrige le drift automatiquement syncOptions: - CreateNamespace=trueTester le self-heal
Section intitulée « Tester le self-heal »Pour voir le self-heal en action, modifiez directement le Deployment dans le cluster :
kubectl scale deployment nginx -n demo --replicas=3Attendez environ 20 secondes, puis vérifiez :
kubectl get deployment nginx -n demo# NAME READY UP-TO-DATE AVAILABLE AGE# nginx 1/1 1 1 5mArgoCD a détecté l’écart et remis le Deployment à 1 replica, comme décrit dans Git.
Tester la détection de drift
Section intitulée « Tester la détection de drift »Modifiez maintenant un fichier dans votre dépôt Git sans passer par ArgoCD.
Par exemple, changez replicas: 1 en replicas: 2 dans deployment.yaml
et poussez.
En quelques secondes (ou au prochain polling de 3 minutes), ArgoCD passe à
OutOfSync, puis se synchronise et déploie la nouvelle version.
# Surveiller en temps réelwatch argocd app get nginx-demoÀ retenir
Section intitulée « À retenir »- Une
ApplicationArgoCD lie une source Git (dépôt + chemin + branche) à une destination Kubernetes (cluster + namespace). OutOfSync= des différences existent entre Git et le cluster.Synced= le cluster correspond à Git.Healthy= les workloads déployés fonctionnent.Degraded= erreur sur un pod ou une ressource.- Auto-sync déclenche automatiquement les déploiements sur chaque push Git.
- Self-heal corrige automatiquement toute modification manuelle du cluster.
- Prune supprime du cluster les ressources retirées de Git.
- La commande
argocd app diffmontre exactement ce qui diffère avant de synchroniser.