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

ArgoCD — Déployer votre première application

10 min de lecture

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.

  • Préparer un dépôt de manifestes Kubernetes minimal pour ArgoCD
  • Déclarer une Application ArgoCD 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

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

Contenu des fichiers :

nginx-demo/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: demo
nginx-demo/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: demo
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80
nginx-demo/service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: demo
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80

Commitez ces trois fichiers et poussez sur la branche main. Notez l’URL de votre dépôt.

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.

Fenêtre de terminal
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 main

Vérification :

argocd/nginx-demo
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-demo

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

La méthode recommandée en production : déclarer les Applications elles-mêmes dans Git.

argocd-app.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx-demo
namespace: argocd
spec:
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 absent
Fenêtre de terminal
kubectl apply -f argocd-app.yaml

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.

Fenêtre de terminal
# Synchronisation manuelle via CLI
argocd app sync nginx-demo

Sortie attendue :

TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH
2026-03-30T12:00:00+02:00 Namespace demo OutOfSync Missing
2026-03-30T12:00:01+02:00 Namespace demo Synced Healthy
2026-03-30T12:00:01+02:00 apps Deployment demo nginx OutOfSync Missing
2026-03-30T12:00:02+02:00 Service demo nginx Synced Healthy
2026-03-30T12:00:03+02:00 apps Deployment demo nginx Synced Progressing
Name: argocd/nginx-demo
Sync Status: Synced to main (abc1234)
Health Status: Progressing
Operation: Sync
Sync Revision: abc1234
Phase: Succeeded

Heath passe de Progressing à Healthy en quelques secondes, le temps que le pod démarre.

Vérification sur le cluster :

Fenêtre de terminal
kubectl get pods -n demo
# NAME READY STATUS RESTARTS
# nginx-xxxxxxxxxx-xxxxx 1/1 Running 0

Après la synchronisation, ArgoCD affiche deux statuts pour chaque Application.

StatutSignificationQue faire
SyncedLe cluster est identique à GitRien — tout va bien
OutOfSyncDes différences existentInspecter le diff, synchroniser si voulu
UnknownImpossible de vérifierVérifier les droits ArgoCD sur le cluster

Pour voir ce qui diffère :

Fenêtre de terminal
argocd app diff nginx-demo
StatutSignification
HealthyTous les pods tournent correctement
ProgressingUn déploiement est en cours
DegradedUn pod est en erreur (CrashLoopBackOff, ImagePullBackOff…)
SuspendedUn CronJob est pausé
MissingLa ressource est dans Git mais pas dans le cluster
UnknownArgoCD ne peut pas évaluer la santé

Pour inspecter en détail :

argocd/nginx-demo
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 No

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

Fenêtre de terminal
argocd app set nginx-demo \
--sync-policy automated \
--auto-prune \
--self-heal

Ou 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=true

Pour voir le self-heal en action, modifiez directement le Deployment dans le cluster :

Fenêtre de terminal
kubectl scale deployment nginx -n demo --replicas=3

Attendez environ 20 secondes, puis vérifiez :

Fenêtre de terminal
kubectl get deployment nginx -n demo
# NAME READY UP-TO-DATE AVAILABLE AGE
# nginx 1/1 1 1 5m

ArgoCD a détecté l’écart et remis le Deployment à 1 replica, comme décrit dans Git.

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.

Fenêtre de terminal
# Surveiller en temps réel
watch argocd app get nginx-demo
  • Une Application ArgoCD 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 diff montre exactement ce qui diffère avant de synchroniser.

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