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

ArgoCD — Pattern App of Apps et ApplicationSet

9 min de lecture

Quand votre plateforme héberge dix, vingt ou cent services, créer une Application ArgoCD à la main pour chacun devient ingérable. Le pattern App of Apps résout ce problème en faisant déployer par ArgoCD ses propres Application depuis Git. L’ApplicationSet va encore plus loin : il génère automatiquement des Applications à partir d’un template et d’une source de données (liste, découverte de dossiers Git…).

  • Le pattern App of Apps : faire déployer ArgoCD ses propres Application depuis Git
  • La différence entre App of Apps (manuel, explicite) et ApplicationSet (déclaratif, généré)
  • Le générateur List : créer plusieurs Applications depuis une liste statique dans le YAML
  • Le générateur Git : découverte automatique des sous-dossiers d’un dépôt
  • Comment déléguer la gestion d’Applications à des équipes via des dépôts Git distincts

Le problème : tout faire à la main ne passe pas à l’échelle

Section intitulée « Le problème : tout faire à la main ne passe pas à l’échelle »

Imaginez 30 microservices à déployer dans un cluster. Sans automatisation, vous devez :

  • Créer 30 objets Application ArgoCD à la main
  • Les maintenir quand une équipe ajoute ou renomme un service
  • Vous souvenir de les supprimer quand un service est retiré

Le pattern App of Apps automatise tout cela.

L’idée est simple : créez une unique Application ArgoCD (l’app “racine”) qui surveille un dossier de votre dépôt Git. Ce dossier contient des objets Application (des fichiers YAML). ArgoCD crée et synchronise automatiquement chacune d’elles.

config-repo/
├── apps/ ← l'app racine pointe ici
│ ├── nginx.yaml ← définit l'Application "nginx-demo"
│ ├── redis.yaml ← définit l'Application "redis"
│ └── monitoring.yaml ← définit l'Application "monitoring"
├── nginx-demo/ ← manifestes de nginx
├── redis/ ← manifestes de redis
└── monitoring/ ← manifestes de monitoring
# root-app.yaml (à appliquer une seule fois avec kubectl)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: root-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/votre-org/config-repo
targetRevision: main
path: apps # ← dossier contenant les Applications enfants
destination:
server: https://kubernetes.default.svc
namespace: argocd # ← les Application se créent dans argocd
syncPolicy:
automated:
prune: true
selfHeal: true
Fenêtre de terminal
kubectl apply -f root-app.yaml

Chaque fichier dans apps/ décrit une Application ArgoCD :

apps/nginx.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx-demo
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io # Nettoyage à la suppression
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:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

Pour ajouter un nouveau service, il suffit de créer un fichier YAML dans apps/ et de pousser. ArgoCD le détecte et déploie.

ApplicationSet : générer des Applications depuis un template

Section intitulée « ApplicationSet : générer des Applications depuis un template »

L’ApplicationSet est un niveau au-dessus de l’App of Apps. Au lieu de créer les fichiers Application à la main, vous définissez un template et des générateurs. ArgoCD crée autant d’Applications que nécessaire en combinant les deux.

Le générateur List est le plus simple. Vous fournissez une liste fixe de valeurs et ArgoCD crée une Application pour chacune.

applicationset-list.yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: microservices
namespace: argocd
spec:
generators:
- list:
elements:
- app: nginx-demo
namespace: demo
- app: redis
namespace: data
- app: monitoring
namespace: observability
template:
metadata:
name: "{{app}}"
spec:
project: default
source:
repoURL: https://github.com/votre-org/config-repo
targetRevision: main
path: "{{app}}" # ← chemin = nom de l'app
destination:
server: https://kubernetes.default.svc
namespace: "{{namespace}}"
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

Cet ApplicationSet crée trois Applications ArgoCD automatiquement.

Fenêtre de terminal
kubectl apply -f applicationset-list.yaml
# Vérification
kubectl get applicationsets -n argocd
kubectl get applications -n argocd

Générateur Git (découverte automatique de dossiers)

Section intitulée « Générateur Git (découverte automatique de dossiers) »

Le générateur Git découvre automatiquement les dossiers de votre dépôt et crée une Application pour chacun. Ajout d’un dossier = déploiement automatique.

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: auto-discovery
namespace: argocd
spec:
generators:
- git:
repoURL: https://github.com/votre-org/config-repo
revision: main
directories:
- path: services/* # ← découvre tous les sous-dossiers de services/
template:
metadata:
name: "{{path.basename}}" # ← nom du dossier découvert
spec:
project: default
source:
repoURL: https://github.com/votre-org/config-repo
targetRevision: main
path: "{{path}}"
destination:
server: https://kubernetes.default.svc
namespace: "{{path.basename}}"
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

Avec cette configuration, créer un dossier services/mon-api/ dans Git suffit pour qu’ArgoCD le découvre et déploie l’application.

CritèreApp of AppsApplicationSet
ComplexitéFaible — fichiers YAML manuelsModérée — template + générateur
FlexibilitéChaque Application est personnaliséeLes Applications partagent le même template
Ajout d’une appCréer un fichier YAML dans apps/Dépend du générateur (liste ou dossier)
Différences entre appsTotalement libreLimitées aux variables du template
Cas d’usage idéalApps hétérogènes, configurations très variablesMicroservices similaires, environnements multiples

En pratique, les deux patterns se complètent : une App of Apps pour les services hétérogènes, des ApplicationSets pour les familles de services similaires.

  • L’App of Apps fait surveiller à ArgoCD son propre dossier de définitions d’Applications. Ajouter une Application = créer un fichier YAML dans Git.
  • L’ApplicationSet génère automatiquement des Applications depuis un template et un générateur (Liste, Git, Clusters…).
  • Le générateur List convient pour un ensemble fixe et connu d’applications.
  • Le générateur Git découvre automatiquement les dossiers — idéal pour les équipes qui s’auto-servent.
  • Le finalizer resources-finalizer.argocd.argoproj.io garantit le nettoyage des ressources Kubernetes quand une Application est supprimée.

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