GitOps avec ArgoCD
GitOps est une pratique qui utilise Git comme source de vérité unique pour l'état du cluster. ArgoCD surveille en continu un dépôt Git et synchronise l'état du cluster avec les manifests stockés. Si quelqu'un modifie directement le cluster (kubectl apply), ArgoCD détecte la divergence et peut la corriger automatiquement.
Principes GitOps
- Déclaratif : l'état du système est entièrement décrit dans des fichiers versionables
- Versionné et immuable : Git est la source de vérité, avec historique complet
- Pull automatique : le système applique les changements en mode pull (pas de push depuis la CI)
- Réconciliation continue : tout écart entre l'état désiré (Git) et l'état réel est détecté et corrigé
Installation ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.13.0/manifests/install.yaml
# Accès à l'UI (port-forward temporaire)
kubectl port-forward svc/argocd-server -n argocd 8080:443
# Mot de passe admin initial
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath='{.data.password}' | base64 -d
# CLI argocd
argocd login localhost:8080
argocd account update-passwordRessource Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/myorg/k8s-manifests
targetRevision: main
path: apps/myapp/overlays/production # Chemin dans le dépôt (Kustomize)
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true # Supprimer les ressources absentes du dépôt
selfHeal: true # Corriger les divergences automatiquement
syncOptions:
- CreateNamespace=true
- ServerSideApply=trueargocd app create myapp --repo ... --path ... --dest-server ... --dest-namespace production
argocd app list
argocd app sync myapp # Synchronisation manuelle
argocd app diff myapp # Voir ce qui diverge
argocd app history myapp # Historique des syncsPattern App of Apps
Une Application ArgoCD peut pointer vers un dossier contenant d'autres Application manifests. C'est le pattern "app-of-apps" : une application racine déploie et gère toutes les autres applications. Idéal pour bootstrapper un cluster complet depuis Git.
ArgoCD Image Updater
ArgoCD Image Updater surveille les registries de conteneurs et met à jour automatiquement les tags d'images dans le dépôt Git quand une nouvelle version est publiée. Ferme la boucle CI/CD : le pipeline CI pousse une image, Image Updater met à jour Git, ArgoCD sync le cluster.
Flux — alternative
Flux v2 est une alternative à ArgoCD, plus orientée CNCF et composants indépendants (Helm controller, Kustomize controller, Notification controller séparés). Plus flexible architecturalement, interface moins riche. Le choix entre ArgoCD et Flux est souvent une question de préférence d'équipe.