Aller au contenu
CI/CD & Automatisation medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Installer Flux CD — Bootstrap et configuration initiale

11 min de lecture

Flux CD s’installe sur un cluster Kubernetes en une seule commande de bootstrap. Ce guide couvre l’installation du CLI flux, la vérification de compatibilité du cluster, le bootstrap sur GitHub ou GitLab, et les premières commandes pour vérifier que tout fonctionne. À la fin, vous avez un Flux opérationnel qui surveille son propre dépôt.

  • Installer le CLI flux sur votre machine
  • Vérifier la compatibilité de votre cluster avec flux check --pre
  • Bootstrapper Flux sur GitHub ou GitLab en une commande
  • Comprendre la structure créée dans votre dépôt par le bootstrap
  • Diagnostiquer l’état des composants Flux avec flux get all

Avant de commencer, vérifiez que vous avez :

  • Un cluster Kubernetes v1.28+ fonctionnel — kind, k3s, ou un cluster cloud
  • kubectl installé et configuré avec accès admin au cluster
  • Un compte GitHub ou GitLab avec droits de création de dépôt
  • Un token d’accès personnel (PAT) GitHub ou GitLab avec droits repo

Vérification des prérequis :

Fenêtre de terminal
kubectl version --client
kubectl get nodes # Tous les nœuds doivent être Ready

La méthode recommandée utilise le script d’installation officiel Flux :

Fenêtre de terminal
curl -s https://fluxcd.io/install.sh | sudo bash

Vérifiez l’installation :

Fenêtre de terminal
flux --version
# flux version 2.8.3

Activez l’autocomplétion (optionnel mais utile) :

Fenêtre de terminal
# Bash
echo "source <(flux completion bash)" >> ~/.bashrc
# Zsh
echo "source <(flux completion zsh)" >> ~/.zshrc

Avant le bootstrap, vérifiez que votre cluster est compatible avec Flux :

Fenêtre de terminal
flux check --pre

Attendu :

► checking prerequisites
✔ Kubernetes 1.32.0 >=1.28.0-0
✔ prerequisites checks passed

Si vous voyez des erreurs (version Kubernetes trop ancienne, droits insuffisants), corrigez-les avant de continuer.

Le bootstrap est une opération idempotente : vous pouvez la relancer sans risque si elle échoue ou si vous voulez reconfigurer Flux. Elle :

  1. Crée les manifestes des composants Flux.
  2. Les pousse dans votre dépôt Git.
  3. Les applique sur le cluster.

Créez un token GitHub PAT (Personal Access Token) avec les droits repo (lecture + écriture sur les dépôts). Il sera utilisé uniquement pendant le bootstrap pour créer le dépôt et pousser les manifestes.

Fenêtre de terminal
# Exportez votre token GitHub
export GITHUB_TOKEN=<votre-token>
export GITHUB_USER=<votre-username>
# Bootstrap Flux sur un nouveau dépôt
flux bootstrap github \
--owner=${GITHUB_USER} \
--repository=fleet-infra \
--branch=main \
--path=clusters/my-cluster \
--personal

Détail des options :

OptionDescription
--ownerVotre nom d’utilisateur ou organisation GitHub
--repositoryNom du dépôt (créé s’il n’existe pas)
--branchBranche à surveiller (doit exister ou --branch crée main)
--pathChemin dans le dépôt où Flux place ses composants
--personalIndique un dépôt personnel (pas d’organisation)
► connecting to github.com
► cloning branch "main" from Git repository "https://github.com/user/fleet-infra.git"
✔ cloned repository
► generating component manifests
✔ generated component manifests
✔ committed component manifests to "main" ("fleet-infra")
► pushing component manifests to "https://github.com/user/fleet-infra.git"
► installing components in "flux-system" namespace
✔ installed components
✔ reconciled components
► determining if source secret "flux-system/flux-system" exists
► generating source secret
✔ public key: ecdsa-sha2-nistp384 AAAA...
✔ configured deploy key
► applying source secret "flux-system/flux-system"
✔ reconciled source secret
► generating sync manifests
✔ generated sync manifests
✔ committed sync manifests to "main" ("fleet-infra")
► pushing sync manifests to "https://github.com/user/fleet-infra.git"
► applying sync manifests
✔ reconciled sync configuration
◎ waiting for Kustomization "flux-system/flux-system" to be reconciled
✔ Kustomization reconciled successfully
► confirming components are healthy
✔ helm-controller: deployment ready
✔ kustomize-controller: deployment ready
✔ notification-controller: deployment ready
✔ source-controller: deployment ready
✔ all components are healthy

Après le bootstrap, votre dépôt contient :

fleet-infra/
└── clusters/
└── my-cluster/
└── flux-system/
├── gotk-components.yaml # CRDs + Deployments des 5 contrôleurs
├── gotk-sync.yaml # GitRepository + Kustomization
└── kustomization.yaml # Assemblage Kustomize

gotk-components.yaml — Ce fichier contient tous les composants Flux : les CRDs (CustomResourceDefinitions), les Deployments des 5 contrôleurs, les ServiceAccounts et les RBAC. Ne modifiez jamais ce fichier manuellement — utilisez flux install ou le bootstrap pour le mettre à jour.

gotk-sync.yaml — Ce fichier déclare deux objets :

  • Un GitRepository qui pointe vers votre dépôt.
  • Une Kustomization qui applique le contenu de clusters/my-cluster/.

C’est la boucle de self-management : Flux surveille son propre dépôt et se met à jour si vous modifiez les fichiers dans flux-system/.

Une fois le bootstrap terminé, vérifiez que tous les composants sont sains :

Fenêtre de terminal
# Vérifier les composants Flux
flux check
# Lister toutes les ressources Flux
flux get all
# Vérifier les pods dans le namespace flux-system
kubectl get pods -n flux-system

Attendu pour kubectl get pods -n flux-system :

NAME READY STATUS RESTARTS AGE
helm-controller-7b9b8b7c4-x2k9p 1/1 Running 0 2m
kustomize-controller-6d5f9b8c9-p4m7n 1/1 Running 0 2m
notification-controller-5c8d7b6f4-r8j2l 1/1 Running 0 2m
source-controller-5f7b9c8d6-k3n5q 1/1 Running 0 2m

Attendu pour flux get all :

NAME REVISION SUSPENDED READY MESSAGE
gitrepository/flux-system main/abc1234 False True stored artifact for revision 'main@sha1:abc1234'
NAME REVISION SUSPENDED READY MESSAGE
kustomization/flux-system main/abc1234 False True Applied revision: main@sha1:abc1234

Tous les objets doivent afficher READY: True.

Si un objet affiche READY: False, inspectez les événements :

Fenêtre de terminal
# Voir les événements d'une Kustomization
flux events --for kustomization/flux-system
# Voir les logs du contrôleur
kubectl logs -n flux-system deploy/kustomize-controller | tail -20
Fenêtre de terminal
# Vérifier la Source GitRepository
flux get source git
# Forcer une reconcile immédiate
flux reconcile source git flux-system

Si la source affiche une erreur d’authentification, vérifiez la deploy key :

Fenêtre de terminal
kubectl describe secret -n flux-system flux-system
Fenêtre de terminal
kubectl describe pod -n flux-system <nom-du-pod>
kubectl logs -n flux-system <nom-du-pod> --previous
CommandeDescription
flux checkVérifie l’état des composants Flux
flux get allListe toutes les ressources Flux et leur état
flux get sources gitAffiche les GitRepository
flux get kustomizationsAffiche les Kustomizations
flux reconcile source git <nom>Force la resynchronisation d’un dépôt
flux reconcile kustomization <nom>Force la réconciliation d’une Kustomization
flux eventsAffiche les événements récents
flux logsAffiche les logs des contrôleurs
flux suspend kustomization <nom>Met en pause une Kustomization
flux resume kustomization <nom>Reprend une Kustomization suspendue
  • Le CLI flux s’installe avec le script officiel ou Homebrew.
  • flux check --pre vérifie la compatibilité avant le bootstrap.
  • flux bootstrap est idempotent : on peut le relancer sans risque.
  • Le bootstrap crée une deploy key SSH stockée dans le Secret flux-system/flux-system.
  • Flux se gère lui-même : modifier gotk-sync.yaml dans Git met à jour Flux.
  • flux get all est la commande de diagnostic principale.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn