ArgoCD et GitOps : Guide Complet pour Déployer vos Applications Kubernetes
ArgoCD transforme votre dépôt Git en source de vérité unique pour Kubernetes.
- Synchronise automatiquement l’état du cluster avec Git.
- Détecte les dérives après modification manuelle via kubectl.
- Rafraîchit le dépôt toutes les 3 minutes par défaut.
- Webhooks réduisent la détection de changements à quelques secondes.
- CRDs Application, AppProject et ApplicationSet pour piloter les apps.
- WebUI et CLI complémentaires pour diagnostiquer et automatiser.
Introduction à ArgoCD et ses Fonctionnalités Clés
ArgoCD agit comme un opérateur Kubernetes dont la mission est de synchroniser en continu l’état de votre cluster avec ce qui est déclaré dans un dépôt Git. Concrètement, il transforme votre dépôt de code en source de vérité unique pour toute votre infrastructure.
Son rôle principal est de détecter automatiquement toute dérive entre la configuration souhaitée (dans Git) et la configuration réelle (dans le cluster). Si un développeur modifie un déploiement manuellement via kubectl edit, ArgoCD le remarque immédiatement et peut revenir à l’état défini dans Git, selon la stratégie configurée.
Pour vérifier ces écarts, il rafraîchit votre dépôt Git toutes les 3 minutes par défaut, comme, à l’instar des outils de recherche pour pinecone développeurs le chunking dans Pipedream pour RAG. Cette fréquence peut être optimisée par l’activation de webhooks (GitHub, GitLab, Bitbucket, Gitea), qui déclenchent un rafraîchissement immédiat dès qu’un nouveau commit est poussé. Cela réduit le temps de détection d’un changement de plusieurs minutes à quelques secondes.
Les piliers fonctionnels d’ArgoCD
ArgoCD ne se limite pas à un simple agent de synchronisation. Il offre une, comme pour gérer des données non structurées avec weaviate base de données vectorielle interface WebUI complète, à l’image de l’IA dans HubSpot qui analyse les signaux CRM, et une CLI (argocd) pour interagir avec lui. Cette dualité est essentielle : la WebUI facilite le diagnostic et la visualisation des applications pour vos équipes, tandis que la CLI permet d’intégrer ArgoCD dans des scripts d’automatisation et des pipelines CI, à la manière d’un workflow GitHub Actions. Les principaux piliers sont les suivants :
- Synchronisation cluster depuis Git : l’état déclaratif du dépôt est appliqué au cluster cible.
- Détection automatique de drift : toute modification manuelle du cluster est signalée comme une dérive à corriger.
- Rafraîchissement toutes les 3 minutes : l’intervalle par défaut pour vérifier les changements dans le dépôt source.
- Interface WebUI et CLI : deux façons complémentaires de piloter ArgoCD, le tout sans frais de licence.
- Trois objets CRDs natifs : Application (définit une app), AppProject (limite les permissions) et ApplicationSet (génère des apps en masse).
Grâce à ces Custom Resource Definitions (CRDs), ArgoCD s’intègre nativement à l’écosystème Kubernetes. Tout ce que vous configurez est déclaratif, versionnable et auditable, ce qui renforce la reproductibilité de vos déploiements, à l’instar de la gestion d’infrastructure avec Terraform. Vous décrivez l’état souhaité, ArgoCD s’occupe de faire correspondre la réalité à votre vision.
Déploiement d’Applications avec ArgoCD : Guide Pratique

Pour déployer une application, deux voies s’offrent à vous : la CLI ArgoCD (commande `argocd app create`) ou la déclaration d’un manifeste Kubernetes de type CRD Application. En pratique, la méthode par CRDs est privilégiée car elle permet de versionner votre configuration dans Git, ce qui est l’essence même du GitOps.
Création d’applications via CLI et CRDs
Un objet `Application` est le cœur du système. Il fait le lien entre une source (un dépôt Git, un chart Helm ou un répertoire) et une destination (un namespace sur un cluster). Créer un manifeste YAML plutôt qu’utiliser la CLI offre un avantage décisif : la reproductibilité. Votre définition d’application devient alors elle-même une ressource auditable et versionnée.
Pour les déploiements simples, un fichier YAML déclaratif suffit. Cependant, pour dupliquer des déploiements similaires sur plusieurs clusters ou namespaces, vous devrez vous tourner vers l’objet `ApplicationSet`, qui agit comme un template.
Gestion du cycle de vie et statuts
Une fois l’application déclarée, ArgoCD entre dans sa boucle de réconciliation. Par défaut, il rafraîchit le dépôt Git toutes les 3 minutes pour détecter les écarts entre l’état désiré et l’état réel du cluster (appelé « drift »). Pour une synchronisation quasi instantanée, l’activation des webhooks GitHub ou GitLab permet de déclencher une mise à jour dès qu’un commit est poussé.
Le suivi de la santé de vos déploiements passe par la surveillance de trois niveaux d’indicateurs, visibles dans la WebUI ou via `kubectl get applications`:
Suivi de synchronisation : l’état `Synced` indique que le cluster correspond à Git, `OutOfSync` signale un écart.
Vérification des ressources : ArgoCD vérifie que chaque ressource Kubernetes (Deployment, Service, ConfigMap) est bien présente et fonctionnelle.
Adoption syncPolicy automated : cette politique permet de synchroniser automatiquement le cluster à chaque détection de drift. Attention, si `prune: true` n’est pas défini, les ressources supprimées de Git resteront sur le cluster.
Gestion des hooks déploiement : les hooks (PreSync, Sync, PostSync) modifient l’ordre de déploiement, par exemple pour migrer une base de données avant la mise en ligne de la nouvelle version.
Surveillance statut Healthy/Degraded : le statut de santé global est `Healthy` (vert) lorsque tout fonctionne, `Progressing` (bleu) pendant un déploiement, et `Degraded` ou `Missing` (rouge) en cas de problème critique.
Concepts Fondamentaux du GitOps avec ArgoCD
Git comme source de vérité unique
Dans une approche GitOps, le dépôt Git devient la seule référence fiable pour décrire l’état souhaité de votre infrastructure. Chaque fichier YAML qui y est poussé définit précisément ce qui doit être déployé sur votre cluster Kubernetes. ArgoCD va constamment comparer la réalité de votre infrastructure avec cette description, et non l’inverse.
Cette philosophie repose sur un principe : le cluster n’est jamais modifié directement. Toute évolution passe par un Merge Request. Votre équipe peut alors relire, commenter et approuver les changements avant qu’ils ne touchent l’environnement. Le cluster devient ainsi un simple exécutant, et l’historique de vos décisions d’infrastructure est tracé dans Git.
Cette centralisation élimine les dérives souvent rencontrées avec les commandes manuelles du type kubectl apply. Les modifications effectuées à la main sur le cluster sont détectées comme une dérive par ArgoCD, qui vous alerte immédiatement.
Boucle de réconciliation : Observe, Diff, Apply
Le moteur d’ArgoCD fonctionne selon une boucle de réconciliation en trois temps : Observe, Diff, Apply. Cette mécanique permet de garantir que le cluster converge toujours vers l’état décrit dans Git, sans intervention humaine.
En premier lieu, ArgoCD observe l’état actuel des ressources déployées dans le cluster. Dans le même temps, il s’appuie sur le dépôt Git pour identifier l’état désiré. Dans un deuxième temps, l’outil calcule la différence entre ces deux états : il identifie les ressources manquantes, les configurations divergentes ou les éléments obsolètes.
C’est ce processus de comparaison qui met en lumière le drift, une divergence introduite par une modification manuelle ou un outil externe. Par défaut, ArgoCD rafraîchit son dépôt Git toutes les 3 minutes pour vérifier cette concordance. Ce délai peut être réduit à quelques secondes grâce aux webhooks configurés sur GitHub, GitLab, Bitbucket ou Gitea, qui déclenchent une réconciliation immédiate après chaque commit.
Enfin, la phase d’application corrige les écarts en synchronisant le cluster avec le dépôt. Cette convergence est automatique si vous activez la politique de synchronisation dédiée. Dans le cas contraire, le développeur valide manuellement les changements proposés via l’interface ou la CLI.
Installation et Configuration d’ArgoCD sur Kubernetes
Prérequis et méthodes d’installation
Avant de déployer ArgoCD, assurez-vous de disposer d’un cluster Kubernetes stable (version 1.25 ou supérieure recommandée) et de kubectl configuré avec les droits d’administration. Deux approches principales s’offrent à vous : l’installation d’un bundle complet ou d’une version minimale.
- Bundle complet : inclut la WebUI, le serveur API, le contrôleur et la CLI idéal pour une première découverte.
- Installation minimale : ne déploie que les CRDs essentiels, en laissant le reste à votre propre configuration.
- Déploiement via Helm : le chart officiel argocd simplifie la gestion des paramètres et la mise à jour de la stack.
- Version 3.x recommandée : profitez des dernières corrections de sécurité et des améliorations de performance.
Configuration de l’accès (WebUI et CLI)
Une fois l’installation terminée, configurez soigneusement l’accès. La WebUI est accessible par défaut via un service de type ClusterIP ; exposez-la via un LoadBalancer ou un Ingress selon votre infrastructure. Pour la CLI, téléchargez la binaire argocd et connectez-vous avec la commande argocd login.
En production, désactivez le compte admin local dès que possible et remplacez-le par une authentification via SSO (OIDC, LDAP ou SAML). La gestion des secrets doit être renforcée : utilisez les fonctionnalités intégrées d’ArgoCD pour chiffrer les données sensibles dans les dépôts Git.
Pour les équipes qui travaillent en continu, configurez les webhooks (GitHub, GitLab, Bitbucket) afin de déclencher un rafraîchissement immédiat du dépôt à chaque commit, au lieu d’attendre le cycle par défaut de 3 minutes.
Architecture Interne et Intégrations Helm et Kustomize
Au cœur d’ArgoCD, la CRD Application établit le lien entre une source Git et un cluster de destination. Chaque application est ensuite encadrée par un AppProject, qui définit le périmètre d’autorisation : dépôts accessibles, clusters ciblés et namespaces autorisés. Cette séparation stricte des responsabilités garantit que chaque équipe ne manipule que son périmètre, sans risque de collision avec l’infrastructure d’autrui.
Pour la personnalisation des déploiements, Kustomize s’impose grâce à ses overlays par environnement : un socle commun et des variantes staging, production ou région. Les équipes avancées intègrent KSOPS, un plugin de chiffrement YAML, pour protéger les secrets directement dans le dépôt Git. Son activation nécessite les flags --enable-alpha-plugins et --enable-exec, tandis que le chiffrement repose sur une clé GPG ou Age, avec SealedSecrets en alternative.
Enfin, ArgoCD permet de surcharger des variables depuis l’interface sans jamais modifier le contenu du dépôt Git. Cette souplesse préserve la traçabilité complète des changements tout en offrant une réactivité opérationnelle pour les ajustements ponctuels ou les tests rapides en environnement contrôlé.
Gestion Multi-Cluster et ApplicationSet
ApplicationSet : templates et duplications
L’ApplicationSet est le composant qui transforme la gestion multi-cluster en tâche répétitive et fiable. Son principe est simple : un template d’Application est défini une seule fois, puis dupliqué automatiquement pour chaque élément d’une liste. Cette liste peut contenir des noms de clusters, des namespaces ou des chemins de dépôts Git.
Concrètement, vous définissez un générateur (liste de clusters, de Git, etc.) et un template. ArgoCD se charge de créer autant d’Applications que d’éléments dans la liste. Par exemple, un template unique peut générer une application par namespace pour déployer le même service dans production, staging et development, sans duplication de code YAML.
Stratégies de déploiement multi-cluster
Le principal avantage de cette approche est de piloter plusieurs clusters Kubernetes depuis une seule instance ArgoCD. Vous centralisez la politique de déploiement : chaque cluster enregistré comme destination peut recevoir des applications définies dans le même dépôt Git.
La réconciliation à heure précise est possible, par exemple pour programmer une synchronisation à minuit. Combinée à la détection de drift et au rafraîchissement du dépôt Git toutes les 3 minutes par défaut, cette stratégie garantit que votre infrastructure réelle correspond toujours à l’état déclaré, même sur un parc de clusters hétérogènes. Le générateur de clusters peut même filtrer les clusters par labels pour ne déployer que sur ceux qui correspondent à certains critères.
App of Apps Pattern et Bonnes Pratiques Avancées
Le pattern App of Apps consiste à créer une application parente qui déploie d’autres applications via des CRDs Application. Cette approche centralise la gestion de l’ensemble de vos déploiements : un seul dépôt Git contient la définition de l’application racine, qui référence toutes les autres. En production, c’est la méthode recommandée pour structurer un environnement complexe, car elle permet de déclencher un déploiement global en un seul `git push`.
Pour aller plus loin, pensez à définir des AppProjects distincts pour limiter les permissions de chaque équipe sur les dépôts et clusters autorisés. Activez aussi les webhooks pour éviter d’attendre le rafraîchissement du dépôt Git, qui s’effectue toutes les 3 minutes par défaut. Enfin, utilisez `syncPolicy` avec prudence : sans `prune: true`, les ressources supprimées dans Git restent à l’état Degraded sur le cluster, ce qui peut engendrer une dette technique silencieuse.
