Aller au contenu
Conteneurs & Orchestration medium

Lifecycle Helm : upgrade, history, rollback et uninstall

22 min de lecture

logo helm

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.

Une release Helm peut se trouver dans différents états selon son cycle de vie :

ÉtatSignificationQuand ?
deployedRelease active et fonctionnelleAprès un install ou upgrade réussi
supersededAncienne révision remplacéeAprès un nouvel upgrade ou rollback
pending-installInstallation en coursPendant l’exécution de helm install
pending-upgradeMise à jour en coursPendant l’exécution de helm upgrade
failedÉchec de l’opérationSi les hooks échouent ou timeout atteint
uninstalledRelease supprimée (avec historique)Après helm uninstall --keep-history

Chaque opération sur une release crée une nouvelle révision :

Révision 1 (install) → deployed → superseded
Révision 2 (upgrade) → deployed → superseded
Révision 3 (upgrade) → deployed → superseded
Révision 4 (rollback 2) → deployed ← ACTUELLE

Le rollback ne “revient pas dans le temps” : il crée une nouvelle révision avec la configuration d’une révision précédente.

CommandeRelease existe ?Comportement
helm installNon✅ Crée la release
helm installOui❌ Erreur : cannot re-use a name
helm upgradeNon❌ Erreur : has no deployed releases
helm upgradeOui✅ 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 :

Fenêtre de terminal
helm install mon-api stefanprodan/podinfo -n demo --create-namespace --version 6.7.1

Résultat :

NAME: mon-api
LAST DEPLOYED: Sun Feb 1 18:24:49 2026
NAMESPACE: demo
STATUS: deployed
REVISION: 1

Tentez de réinstaller la même release :

Fenêtre de terminal
helm install mon-api stefanprodan/podinfo -n demo --version 6.7.1

Résultat (erreur) :

Error: INSTALLATION FAILED: cannot re-use a name that is still in use

Démonstration : l’erreur d’upgrade sur une release inexistante

Section intitulée « Démonstration : l’erreur d’upgrade sur une release inexistante »
Fenêtre de terminal
helm upgrade app-inexistante stefanprodan/podinfo -n demo

Résultat (erreur) :

Error: UPGRADE FAILED: "app-inexistante" has no deployed releases

En CI/CD, vous ne savez pas toujours si la release existe déjà :

  • Premier déploiement : la release n’existe pas → install fonctionne
  • Déploiements suivants : la release existe → install échoue

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.

Fenêtre de terminal
helm upgrade --install mon-api stefanprodan/podinfo -n demo --version 6.7.1

Si la release n’existe pas :

Release "mon-api" does not exist. Installing it now.
NAME: mon-api
LAST DEPLOYED: Sun Feb 1 18:25:42 2026
NAMESPACE: demo
STATUS: deployed
REVISION: 1

Si la release existe déjà :

Release "mon-api" has been upgraded. Happy Helming!
NAME: mon-api
LAST DEPLOYED: Sun Feb 1 18:25:49 2026
NAMESPACE: demo
STATUS: deployed
REVISION: 2
OptionEffet
--create-namespaceCrée le namespace s’il n’existe pas
--waitAttend que les pods soient Ready avant de terminer
--timeout 5mTimeout pour --wait (défaut: 5m)
--atomicRollback automatique si l’upgrade échoue
--description "v1.2.3"Description personnalisée dans l’historique

Commande CI/CD complète :

Fenêtre de terminal
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"

Pour modifier la configuration d’une release existante :

Fenêtre de terminal
helm upgrade mon-api stefanprodan/podinfo -n demo --set replicaCount=2

Résultat :

Release "mon-api" has been upgraded. Happy Helming!
NAME: mon-api
LAST DEPLOYED: Sun Feb 1 18:25:12 2026
NAMESPACE: demo
STATUS: deployed
REVISION: 2

Pour passer à une nouvelle version du chart :

Fenêtre de terminal
helm upgrade mon-api stefanprodan/podinfo -n demo --version 6.8.0

L’option --force supprime et recrée les ressources au lieu de les patcher :

Fenêtre de terminal
helm upgrade mon-api stefanprodan/podinfo -n demo --set replicaCount=1 --force

Quand 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
Fenêtre de terminal
helm status mon-api -n demo

Résultat :

NAME: mon-api
LAST DEPLOYED: Sun Feb 1 18:25:12 2026
NAMESPACE: demo
STATUS: deployed
REVISION: 2
NOTES:
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:9898

Décryptage :

ChampSignification
LAST DEPLOYEDDate/heure du dernier déploiement
STATUSÉtat actuel (deployed, failed, etc.)
REVISIONNuméro de la révision actuelle
NOTESInstructions post-installation du chart

