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 bootstrapet 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
whoamicomplé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 scoperepo). -
Installer la CLI Flux et vérifier les prérequis :
curl -s https://fluxcd.io/install.sh | sudo bash flux --version flux check --pre
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-fluxet examinerclusters/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ôttp20-flux(sans écraserclusters/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.yamlde la base dans Git : le Service est supprimé (prune). Le remettre.
6. Partie 4 : HelmRelease
-
Copier votre chart du TP15 dans
charts/whoami/(voircharts/README.md). -
Renommer
helm-whoami.yaml.exampleenhelm-whoami.yamlet compléter les valeurs et la remédiation (rollbackaprè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 danshelm history.
7. Partie 5 : Comparaison Argo CD / Flux
- 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
- Mettre en place Flux image automation (
ImageRepository,ImagePolicysemver>=1.10.0 <2.0.0,ImageUpdateAutomation) pour que Flux mette à jour le tag deapps/devet commite le changement.- Configurer le
notification-controller(Providerde typegenericvers 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.