TP20 : GitOps avec Flux CD (et comparaison avec Argo CD)

Flux est, avec Argo CD, l’un des deux grands outils GitOps diplômés de la CNCF. Les principes sont les mêmes (Git source de vérité, réconciliation continue, pull), mais la philosophie diffère : Flux n’est pas une application avec une interface, c’est un ensemble de contrôleurs Kubernetes pilotés par des ressources personnalisées (GitRepository, Kustomization, HelmRelease) et par une CLI. Après le TP19, ce TP fait déployer les mêmes applications avec Flux pour comparer les deux outils sur des faits.


Fichiers de départ : flux-starter.zip

1. Objectifs pédagogiques

À l’issue du TP, vous serez capable de :

  • installer Flux avec flux bootstrap et expliquer ce qu’il écrit dans le dépôt ;
  • décrire le rôle de chaque contrôleur (source, kustomize, helm, notification) ;
  • déployer une application Kustomize (Kustomization) et un chart Helm (HelmRelease) depuis Git ;
  • forcer, suspendre et reprendre une réconciliation, et diagnostiquer une erreur ;
  • comparer Argo CD et Flux et choisir selon le contexte.

Les images de cette page sont des schémas explicatifs, pas des captures d’écran.

2. Environnement du TP

  • Le cluster K3s du TP14. Si Argo CD (TP19) y tourne encore, utilisez des namespaces distincts : deux outils GitOps ne doivent jamais gérer les mêmes ressources.

  • Le chart whoami complété au TP15.

  • Un compte GitHub et un personal access token (fine-grained : Contents et Administration en lecture-écriture sur un nouveau dépôt tp20-flux, ou classic avec le scope repo).

  • Installer la CLI Flux et vérifier les prérequis :

    curl -s https://fluxcd.io/install.sh | sudo bash
    flux --version
    flux check --pre

Contrôleurs Flux : source, kustomize, helm, notification Contrôleurs Flux : source, kustomize, helm, notification

3. Partie 1 : Bootstrap

  • Lancer le bootstrap : Flux crée le dépôt, y écrit ses propres manifests puis s’installe dans le cluster à partir de ce dépôt (Flux se gère lui-même en GitOps).

    export GITHUB_TOKEN=<token>
    flux bootstrap github --owner=<utilisateur> --repository=tp20-flux \
      --branch=main --path=clusters/lab --personal
    kubectl -n flux-system get pods
    flux get sources git
    flux get kustomizations
  • Cloner tp20-flux et examiner clusters/lab/flux-system/ : gotk-components.yaml, gotk-sync.yaml. Quel rôle joue la clé de déploiement ajoutée au dépôt (Settings → Deploy keys) ?

4. Partie 2 : Déployer une application Kustomize

  • Copier le contenu de flux-starter/ à la racine du dépôt tp20-flux (sans écraser clusters/lab/flux-system/).

  • Compléter clusters/lab/apps.yaml (prune: true, wait: true, timeout: 2m), commiter, pousser, puis suivre la réconciliation :

    flux reconcile source git flux-system
    flux get kustomizations --watch
    kubectl -n whoami-flux get all
  • Dérive : kubectl -n whoami-flux scale deploy whoami --replicas=4. Attendre l’intervalle (1 min) : que se passe-t-il ? Comparer avec le self-heal d’Argo CD.

  • Erreur : pousser une faute dans apps/dev/kustomization.yaml, puis diagnostiquer :

    flux get kustomizations
    flux logs --kind=Kustomization --name=apps-dev
    kubectl -n flux-system describe kustomization apps-dev

5. Partie 3 : Suspendre, reprendre, supprimer

  • Suspendre la réconciliation (maintenance), faire une modification manuelle, puis reprendre :

    flux suspend kustomization apps-dev
    kubectl -n whoami-flux scale deploy whoami --replicas=3     # conservé tant que suspendu
    flux resume kustomization apps-dev                          # Git reprend la main
  • Retirer service.yaml de la base dans Git : le Service est supprimé (prune). Le remettre.

6. Partie 4 : HelmRelease

  • Copier votre chart du TP15 dans charts/whoami/ (voir charts/README.md).

  • Renommer helm-whoami.yaml.example en helm-whoami.yaml et compléter les valeurs et la remédiation (rollback après 2 échecs).

  • Pousser, puis vérifier :

    flux get helmreleases -A
    helm list -n whoami-helm          # Flux utilise Helm : la release est visible
    helm history whoami -n whoami-helm
  • Pousser une valeur cassée (image.tag: v9.9.9) et observer la remédiation automatique dans helm history.

7. Partie 5 : Comparaison Argo CD / Flux

Argo CD et Flux : deux approches GitOps Argo CD et Flux : deux approches GitOps

  • Compléter le tableau à partir des TP19 et TP20 :
Critère Argo CD Flux
Installation et mise à jour
Interface (UI / CLI / CRD)
Helm (rendu, releases)
Multi-environnement / multi-cluster
RBAC et multi-tenant
Notifications
Automatisation des images
Courbe d’apprentissage
  • Quel outil recommanderiez-vous pour (a) une équipe qui veut une interface visuelle partagée avec les développeurs, (b) une plateforme qui gère cent clusters de façon autonome ? Argumentez.

Défi

  1. Mettre en place Flux image automation (ImageRepository, ImagePolicy semver >=1.10.0 <2.0.0, ImageUpdateAutomation) pour que Flux mette à jour le tag de apps/dev et commite le changement.
  2. Configurer le notification-controller (Provider de type generic vers un webhook de test + Alert) pour recevoir les événements de réconciliation.

8. Livrables

Captures à déposer dans captures/ :

Fichier Contenu attendu
flux-bootstrap.png flux bootstrap puis flux get kustomizations
flux-drift.png Replicas modifiés à la main puis rétablis par Flux
flux-error.png Diagnostic d’une Kustomization en erreur (flux logs)
flux-suspend.png flux suspend / flux resume
helmrelease.png flux get helmreleases et helm history avec remédiation

Ainsi que le lien du dépôt tp20-flux et le tableau comparatif.