Flux CD fonctionne comme un gardien permanent de votre cluster Kubernetes : il compare en continu l'état souhaité (décrit dans Git) avec l'état réel (ce qui tourne dans le cluster) et corrige automatiquement les écarts. Ce guide explique comment ce mécanisme fonctionne, pourquoi l'architecture modulaire de Flux est différente d'ArgoCD, et quels objets Flux introduit dans votre cluster.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Le modèle Sources-Artefacts-Consumers : comment Flux découpe les responsabilités entre contrôleurs
- Les contrôleurs de Flux, ceux installés par défaut et les optionnels, et le rôle de chacun
- La boucle de réconciliation : desired state, live state, drift et auto-healing
- Les objets clés :
GitRepository,Kustomization,HelmRelease,ImagePolicy - Comment Flux bootstrap se gère lui-même depuis Git
Qu'est-ce que Flux CD ?
Section intitulée « Qu'est-ce que Flux CD ? »Flux CD est un toolkit GitOps open source, un ensemble d'opérateurs Kubernetes qui maintiennent votre cluster synchronisé avec des sources Git ou OCI. Il fait partie de la CNCF (Cloud Native Computing Foundation) et a atteint le statut Graduated en novembre 2022.
Ce qui distingue Flux d'un helm upgrade ou d'un kubectl apply en pipeline :
| Approche | Fréquence | Supervision | Drift |
|---|---|---|---|
kubectl apply en CI | À chaque push | Aucune | Invisible |
helm upgrade en CI | À chaque push | Aucune | Invisible |
| Flux | En continu (à chaque spec.interval) | Permanente | Détecté + corrigé |
L'architecture modulaire de Flux
Section intitulée « L'architecture modulaire de Flux »Flux n'est pas une application monolithique. C'est un ensemble de contrôleurs indépendants qui communiquent via des ressources Kubernetes (les CRDs). Chaque contrôleur a une responsabilité unique.
Cette modularité a plusieurs avantages :
- Vous n'installez que les contrôleurs dont vous avez besoin.
- Chaque contrôleur peut être mis à jour indépendamment.
- Les pannes sont isolées : un contrôleur défaillant n'affecte pas les autres.
Le modèle Sources-Artefacts-Consumers
Section intitulée « Le modèle Sources-Artefacts-Consumers »Le flux de données dans Flux suit toujours le même schéma :
Source (Git, OCI, Helm) → Artefact (archive locale) → Consumer (Kustomize, Helm)- Un Source Controller surveille une source externe (dépôt Git, registre OCI, dépôt Helm) et télécharge son contenu dans une archive locale.
- Cette archive est mise à disposition des contrôleurs consommateurs (kustomize-controller, helm-controller).
- Les contrôleurs consommateurs appliquent le contenu de l'archive sur le cluster.
Ce découplage est essentiel : si le dépôt Git est temporairement inaccessible, les contrôleurs consommateurs continuent de travailler depuis la dernière archive téléchargée.
Les contrôleurs de Flux
Section intitulée « Les contrôleurs de Flux »Quatre contrôleurs sont installés par défaut par flux install et flux bootstrap : source-controller, kustomize-controller, helm-controller et
notification-controller. Les deux contrôleurs d'images,
image-reflector-controller et image-automation-controller, sont
optionnels : ils s'ajoutent avec l'option --components-extra, au même titre
que source-watcher. C'est la valeur documentée de ces options, et c'est ce qui
explique qu'un cluster fraîchement installé ne connaisse pas encore les objets
ImagePolicy.
source-controller
Section intitulée « source-controller »Rôle : surveille des sources externes et produit des artefacts locaux.
Il gère les CRDs suivants :
| CRD | Source surveillée |
|---|---|
GitRepository | Dépôt Git (GitHub, GitLab, Gitea…) |
OCIRepository | Artefact OCI (image ou archive) |
HelmRepository | Index de charts Helm (index.yaml) |
HelmChart | Un chart spécifique dans un HelmRepository |
Bucket | Objet S3 ou GCS |
Quand une source change (nouveau commit, nouveau tag), source-controller télécharge l'archive et notifie les contrôleurs consommateurs.
kustomize-controller
Section intitulée « kustomize-controller »Rôle : applique des répertoires de manifestes Kubernetes sur le cluster, avec ou sans overlays Kustomize.
Son CRD principal est Kustomization (noter la majuscule, c'est le CRD
Flux, différent du kustomization.yaml de l'outil Kustomize). Une
Kustomization Flux déclare :
- Quelle source utiliser (
sourceRef) - Quel chemin dans la source (
path) - Dans quel namespace déployer (
targetNamespace) - Si les ressources supprimées de Git doivent être supprimées du cluster (
prune)
apiVersion: kustomize.toolkit.fluxcd.io/v1kind: Kustomizationmetadata: name: my-app namespace: flux-systemspec: interval: 5m path: ./apps/my-app prune: true sourceRef: kind: GitRepository name: fleet-infra targetNamespace: my-apphelm-controller
Section intitulée « helm-controller »Rôle : gère le cycle de vie complet des releases Helm (install, upgrade, rollback) de façon déclarative.
Son CRD principal est HelmRelease. Il déclare quelle version d'un chart
installer, avec quelles valeurs, et quelle stratégie appliquer en cas d'échec
(retry, rollback, uninstall).
apiVersion: helm.toolkit.fluxcd.io/v2kind: HelmReleasemetadata: name: podinfo namespace: webspec: interval: 5m chart: spec: chart: podinfo version: "6.15.0" sourceRef: kind: HelmRepository name: podinfo values: replicaCount: 2La différence avec helm upgrade --install en pipeline : la HelmRelease est
réconciliée à chaque intervalle, et une nouvelle version ou de nouvelles
values dans Git déclenchent l'upgrade. La correction des modifications
manuelles, elle, n'est pas active par défaut : elle s'active avec
driftDetection, détaillé dans la leçon Helm.
notification-controller
Section intitulée « notification-controller »Rôle : envoie des notifications sur les événements Flux (sync réussi, erreur, drift détecté) et reçoit des webhooks entrants.
Il gère trois CRDs :
| CRD | Rôle |
|---|---|
Provider | Canal de notification : Slack, Teams, PagerDuty, webhook générique… |
Alert | Règle : quels événements de quels objets envoyer à quel Provider |
Receiver | Endpoint webhook entrant : reçoit un push GitHub/GitLab pour déclencher une réconciliation immédiate |
image-reflector-controller et image-automation-controller
Section intitulée « image-reflector-controller et image-automation-controller »Ces deux contrôleurs optionnels travaillent ensemble pour automatiser les mises à jour d'images dans votre config-repo.
image-reflector-controller surveille un registre de conteneurs et stocke
la liste des tags disponibles dans le cluster (objets ImageRepository et
ImagePolicy).
image-automation-controller lit les politiques d'image et met à jour le dépôt Git avec le tag sélectionné, sans intervention humaine.
Ce flux permet à Flux de détecter qu'une nouvelle image v1.2.3 est
disponible, la valider contre une politique semver, et pousser la mise à jour
dans Git. Flux se réconcilie ensuite automatiquement.
La boucle de réconciliation
Section intitulée « La boucle de réconciliation »Le cœur de Flux est une boucle de contrôle (control loop), décrite par les principes GitOps OpenGitOps. Elle effectue ces étapes en permanence :
1. OBSERVE → Le source-controller pull la source (Git, OCI, Helm)2. DIFF → Comparer le desired state (Git) avec le live state (cluster)3. ACT → Si différents, appliquer les manifestes sur le cluster4. REPEAT → Reprendre au prochain intervalle (spec.interval de la ressource)Desired state vs Live state
Section intitulée « Desired state vs Live state »| Terme | Définition | Où ça vit |
|---|---|---|
| Desired state | Ce que vous voulez (décrit dans Git) | Dépôt Git |
| Live state | Ce qui tourne réellement | Cluster Kubernetes |
| Drift | Écart entre les deux states | Détecté par Flux |
Le drift peut survenir pour plusieurs raisons : modification manuelle d'une
ressource avec kubectl edit, rollback par une autre solution, ou mise à jour
automatique par un autre outil. Flux détecte et corrige le drift selon la
politique définie (prune: true, force: true…).
Intervalles et webhooks
Section intitulée « Intervalles et webhooks »Flux réconcilie les sources à deux moments :
- À intervalles réguliers : définis dans
spec.intervalde chaque ressource. Ce champ est obligatoire, il n'a pas de valeur par défaut : c'est vous qui choisissez la fréquence, ressource par ressource. Cela garantit la réconciliation même sans notification. - Sur webhook : un push GitHub/GitLab peut déclencher une réconciliation
immédiate via le
Receiver. Cela réduit la latence de déploiement à quelques secondes.
Le bootstrap : Flux se gère lui-même
Section intitulée « Le bootstrap : Flux se gère lui-même »Le bootstrap est la commande initiale qui :
- Génère les manifestes des composants Flux (les contrôleurs installés + RBAC).
- Les pousse dans votre dépôt Git (dans
clusters/<nom>/flux-system/). - Les applique sur votre cluster.
Après le bootstrap, Flux surveille son propre namespace : si vous modifiez les manifestes Flux dans Git, Flux se met à jour lui-même. C'est ce qu'on appelle la self-management ou GitOps pour Flux lui-même.
# Ce que Flux crée dans clusters/my-cluster/flux-system/gotk-components.yaml # CRDs + Deployments des contrôleurs installésgotk-sync.yaml # GitRepository + Kustomization qui surveillent le repokustomization.yaml # kustomization.yaml Kustomize (assemblage des deux)Comparaison des objets Flux vs ArgoCD
Section intitulée « Comparaison des objets Flux vs ArgoCD »| Concept | Flux CD | ArgoCD |
|---|---|---|
| Unité de déploiement | Kustomization + HelmRelease | Application |
| Périmètre d'équipe | Namespace + RBAC natif | AppProject |
| Générer plusieurs apps | Kustomization multi-path | ApplicationSet |
| Source de manifestes | GitRepository, OCIRepository | Source dans Application |
| Source de charts Helm | HelmRepository + HelmChart | Source dans Application |
| Mise à jour d'images | ImagePolicy + ImageUpdateAutomation | Argo CD Image Updater (plugin) |
| Notifications | Alert + Provider | Notifications intégrées dans l'UI |
Pièges courants sur les concepts
Section intitulée « Pièges courants sur les concepts »Confondre Kustomization (Flux) et kustomization.yaml (Kustomize)
Le CRD Flux Kustomization est différent du fichier kustomization.yaml de
l'outil Kustomize. Le premier est une ressource Kubernetes qui déclare quoi
réconcilier. Le second est un fichier de configuration de l'outil CLI
kustomize. Les deux peuvent coexister dans votre dépôt sans conflit.
Croire que Flux nécessite Kustomize
Vous n'avez pas à écrire de Kustomize. Une Kustomization Flux peut pointer
vers un répertoire de YAML bruts, sans kustomization.yaml : le
kustomize-controller génère alors ce fichier en interne pour tous les
manifestes du chemin, puis les applique en server-side apply. La seule
exigence est que chaque YAML du chemin soit un manifeste Kubernetes valide.
La documentation de Flux recommande tout de même de versionner votre propre
kustomization.yaml, pour pouvoir valider les manifestes en CI.
Confondre l'intervalle de la Source et l'intervalle de la Kustomization
Les deux objets ont chacun leur spec.interval. La Source et la Kustomization
se réconcilient indépendamment. Si la Source a un intervalle de 5 minutes et la
Kustomization de 1 minute, Flux réconciliera la Kustomization toutes les
minutes mais ne téléchargera une nouvelle archive Git que toutes les 5 minutes.
À retenir
Section intitulée « À retenir »- Flux CD est un ensemble de contrôleurs modulaires, pas une application monolithique.
- Le modèle Sources → Artefacts → Consumers découple la récupération des changements de leur application.
- La boucle de réconciliation garantit que le cluster converge en permanence vers l'état décrit dans Git.
Kustomization(CRD Flux) etkustomization.yaml(outil Kustomize) sont deux choses différentes.- Le bootstrap configure Flux pour qu'il se gère lui-même depuis Git.
prune: trueest essentiel : sans lui, les ressources supprimées de Git restent dans le cluster.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Score par domaine
Un domaine regroupe plusieurs guides et reçoit plusieurs questions : son score est plus fiable qu'un score par thème, qui porte souvent sur une seule question.
Bilan
Points forts
Aucun sujet réussi à 80 % sur au moins deux questions pour l’instant.
Points faibles
Aucun sujet sous le seuil de réussite.
À faire ensuite
Des indices pour retenter votre chance ?
Continuer le cours : Bootstrap et installation
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications