HelmRelease
Table des matières
- Concept
- Créer une HelmRelease
- Values et configuration
- Upgrade et Rollback
- Tests Helm
- Exercices pratiques
1 - Concept
Qu'est-ce qu'une HelmRelease ?
Une HelmRelease gère le lifecycle d'un chart Helm via GitOps.
Avantages
| Avantage | Description |
|---|---|
| GitOps | Configuration dans Git |
| Declaratif | État désiré, pas commandes |
| Rollback auto | En cas d'échec |
| Drift detection | Ré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) :
valuesdu chartvaluesFrom(dans l'ordre)valuesinline
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 →