Aller au contenu principal

HelmRelease


Table des matières

  1. Concept
  2. Créer une HelmRelease
  3. Values et configuration
  4. Upgrade et Rollback
  5. Tests Helm
  6. Exercices pratiques

1 - Concept

Qu'est-ce qu'une HelmRelease ?

Une HelmRelease gère le lifecycle d'un chart Helm via GitOps.

Avantages

AvantageDescription
GitOpsConfiguration dans Git
DeclaratifÉtat désiré, pas commandes
Rollback autoEn cas d'échec
Drift detectionRéconciliation continue

🔝 Retour à la table des matières


2 - Créer une HelmRelease

Depuis un HelmRepository

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: nginx
namespace: web
spec:
interval: 5m
chart:
spec:
chart: nginx
version: "15.x"
sourceRef:
kind: HelmRepository
name: bitnami
namespace: flux-system
values:
replicaCount: 3
service:
type: ClusterIP

Depuis un GitRepository

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: my-app
namespace: default
spec:
interval: 5m
chart:
spec:
chart: ./charts/my-app
sourceRef:
kind: GitRepository
name: my-repo
namespace: flux-system

Via CLI

# Créer le HelmRepository
flux create source helm bitnami \
--url=https://charts.bitnami.com/bitnami \
--interval=1h

# Créer la HelmRelease
flux create helmrelease nginx \
--source=HelmRepository/bitnami \
--chart=nginx \
--chart-version="15.x" \
--namespace=web \
--create-target-namespace

Structure recommandée

clusters/my-cluster/
├── flux-system/
├── infrastructure/
│ ├── sources/
│ │ ├── bitnami.yaml
│ │ └── ingress-nginx.yaml
│ └── releases/
│ ├── cert-manager.yaml
│ └── ingress-nginx.yaml
└── apps/
└── nginx.yaml

🔝 Retour à la table des matières


3 - Values et configuration

Values inline

spec:
values:
replicaCount: 3
image:
repository: nginx
tag: "1.25"
service:
type: LoadBalancer
resources:
requests:
memory: 128Mi
cpu: 100m

ValuesFrom (ConfigMap/Secret)

spec:
valuesFrom:
- kind: ConfigMap
name: nginx-values
valuesKey: values.yaml
- kind: Secret
name: nginx-secrets
valuesKey: secrets.yaml
# ConfigMap avec values
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-values
namespace: web
data:
values.yaml: |
replicaCount: 3
service:
type: ClusterIP

Merge de values

L'ordre de priorité (du plus bas au plus haut) :

  1. values du chart
  2. valuesFrom (dans l'ordre)
  3. values inline
spec:
valuesFrom:
- kind: ConfigMap
name: common-values
- kind: ConfigMap
name: env-specific-values
values:
# Override final
replicaCount: 5

🔝 Retour à la table des matières


4 - Upgrade et Rollback

Upgrade automatique

spec:
chart:
spec:
version: "15.x" # Semver range
# Flux met à jour automatiquement vers 15.1, 15.2, etc.

Rollback automatique

spec:
upgrade:
remediation:
remediateLastFailure: true
retries: 3
rollback:
cleanupOnFail: true

Installation avec remediation

spec:
install:
remediation:
retries: 3
upgrade:
remediation:
retries: 3
remediateLastFailure: true

Suspendre une release

flux suspend helmrelease nginx -n web

# Reprendre
flux resume helmrelease nginx -n web

🔝 Retour à la table des matières


5 - Tests Helm

Activer les tests

spec:
test:
enable: true
timeout: 5m

Ignorer les échecs de tests

spec:
test:
enable: true
ignoreFailures: true

Hooks post-install

spec:
postRenderers:
- kustomize:
patches:
- target:
kind: Deployment
patch: |
- op: add
path: /metadata/labels/managed-by
value: flux

🔝 Retour à la table des matières


6 - Exercices pratiques

Exercice 1 : Déployer nginx

# 1. Ajouter le repo Bitnami
flux create source helm bitnami \
--url=https://charts.bitnami.com/bitnami \
--interval=1h

# 2. Créer le namespace
kubectl create namespace web

# 3. Déployer nginx
flux create helmrelease nginx \
--source=HelmRepository/bitnami \
--chart=nginx \
--namespace=web \
--values=replicaCount=2

# 4. Vérifier
flux get helmreleases -n web
kubectl get pods -n web

Exercice 2 : HelmRelease YAML

# nginx-release.yaml
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: bitnami
namespace: flux-system
spec:
interval: 1h
url: https://charts.bitnami.com/bitnami
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: nginx
namespace: web
spec:
interval: 5m
chart:
spec:
chart: nginx
version: "15.x"
sourceRef:
kind: HelmRepository
name: bitnami
namespace: flux-system
install:
createNamespace: true
values:
replicaCount: 3
service:
type: ClusterIP

Quiz

Q1. Quelle est la différence entre valuesFrom et values ?

Réponse
  • valuesFrom : Charge les values depuis des ConfigMaps ou Secrets externes
  • values : Values définies inline dans la HelmRelease

values inline a la priorité la plus haute et override les valuesFrom.

Q2. Comment Flux gère-t-il un échec d'upgrade ?

Réponse

Avec remediation :

spec:
upgrade:
remediation:
retries: 3
remediateLastFailure: true
rollback:
cleanupOnFail: true

Flux réessaie l'upgrade, et si ça échoue, effectue un rollback automatique.

🔝 Retour à la table des matières


Points clés à retenir

  • HelmRelease = chart Helm en GitOps
  • Sources : HelmRepository ou GitRepository
  • values inline ou valuesFrom (ConfigMap/Secret)
  • Rollback automatique avec remediation
  • Semver range pour upgrades automatiques

← Chapitre précédent | Chapitre suivant : Image Automation →