Vous pouvez consulter l’état d’une révision passée :

Fenêtre de terminal
helm status mon-api -n demo --revision 1

Résultat :

NAME: mon-api
LAST DEPLOYED: Sun Feb 1 18:24:49 2026
NAMESPACE: demo
STATUS: superseded
REVISION: 1

Le statut superseded indique que cette révision a été remplacée par une plus récente.

Fenêtre de terminal
helm history mon-api -n demo

Résultat :

REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Feb 1 18:24:49 2026 superseded podinfo-6.7.1 6.7.1 Install complete
2 Sun Feb 1 18:25:12 2026 superseded podinfo-6.7.1 6.7.1 Upgrade complete
3 Sun Feb 1 18:26:56 2026 deployed podinfo-6.7.1 6.7.1 Upgrade complete

Décryptage de chaque colonne :

ColonneContenu
REVISIONNuméro incrémental de la révision
UPDATEDDate/heure de cette révision
STATUSdeployed (actuelle), superseded (ancienne), failed
CHARTNom et version du chart utilisé
APP VERSIONVersion de l’application (définie dans Chart.yaml)
DESCRIPTIONOrigine : Install complete, Upgrade complete, Rollback to X

Helm propose plusieurs commandes get pour inspecter les détails d’une release :

CommandeContenu
helm get valuesValues personnalisées (surcharges)
helm get values --allToutes les values (défauts + surcharges)
helm get manifestManifests Kubernetes générés
helm get notesNotes post-installation
helm get hooksHooks de la release
helm get allTout ce qui précède

Exemple : voir les values d’une révision précédente

Fenêtre de terminal
helm get values mon-api -n demo --revision 1

Résultat :

USER-SUPPLIED VALUES:
null

La révision 1 n’avait aucune surcharge.

Fenêtre de terminal
helm get values mon-api -n demo --revision 2

Résultat :

USER-SUPPLIED VALUES:
replicaCount: 2

La révision 2 a ajouté replicaCount: 2.

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.

Fenêtre de terminal
helm upgrade mon-api stefanprodan/podinfo -n demo --history-max 3

Cette option purge automatiquement les révisions les plus anciennes pour n’en garder que 3 :

Fenêtre de terminal
helm history mon-api -n demo

Résultat après plusieurs upgrades avec —history-max 3 :

REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
9 Sun Feb 1 18:28:56 2026 superseded podinfo-6.10.0 6.10.0 Upgrade complete
10 Sun Feb 1 18:29:06 2026 superseded podinfo-6.7.1 6.7.1 Rollback to 7
11 Sun Feb 1 18:29:17 2026 deployed podinfo-6.10.0 6.10.0 Upgrade complete
  • 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
Fenêtre de terminal
helm rollback mon-api 2 -n demo

Résultat :

Rollback was a success! Happy Helming!

Vérifiez l’historique après le rollback :

Fenêtre de terminal
helm history mon-api -n demo

Résultat :

REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Feb 1 18:24:49 2026 superseded podinfo-6.7.1 6.7.1 Install complete
2 Sun Feb 1 18:25:12 2026 superseded podinfo-6.7.1 6.7.1 Upgrade complete
3 Sun Feb 1 18:26:56 2026 superseded podinfo-6.7.1 6.7.1 Upgrade complete
4 Sun Feb 1 18:27:10 2026 deployed podinfo-6.7.1 6.7.1 Rollback to 2

Rollback 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 :

Fenêtre de terminal
helm rollback mon-api -n demo

Résultat :

Rollback was a success! Happy Helming!
Fenêtre de terminal
helm history mon-api -n demo

Ré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 2
5 Sun Feb 1 18:27:41 2026 deployed podinfo-6.7.1 6.7.1 Rollback to 3

Lors d’un rollback, Helm restaure :

ÉlémentRestauré ?
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)
Fenêtre de terminal
helm rollback mon-api 99 -n demo

Résultat :

Error: release has no 99 version

Consultez helm history pour voir les révisions disponibles.

OptionEffet
--waitAttend que les pods soient Ready
--timeout 5mTimeout pour —wait
--forceForce la recréation des ressources
--recreate-podsSupprime et recrée tous les pods
Fenêtre de terminal
helm uninstall mon-api -n demo

Résultat :

release "mon-api" uninstalled

Cette commande supprime :

  • La release de la base Helm
  • Toutes les ressources Kubernetes créées par le chart
  • L’historique des révisions
Fenêtre de terminal
helm list -n demo
kubectl get all -n demo

Les ressources créées par la release ont disparu.

Pour garder une trace de la release supprimée :

Fenêtre de terminal
helm uninstall mon-api -n demo --keep-history

Résultat :

release "mon-api" uninstalled

La release apparaît avec le statut uninstalled :

Fenêtre de terminal
helm list -n demo --all

Résultat :

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mon-api demo 1 Sun Feb 1 18:29:52 2026 uninstalled podinfo-6.7.1 6.7.1

L’historique reste consultable :

Fenêtre de terminal
helm history mon-api -n demo

Résultat :

REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Feb 1 18:29:52 2026 uninstalled podinfo-6.7.1 6.7.1 Uninstallation complete
Fenêtre de terminal
# Releases déployées uniquement (défaut)
helm list -n demo
# Releases avec échec
helm list -n demo --failed
# Releases supprimées (avec --keep-history)
helm list -n demo --uninstalled
# Toutes les releases
helm list -n demo --all

helm uninstall ne supprime pas :

RessourcePourquoi
PersistentVolumeClaimsProtection des données (sauf si helm.sh/resource-policy: delete)
NamespacePeut contenir d’autres ressources
CRDsPeuvent être utilisées par d’autres releases
Ressources créées manuellementNon gérées par Helm

Pour supprimer le namespace et tout son contenu :

Fenêtre de terminal
kubectl delete namespace demo

L’option --atomic combine --wait et un rollback automatique si le déploiement échoue :

Fenêtre de terminal
helm upgrade --install mon-api stefanprodan/podinfo \
-n demo \
--set image.tag=inexistant \
--atomic \
--timeout 30s

Si les pods ne deviennent pas Ready dans le timeout, Helm effectue automatiquement un rollback vers la révision précédente.

Fenêtre de terminal
helm upgrade mon-api stefanprodan/podinfo -n demo --set replicaCount=5 --dry-run

Cette commande affiche les manifests qui seraient générés sans les appliquer. Le status affiché est pending-upgrade.

Fenêtre de terminal
# Liste des releases en JSON
helm list -n demo -o json
# Historique en YAML
helm history mon-api -n demo -o yaml

Utile pour parser les résultats dans des scripts.

Ajoutez une description pour tracer les déploiements :

Fenêtre de terminal
helm upgrade --install mon-api stefanprodan/podinfo \
-n demo \
--description "Ticket JIRA-1234 - Ajout du health check"
Fenêtre de terminal
helm history mon-api -n demo

Résultat :

REVISION UPDATED STATUS CHART DESCRIPTION
1 Sun Feb 1 18:31:30 2026 deployed podinfo-6.7.1 Ticket JIRA-1234 - Ajout du health check
CommandeEffet
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
SymptômeCause probableSolution
cannot re-use a nameRelease existe déjàUtiliser upgrade --install
has no deployed releasesRelease n’existe pasUtiliser upgrade --install
release has no X versionRévision inexistanteVérifier avec helm history
Pods en Pending après rollbackRessources insuffisantesVérifier les quotas/nodes
PVC encore présent après uninstallComportement normalSupprimer manuellement si souhaité

  1. Installer une release stable

    Fenêtre de terminal
    kubectl create namespace helm-lab
    helm install mon-api stefanprodan/podinfo -n helm-lab --version 6.7.1
  2. Vérifier l’état initial

    Fenêtre de terminal
    helm history mon-api -n helm-lab
    kubectl get pods -n helm-lab
  3. 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"
  4. Observer la nouvelle révision

    Fenêtre de terminal
    helm history mon-api -n helm-lab
    helm get values mon-api -n helm-lab
  5. Simuler un problème (image inexistante)

    Fenêtre de terminal
    helm upgrade mon-api stefanprodan/podinfo -n helm-lab --set image.tag=fausse-version
  6. Observer l’état cassé

    Fenêtre de terminal
    kubectl get pods -n helm-lab
    # Un ou plusieurs pods en ImagePullBackOff
  7. Rollback vers la révision stable

    Fenêtre de terminal
    helm rollback mon-api 2 -n helm-lab
  8. Vérifier le retour à la normale

    Fenêtre de terminal
    helm history mon-api -n helm-lab
    kubectl get pods -n helm-lab
    # Tous les pods Running
  9. Nettoyer

    Fenêtre de terminal
    helm uninstall mon-api -n helm-lab
    kubectl delete namespace helm-lab

Critères de réussite :

  • helm history montre 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

  • helm upgrade --install est la commande idempotente pour CI/CD
  • Chaque opération crée une nouvelle révision dans l’historique
  • helm history permet de consulter toutes les révisions
  • helm rollback crée une nouvelle révision avec l’ancienne config
  • helm uninstall supprime les ressources mais pas les données persistantes
  • Utilisez --atomic en production pour rollback automatique en cas d’échec
  • Limitez l’historique avec --history-max pour éviter l’accumulation

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.