Passer au contenu principal

Production (Kubernetes)

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-password

Ressource 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=true
argocd 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 syncs

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

Sources