Flux CD gère les releases Helm de façon déclarative via le HelmRelease CRD.
Plutôt que d’exécuter helm upgrade --install dans un pipeline CI, vous
déclarez l’état voulu dans Git et le helm-controller de Flux s’occupe des
installs, upgrades et rollbacks. Ce guide explique comment configurer un
HelmRepository, un HelmRelease et définir une stratégie de remediation
robuste.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Déclarer un
HelmRepositorypour référencer un dépôt de charts Helm - Créer un
HelmReleaseavec les values de votre choix - Surcharger les values par environnement sans dupliquer les fichiers
- Configurer une stratégie de remediation (retry, rollback, uninstall)
- Pointer vers un chart stocké dans votre Git ou dans un registre OCI
- Diagnostiquer une release Helm en échec
Prérequis
Section intitulée « Prérequis »- Flux bootstrappé et fonctionnel (
flux checktout en vert) - Connaissance des concepts de base Helm (chart, values, release)
Architecture : Sources Helm dans Flux
Section intitulée « Architecture : Sources Helm dans Flux »Flux utilise deux objets pour gérer les charts Helm :
HelmRepository → HelmChart → HelmReleaseHelmRepository: déclare un dépôt de charts (unindex.yaml). Le source-controller le télécharge périodiquement.HelmChart: résout un chart spécifique depuis unHelmRepository. Il est souvent créé automatiquement par le helm-controller à partir d’unHelmRelease— vous n’avez généralement pas besoin de le créer manuellement.HelmRelease: déclare l’état voulu d’une release Helm (chart + version + values). C’est l’objet que vous créez et gérez.
Déclarer un HelmRepository
Section intitulée « Déclarer un HelmRepository »Voici comment déclarer le dépôt de charts Bitnami :
apiVersion: source.toolkit.fluxcd.io/v1kind: HelmRepositorymetadata: name: bitnami namespace: flux-systemspec: interval: 1h url: https://charts.bitnami.com/bitnamiBonnes pratiques :
- Placez les
HelmRepositorydansinfrastructure/sources/pour les partager entre toutes les applications. - Utilisez un intervalle long (1h) car les index Helm ne changent pas fréquemment.
Vérifiez que le dépôt est accessible :
flux get source helm# NAME REVISION SUSPENDED READY MESSAGE# bitnami sha256:a1b2c3... False True stored artifact: revision 'sha256:a1b2c3'Créer un HelmRelease
Section intitulée « Créer un HelmRelease »Exemple minimal — nginx
Section intitulée « Exemple minimal — nginx »apiVersion: helm.toolkit.fluxcd.io/v2kind: HelmReleasemetadata: name: nginx namespace: webspec: interval: 5m chart: spec: chart: nginx version: ">=18.0.0 <19.0.0" sourceRef: kind: HelmRepository name: bitnami namespace: flux-system values: replicaCount: 2 service: type: ClusterIPPoints clés :
chart.spec.versionaccepte des contraintes SemVer :">=18.0.0 <19.0.0","18.x.x","18.1.0"(version exacte recommandée en production).chart.spec.sourceRefpointe vers leHelmRepositorydéclaré plus tôt.valuessurcharge directement les valeurs du chart.
Exemple avec valeurs par environnement
Section intitulée « Exemple avec valeurs par environnement »Pour gérer des values différentes par environnement sans dupliquer le fichier,
utilisez valuesFrom avec des ConfigMap ou des Secret :
apiVersion: helm.toolkit.fluxcd.io/v2kind: HelmReleasemetadata: name: nginx namespace: webspec: interval: 5m chart: spec: chart: nginx version: "18.2.4" sourceRef: kind: HelmRepository name: bitnami namespace: flux-system values: replicaCount: 3 valuesFrom: - kind: ConfigMap name: nginx-prod-values valuesKey: values.yaml - kind: Secret name: nginx-prod-secrets valuesKey: secrets.yaml optional: trueLe champ valuesFrom permet de séparer les values publiques (ConfigMap) des
values sensibles (Secret), et de les versionner séparément.
Stratégies de remediation
Section intitulée « Stratégies de remediation »Par défaut, si une release Helm échoue, Flux ne fait rien. C’est un comportement correct pour éviter des boucles d’upgrades, mais en production vous voulez définir une stratégie explicite.
Remédiation à l’installation
Section intitulée « Remédiation à l’installation »spec: install: remediation: retries: 3Si l’installation échoue, Flux réessaie 3 fois avant de s’arrêter avec
READY: False.
Remédiation à l’upgrade
Section intitulée « Remédiation à l’upgrade »spec: upgrade: remediation: retries: 3 strategy: rollback # ou "uninstall" remediateLastFailure: truestrategy: rollback— revient à la version précédente si l’upgrade échoue.strategy: uninstall— désinstalle la release en cas d’échec.remediateLastFailure: true— applique la stratégie même si c’est le dernier retry qui a échoué (sans cette option, le dernier échec reste dans l’état failed).
Configuration recommandée en production
Section intitulée « Configuration recommandée en production »spec: interval: 5m install: remediation: retries: 3 upgrade: remediation: retries: 3 strategy: rollback remediateLastFailure: true rollback: timeout: 5m cleanupOnFail: falseCharts depuis un dépôt Git
Section intitulée « Charts depuis un dépôt Git »Flux peut aussi déployer un chart Helm stocké directement dans votre dépôt Git (utile pour les charts maison) :
apiVersion: helm.toolkit.fluxcd.io/v2kind: HelmReleasemetadata: name: my-chart namespace: my-appspec: interval: 5m chart: spec: chart: ./charts/my-chart # Chemin relatif dans la source Git sourceRef: kind: GitRepository name: fleet-infra namespace: flux-system values: replicaCount: 1Charts depuis un registre OCI
Section intitulée « Charts depuis un registre OCI »Les charts Helm peuvent aussi être stockés dans un registre OCI (GitHub Container Registry, Docker Hub, Harbor…) :
apiVersion: source.toolkit.fluxcd.io/v1beta2kind: OCIRepositorymetadata: name: my-charts namespace: flux-systemspec: interval: 5m url: oci://ghcr.io/my-org/charts ref: tag: latestapiVersion: helm.toolkit.fluxcd.io/v2kind: HelmReleasemetadata: name: my-app namespace: my-appspec: interval: 5m chartRef: kind: OCIRepository name: my-charts namespace: flux-system values: replicaCount: 2Diagnostiquer une HelmRelease en échec
Section intitulée « Diagnostiquer une HelmRelease en échec »- Inspecter l’état de la HelmRelease
flux get helmreleases -A# NAMESPACE NAME REVISION SUSPENDED READY MESSAGE# web nginx 18.2.4 False False Helm upgrade failed: ...- Voir le détail de l’erreur
kubectl describe helmrelease nginx -n web# Cherchez la section "Events:" en bas de la sortie- Inspecter les logs du helm-controller
kubectl logs -n flux-system deploy/helm-controller | grep "nginx" | tail -20- Vérifier que la Source est prête
flux get source helm# Si READY: False, le dépôt Helm est inaccessible- Forcer une nouvelle tentative
# Annuler l'état d'échec et relancerflux reconcile helmrelease nginx -n web --resetCommandes Helm utiles avec Flux
Section intitulée « Commandes Helm utiles avec Flux »| Commande | Description |
|---|---|
flux get helmreleases -A | Lister toutes les releases Helm |
flux reconcile helmrelease <nom> -n <ns> | Forcer une réconciliation |
flux reconcile helmrelease <nom> -n <ns> --reset | Réinitialiser l’état d’échec et relancer |
flux suspend helmrelease <nom> -n <ns> | Suspendre une release |
flux resume helmrelease <nom> -n <ns> | Reprendre une release suspendue |
helm history <nom> -n <ns> | Voir l’historique des upgrades Helm |
helm rollback <nom> -n <ns> | Rollback manuel (contourne Flux) |
À retenir
Section intitulée « À retenir »HelmRepositorydéclare un dépôt de charts — à placer dansinfrastructure/sources/.HelmReleasedéclare l’état voulu d’une release Helm (chart + version + values).valuesFrompermet de séparer les values sensibles (Secret) des publiques (ConfigMap).- Toujours définir une
upgrade.remediationavecstrategy: rollbacken production. flux reconcile helmrelease --resetrelance une release bloquée en état d’échec.- Ne pas faire de
helm rollbackmanuel — laissez Flux gérer la remediation.