Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

Flux CD, Concepts et architecture

Par mis à jour le

Améliorer cette page

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.

  • 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

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 :

ApprocheFréquenceSupervisionDrift
kubectl apply en CIÀ chaque pushAucuneInvisible
helm upgrade en CIÀ chaque pushAucuneInvisible
FluxEn continu (à chaque spec.interval)PermanenteDétecté + corrigé

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 flux de données dans Flux suit toujours le même schéma :

Source (Git, OCI, Helm) → Artefact (archive locale) → Consumer (Kustomize, Helm)
  1. 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.
  2. Cette archive est mise à disposition des contrôleurs consommateurs (kustomize-controller, helm-controller).
  3. 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.

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.

Rôle : surveille des sources externes et produit des artefacts locaux.

Il gère les CRDs suivants :

CRDSource surveillée
GitRepositoryDépôt Git (GitHub, GitLab, Gitea…)
OCIRepositoryArtefact OCI (image ou archive)
HelmRepositoryIndex de charts Helm (index.yaml)
HelmChartUn chart spécifique dans un HelmRepository
BucketObjet S3 ou GCS

Quand une source change (nouveau commit, nouveau tag), source-controller télécharge l'archive et notifie les contrôleurs consommateurs.

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/v1
kind: Kustomization
metadata:
name: my-app
namespace: flux-system
spec:
interval: 5m
path: ./apps/my-app
prune: true
sourceRef:
kind: GitRepository
name: fleet-infra
targetNamespace: my-app

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/v2
kind: HelmRelease
metadata:
name: podinfo
namespace: web
spec:
interval: 5m
chart:
spec:
chart: podinfo
version: "6.15.0"
sourceRef:
kind: HelmRepository
name: podinfo
values:
replicaCount: 2

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

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 :

CRDRôle
ProviderCanal de notification : Slack, Teams, PagerDuty, webhook générique…
AlertRègle : quels événements de quels objets envoyer à quel Provider
ReceiverEndpoint 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.

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 cluster
4. REPEAT → Reprendre au prochain intervalle (spec.interval de la ressource)
TermeDéfinitionOù ça vit
Desired stateCe que vous voulez (décrit dans Git)Dépôt Git
Live stateCe qui tourne réellementCluster Kubernetes
DriftÉcart entre les deux statesDé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…).

Flux réconcilie les sources à deux moments :

  1. À intervalles réguliers : définis dans spec.interval de 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.
  2. 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 est la commande initiale qui :

  1. Génère les manifestes des composants Flux (les contrôleurs installés + RBAC).
  2. Les pousse dans votre dépôt Git (dans clusters/<nom>/flux-system/).
  3. 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és
gotk-sync.yaml # GitRepository + Kustomization qui surveillent le repo
kustomization.yaml # kustomization.yaml Kustomize (assemblage des deux)
ConceptFlux CDArgoCD
Unité de déploiementKustomization + HelmReleaseApplication
Périmètre d'équipeNamespace + RBAC natifAppProject
Générer plusieurs appsKustomization multi-pathApplicationSet
Source de manifestesGitRepository, OCIRepositorySource dans Application
Source de charts HelmHelmRepository + HelmChartSource dans Application
Mise à jour d'imagesImagePolicy + ImageUpdateAutomationArgo CD Image Updater (plugin)
NotificationsAlert + ProviderNotifications intégrées dans l'UI

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.

  • 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) et kustomization.yaml (outil Kustomize) sont deux choses différentes.
  • Le bootstrap configure Flux pour qu'il se gère lui-même depuis Git.
  • prune: true est essentiel : sans lui, les ressources supprimées de Git restent dans le cluster.

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

6 questions
6 min.
70% requis

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

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn