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 »install et upgrade ne sont pas interchangeables : chacune échoue dans la situation opposée. helm install refuse une release déjà présente, helm upgrade refuse une release absente. Le tableau croise ces deux cas. Retenez surtout les deux lignes rouges, ce sont elles qui expliquent l'erreur que vous rencontrerez tôt ou tard en rejouant un script, et que upgrade --install résout d'un coup.
| 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 ? »Le rollback est votre filet de sécurité quand un upgrade dégrade l'application. L'objectif est de restaurer un état stable connu en quelques secondes, sans rejouer un déploiement complet. Les situations ci-dessous partagent le même signal : l'état actuel est cassé et vous disposez d'une révision précédente qui, elle, fonctionnait.
- 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 »Le rollback accepte les mêmes options de contrôle qu'un upgrade. La plus utile en production est --wait : sans elle, la commande rend la main dès que Helm a soumis les manifests, avant même que les pods soient réellement repartis, ce qui peut donner un faux sentiment de succès. Réservez --force et --recreate-pods aux cas où un simple patch ne suffit pas, car ils provoquent une coupure.
| 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 »Par défaut, helm list ne montre que les releases déployées, ce qui masque les échecs et les releases supprimées avec --keep-history. Ces filtres deviennent indispensables pour le diagnostic : --failed révèle un déploiement bloqué en failed qui n'apparaît pas dans la liste normale, et --uninstalled retrouve la trace d'une release effacée dont vous voulez consulter l'historique.
# 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 d'un StatefulSet | Créés par volumeClaimTemplates, ils sont gérés par Kubernetes et non par Helm. Un PVC ordinaire, lui, est supprimé par défaut : annotez-le helm.sh/resource-policy: keep pour le conserver |
| 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 »Ce tableau condense tout le cycle de vie en une antisèche à garder sous la main. Si vous ne deviez retenir qu'une ligne, ce serait helm upgrade --install : c'est la seule commande idempotente, celle qui fonctionne aussi bien au premier déploiement qu'aux suivants, et donc la seule à mettre dans un pipeline.
| 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