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. Public : débutants en GitOps qui ont déjà une
instance ArgoCD et veulent déployer leur premier workload. À 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
- Déployer aussi depuis un chart Helm avec
spec.source.helm
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@sha256:6784fb0834aa7dbbe12e3d7471e69c290df3e6ba810dc38b34ae33d3c1c05f7d 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 la 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: SucceededHealth 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 0Le résultat dans le dashboard
Section intitulée « Le résultat dans le dashboard »Le dashboard ArgoCD donne la même information d'un coup d'œil. Chaque Application est une carte qui affiche le dépôt source, le chemin, la destination et surtout les deux statuts clés en couleur : Healthy (santé) et Synced (synchronisation).

La barre latérale de gauche filtre par statut : sur un cluster qui compte des dizaines d'Applications, elle permet de repérer immédiatement celles qui sont OutOfSync ou Degraded.
Comprendre 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 NoDéployer depuis un chart Helm
Section intitulée « Déployer depuis un chart Helm »Jusqu'ici, la source de l'Application était un dossier de manifestes YAML
bruts. ArgoCD sait aussi déployer un chart Helm directement, sans que vous
lanciez helm install : c'est le repo-server qui effectue le rendu
(helm template) et applique le résultat. C'est la source la plus courante en
entreprise.
On la déclare dans spec.source.helm : le chart (ici un sous-dossier du
dépôt), les fichiers de valeurs et des paramètres qui surchargent des
valeurs à la volée.
apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata: name: helm-guestbook namespace: argocdspec: project: default source: repoURL: https://github.com/argoproj/argocd-example-apps targetRevision: HEAD path: helm-guestbook # dossier contenant le Chart.yaml helm: valueFiles: - values.yaml parameters: - name: replicaCount # surcharge une valeur du chart value: "2" destination: server: https://kubernetes.default.svc namespace: helm-guestbook syncPolicy: automated: { prune: true, selfHeal: true } syncOptions: - CreateNamespace=trueAprès synchronisation, ArgoCD a rendu le chart et appliqué le paramètre
replicaCount=2 :
helm-guestbook: sync=Synced health=Healthy
NAME READY UP-TO-DATE AVAILABLEhelm-guestbook 2/2 2 2Le paramètre replicaCount a bien produit deux réplicas, sans modifier
le chart : ArgoCD garde Git comme source de vérité et injecte vos valeurs au
rendu. La même mécanique existe pour Kustomize (spec.source.kustomize),
détaillée dans Multi-environnements.
Activer 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 rapproche 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 synchronisation automatique
Section intitulée « Tester la synchronisation automatique »Modifiez maintenant un fichier dans votre dépôt Git, la source de vérité, sans
toucher au cluster. 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.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Multi-environnements : gérer dev, staging et production avec Kustomize et ApplicationSet.
- Intégration CI/CD : connecter votre pipeline CI à ArgoCD sans accès direct au cluster.