Ce guide vous apprend à gérer le cycle de vie complet d’une release Helm. Vous allez maîtriser les commandes upgrade, rollback, history et uninstall pour mettre à jour vos applications en toute sécurité, revenir en arrière en cas de problème, et nettoyer proprement. En 20 minutes, vous saurez piloter vos releases comme en production.
Prérequis
Section intitulée « Prérequis »- Helm installé et un repo configuré (voir module H1-02)
- Un cluster Kubernetes fonctionnel (minikube, kind, k3d)
- Avoir compris
helm installet les values (voir modules précédents)
Comprendre le lifecycle d’une release
Section intitulée « Comprendre le lifecycle d’une release »Les 5 états d’une release
Section intitulée « Les 5 états d’une release »Une release Helm peut se trouver dans différents états selon son cycle de vie :
| État | Signification | Quand ? |
|---|---|---|
| deployed | Release active et fonctionnelle | Après un install ou upgrade réussi |
| superseded | Ancienne révision remplacée | Après un nouvel upgrade ou rollback |
| pending-install | Installation en cours | Pendant l’exécution de helm install |
| pending-upgrade | Mise à jour en cours | Pendant l’exécution de helm upgrade |
| failed | Échec de l’opération | Si les hooks échouent ou timeout atteint |
| uninstalled | Release supprimée (avec historique) | Après helm uninstall --keep-history |
Le concept de révision
Section intitulée « Le concept de révision »Chaque opération sur une release crée une nouvelle révision :
Révision 1 (install) → deployed → supersededRévision 2 (upgrade) → deployed → supersededRévision 3 (upgrade) → deployed → supersededRévision 4 (rollback 2) → deployed ← ACTUELLELe rollback ne “revient pas dans le temps” : il crée une nouvelle révision avec la configuration d’une révision précédente.
Install vs Upgrade : quelle différence ?
Section intitulée « Install vs Upgrade : quelle différence ? »Comportement de chaque commande
Section intitulée « Comportement de chaque commande »| Commande | Release existe ? | Comportement |
|---|---|---|
helm install | Non | ✅ Crée la release |
helm install | Oui | ❌ Erreur : cannot re-use a name |
helm upgrade | Non | ❌ Erreur : has no deployed releases |
helm upgrade | Oui | ✅ Met à jour la release |
Démonstration : l’erreur d’install sur une release existante
Section intitulée « Démonstration : l’erreur d’install sur une release existante »Installez une release :
helm install mon-api stefanprodan/podinfo -n demo --create-namespace --version 6.7.1Résultat :
NAME: mon-apiLAST DEPLOYED: Sun Feb 1 18:24:49 2026NAMESPACE: demoSTATUS: deployedREVISION: 1Tentez de réinstaller la même release :
helm install mon-api stefanprodan/podinfo -n demo --version 6.7.1Résultat (erreur) :
Error: INSTALLATION FAILED: cannot re-use a name that is still in useDémonstration : l’erreur d’upgrade sur une release inexistante
Section intitulée « Démonstration : l’erreur d’upgrade sur une release inexistante »helm upgrade app-inexistante stefanprodan/podinfo -n demoRésultat (erreur) :
Error: UPGRADE FAILED: "app-inexistante" has no deployed releasesIdempotence avec upgrade —install
Section intitulée « Idempotence avec upgrade —install »Le problème en CI/CD
Section intitulée « Le problème en CI/CD »En CI/CD, vous ne savez pas toujours si la release existe déjà :
- Premier déploiement : la release n’existe pas →
installfonctionne - Déploiements suivants : la release existe →
installéchoue
La solution : upgrade —install
Section intitulée « La solution : upgrade —install »L’option --install rend helm upgrade idempotent : la commande crée la release si elle n’existe pas, ou la met à jour si elle existe.
helm upgrade --install mon-api stefanprodan/podinfo -n demo --version 6.7.1Si la release n’existe pas :
Release "mon-api" does not exist. Installing it now.NAME: mon-apiLAST DEPLOYED: Sun Feb 1 18:25:42 2026NAMESPACE: demoSTATUS: deployedREVISION: 1Si la release existe déjà :
Release "mon-api" has been upgraded. Happy Helming!NAME: mon-apiLAST DEPLOYED: Sun Feb 1 18:25:49 2026NAMESPACE: demoSTATUS: deployedREVISION: 2Options complémentaires pour CI/CD
Section intitulée « Options complémentaires pour CI/CD »| Option | Effet |
|---|---|
--create-namespace | Crée le namespace s’il n’existe pas |
--wait | Attend que les pods soient Ready avant de terminer |
--timeout 5m | Timeout pour --wait (défaut: 5m) |
--atomic | Rollback automatique si l’upgrade échoue |
--description "v1.2.3" | Description personnalisée dans l’historique |
Commande CI/CD complète :
helm upgrade --install mon-api stefanprodan/podinfo \ --namespace demo \ --create-namespace \ --version 6.7.1 \ --wait \ --timeout 3m \ --description "Déploiement v6.7.1 depuis CI"Mettre à jour avec helm upgrade
Section intitulée « Mettre à jour avec helm upgrade »Mise à jour des values
Section intitulée « Mise à jour des values »Pour modifier la configuration d’une release existante :
helm upgrade mon-api stefanprodan/podinfo -n demo --set replicaCount=2Résultat :
Release "mon-api" has been upgraded. Happy Helming!NAME: mon-apiLAST DEPLOYED: Sun Feb 1 18:25:12 2026NAMESPACE: demoSTATUS: deployedREVISION: 2Mise à jour de la version du chart
Section intitulée « Mise à jour de la version du chart »Pour passer à une nouvelle version du chart :
helm upgrade mon-api stefanprodan/podinfo -n demo --version 6.8.0L’option —force
Section intitulée « L’option —force »L’option --force supprime et recrée les ressources au lieu de les patcher :
helm upgrade mon-api stefanprodan/podinfo -n demo --set replicaCount=1 --forceQuand l’utiliser :
- Modification de champs immutables (selector d’un Deployment)
- Ressources corrompues qu’un patch ne peut pas réparer
- Debug de problèmes de synchronisation
Consulter l’état : status, get, history
Section intitulée « Consulter l’état : status, get, history »helm status : état actuel de la release
Section intitulée « helm status : état actuel de la release »helm status mon-api -n demoRésultat :
NAME: mon-apiLAST DEPLOYED: Sun Feb 1 18:25:12 2026NAMESPACE: demoSTATUS: deployedREVISION: 2NOTES:1. Get the application URL by running these commands: echo "Visit http://127.0.0.1:8080 to use your application" kubectl -n demo port-forward deploy/mon-api-podinfo 8080:9898Décryptage :
| Champ | Signification |
|---|---|
LAST DEPLOYED | Date/heure du dernier déploiement |
STATUS | État actuel (deployed, failed, etc.) |
REVISION | Numéro de la révision actuelle |
NOTES | Instructions post-installation du chart |
helm status d’une révision spécifique
Section intitulée « helm status d’une révision spécifique »Vous pouvez consulter l’état d’une révision passée :
helm status mon-api -n demo --revision 1Résultat :
NAME: mon-apiLAST DEPLOYED: Sun Feb 1 18:24:49 2026NAMESPACE: demoSTATUS: supersededREVISION: 1Le statut superseded indique que cette révision a été remplacée par une plus récente.
helm history : historique des révisions
Section intitulée « helm history : historique des révisions »helm history mon-api -n demoRésultat :
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION1 Sun Feb 1 18:24:49 2026 superseded podinfo-6.7.1 6.7.1 Install complete2 Sun Feb 1 18:25:12 2026 superseded podinfo-6.7.1 6.7.1 Upgrade complete3 Sun Feb 1 18:26:56 2026 deployed podinfo-6.7.1 6.7.1 Upgrade completeDécryptage de chaque colonne :
| Colonne | Contenu |
|---|---|
REVISION | Numéro incrémental de la révision |
UPDATED | Date/heure de cette révision |
STATUS | deployed (actuelle), superseded (ancienne), failed |
CHART | Nom et version du chart utilisé |
APP VERSION | Version de l’application (définie dans Chart.yaml) |
DESCRIPTION | Origine : Install complete, Upgrade complete, Rollback to X |
Les commandes helm get
Section intitulée « Les commandes helm get »Helm propose plusieurs commandes get pour inspecter les détails d’une release :
| Commande | Contenu |
|---|---|
helm get values | Values personnalisées (surcharges) |
helm get values --all | Toutes les values (défauts + surcharges) |
helm get manifest | Manifests Kubernetes générés |
helm get notes | Notes post-installation |
helm get hooks | Hooks de la release |
helm get all | Tout ce qui précède |
Exemple : voir les values d’une révision précédente
helm get values mon-api -n demo --revision 1Résultat :
USER-SUPPLIED VALUES:nullLa révision 1 n’avait aucune surcharge.
helm get values mon-api -n demo --revision 2Résultat :
USER-SUPPLIED VALUES:replicaCount: 2La révision 2 a ajouté replicaCount: 2.
Limiter l’historique avec —history-max
Section intitulée « Limiter l’historique avec —history-max »Par défaut, Helm conserve les 10 dernières révisions. En CI/CD avec des déploiements fréquents, l’historique peut devenir volumineux.
helm upgrade mon-api stefanprodan/podinfo -n demo --history-max 3Cette option purge automatiquement les révisions les plus anciennes pour n’en garder que 3 :
helm history mon-api -n demoRésultat après plusieurs upgrades avec —history-max 3 :
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION9 Sun Feb 1 18:28:56 2026 superseded podinfo-6.10.0 6.10.0 Upgrade complete10 Sun Feb 1 18:29:06 2026 superseded podinfo-6.7.1 6.7.1 Rollback to 711 Sun Feb 1 18:29:17 2026 deployed podinfo-6.10.0 6.10.0 Upgrade completeRollback : revenir en arrière
Section intitulée « Rollback : revenir en arrière »Quand faire un rollback ?
Section intitulée « Quand faire un rollback ? »- L’application ne fonctionne plus après un upgrade
- Les pods sont en CrashLoopBackOff
- Les métriques montrent des erreurs en hausse
- Vous devez revenir rapidement à un état stable
Rollback vers une révision spécifique
Section intitulée « Rollback vers une révision spécifique »helm rollback mon-api 2 -n demoRésultat :
Rollback was a success! Happy Helming!Vérifiez l’historique après le rollback :
helm history mon-api -n demoRésultat :
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION1 Sun Feb 1 18:24:49 2026 superseded podinfo-6.7.1 6.7.1 Install complete2 Sun Feb 1 18:25:12 2026 superseded podinfo-6.7.1 6.7.1 Upgrade complete3 Sun Feb 1 18:26:56 2026 superseded podinfo-6.7.1 6.7.1 Upgrade complete4 Sun Feb 1 18:27:10 2026 deployed podinfo-6.7.1 6.7.1 Rollback to 2Rollback vers la révision précédente (sans numéro)
Section intitulée « Rollback vers la révision précédente (sans numéro) »Sans numéro de révision, Helm revient à la révision immédiatement précédente :
helm rollback mon-api -n demoRésultat :
Rollback was a success! Happy Helming!helm history mon-api -n demoRésultat :
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION...4 Sun Feb 1 18:27:10 2026 superseded podinfo-6.7.1 6.7.1 Rollback to 25 Sun Feb 1 18:27:41 2026 deployed podinfo-6.7.1 6.7.1 Rollback to 3Rollback : ce qui est restauré
Section intitulée « Rollback : ce qui est restauré »Lors d’un rollback, Helm restaure :
| Élément | Restauré ? |
|---|---|
| Values (configuration) | ✅ Oui |
| Version du chart | ✅ Oui |
| Templates générés | ✅ Oui |
| Ressources Kubernetes | ✅ Oui (recréées/patchées) |
| Données des PVC | ❌ Non (persistantes) |
| Données des bases de données | ❌ Non (externes) |
Erreur : révision inexistante
Section intitulée « Erreur : révision inexistante »helm rollback mon-api 99 -n demoRésultat :
Error: release has no 99 versionConsultez helm history pour voir les révisions disponibles.
Options du rollback
Section intitulée « Options du rollback »| Option | Effet |
|---|---|
--wait | Attend que les pods soient Ready |
--timeout 5m | Timeout pour —wait |
--force | Force la recréation des ressources |
--recreate-pods | Supprime et recrée tous les pods |
Supprimer avec helm uninstall
Section intitulée « Supprimer avec helm uninstall »Suppression standard
Section intitulée « Suppression standard »helm uninstall mon-api -n demoRésultat :
release "mon-api" uninstalledCette commande supprime :
- La release de la base Helm
- Toutes les ressources Kubernetes créées par le chart
- L’historique des révisions
Vérification après uninstall
Section intitulée « Vérification après uninstall »helm list -n demokubectl get all -n demoLes ressources créées par la release ont disparu.
Conserver l’historique avec —keep-history
Section intitulée « Conserver l’historique avec —keep-history »Pour garder une trace de la release supprimée :
helm uninstall mon-api -n demo --keep-historyRésultat :
release "mon-api" uninstalledLa release apparaît avec le statut uninstalled :
helm list -n demo --allRésultat :
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONmon-api demo 1 Sun Feb 1 18:29:52 2026 uninstalled podinfo-6.7.1 6.7.1L’historique reste consultable :
helm history mon-api -n demoRésultat :
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION1 Sun Feb 1 18:29:52 2026 uninstalled podinfo-6.7.1 6.7.1 Uninstallation completeFiltrer les releases par statut
Section intitulée « Filtrer les releases par statut »# Releases déployées uniquement (défaut)helm list -n demo
# Releases avec échechelm list -n demo --failed
# Releases supprimées (avec --keep-history)helm list -n demo --uninstalled
# Toutes les releaseshelm list -n demo --allCe qui n’est PAS supprimé
Section intitulée « Ce qui n’est PAS supprimé »helm uninstall ne supprime pas :
| Ressource | Pourquoi |
|---|---|
| PersistentVolumeClaims | Protection des données (sauf si helm.sh/resource-policy: delete) |
| Namespace | Peut contenir d’autres ressources |
| CRDs | Peuvent être utilisées par d’autres releases |
| Ressources créées manuellement | Non gérées par Helm |
Pour supprimer le namespace et tout son contenu :
kubectl delete namespace demoOptions avancées pour la production
Section intitulée « Options avancées pour la production »—atomic : rollback automatique si échec
Section intitulée « —atomic : rollback automatique si échec »L’option --atomic combine --wait et un rollback automatique si le déploiement échoue :
helm upgrade --install mon-api stefanprodan/podinfo \ -n demo \ --set image.tag=inexistant \ --atomic \ --timeout 30sSi les pods ne deviennent pas Ready dans le timeout, Helm effectue automatiquement un rollback vers la révision précédente.
—dry-run : prévisualiser avant d’appliquer
Section intitulée « —dry-run : prévisualiser avant d’appliquer »helm upgrade mon-api stefanprodan/podinfo -n demo --set replicaCount=5 --dry-runCette commande affiche les manifests qui seraient générés sans les appliquer. Le status affiché est pending-upgrade.
Output JSON/YAML pour l’automatisation
Section intitulée « Output JSON/YAML pour l’automatisation »# Liste des releases en JSONhelm list -n demo -o json
# Historique en YAMLhelm history mon-api -n demo -o yamlUtile pour parser les résultats dans des scripts.
Description personnalisée
Section intitulée « Description personnalisée »Ajoutez une description pour tracer les déploiements :
helm upgrade --install mon-api stefanprodan/podinfo \ -n demo \ --description "Ticket JIRA-1234 - Ajout du health check"helm history mon-api -n demoRésultat :
REVISION UPDATED STATUS CHART DESCRIPTION1 Sun Feb 1 18:31:30 2026 deployed podinfo-6.7.1 Ticket JIRA-1234 - Ajout du health checkTableau récapitulatif des commandes
Section intitulée « Tableau récapitulatif des commandes »| Commande | Effet |
|---|---|
helm install <name> <chart> | Crée une nouvelle release (erreur si existe) |
helm upgrade <name> <chart> | Met à jour une release existante (erreur si n’existe pas) |
helm upgrade --install <name> <chart> | Crée ou met à jour (idempotent) |
helm status <name> | Affiche l’état actuel de la release |
helm history <name> | Liste toutes les révisions |
helm get values <name> | Affiche les values personnalisées |
helm get manifest <name> | Affiche les manifests Kubernetes |
helm rollback <name> [revision] | Revient à une révision précédente |
helm uninstall <name> | Supprime la release et ses ressources |
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
cannot re-use a name | Release existe déjà | Utiliser upgrade --install |
has no deployed releases | Release n’existe pas | Utiliser upgrade --install |
release has no X version | Révision inexistante | Vérifier avec helm history |
| Pods en Pending après rollback | Ressources insuffisantes | Vérifier les quotas/nodes |
| PVC encore présent après uninstall | Comportement normal | Supprimer manuellement si souhaité |
Lab A5 — Upgrade puis rollback
Section intitulée « Lab A5 — Upgrade puis rollback »-
Installer une release stable
Fenêtre de terminal kubectl create namespace helm-labhelm install mon-api stefanprodan/podinfo -n helm-lab --version 6.7.1 -
Vérifier l’état initial
Fenêtre de terminal helm history mon-api -n helm-labkubectl get pods -n helm-lab -
Faire un premier upgrade (changement visible)
Fenêtre de terminal helm upgrade mon-api stefanprodan/podinfo -n helm-lab --set replicaCount=3 --set ui.message="Version 2" -
Observer la nouvelle révision
Fenêtre de terminal helm history mon-api -n helm-labhelm get values mon-api -n helm-lab -
Simuler un problème (image inexistante)
Fenêtre de terminal helm upgrade mon-api stefanprodan/podinfo -n helm-lab --set image.tag=fausse-version -
Observer l’état cassé
Fenêtre de terminal kubectl get pods -n helm-lab# Un ou plusieurs pods en ImagePullBackOff -
Rollback vers la révision stable
Fenêtre de terminal helm rollback mon-api 2 -n helm-lab -
Vérifier le retour à la normale
Fenêtre de terminal helm history mon-api -n helm-labkubectl get pods -n helm-lab# Tous les pods Running -
Nettoyer
Fenêtre de terminal helm uninstall mon-api -n helm-labkubectl delete namespace helm-lab
Critères de réussite :
-
helm historymontre au moins 4 révisions - Vous identifiez la révision problématique
- Le rollback ramène les pods en Running
- Vous comprenez la relation révision ↔ configuration
À retenir
Section intitulée « À retenir »helm upgrade --installest la commande idempotente pour CI/CD- Chaque opération crée une nouvelle révision dans l’historique
helm historypermet de consulter toutes les révisionshelm rollbackcrée une nouvelle révision avec l’ancienne confighelm uninstallsupprime les ressources mais pas les données persistantes- Utilisez
--atomicen production pour rollback automatique en cas d’échec - Limitez l’historique avec
--history-maxpour éviter l’accumulation