Aller au contenu
Conteneurs & Orchestration medium

Helm install : déployer et gérer vos releases

45 min de lecture

logo helm

Ce guide vous apprend à déployer des applications sur Kubernetes avec helm install et à gérer leur cycle de vie complet : mises à jour, rollbacks et suppression. Vous allez comprendre ce qu'est une release, comment Helm stocke son historique, et surtout comment lire et interpréter chaque ligne de sortie des commandes Helm. En 20 minutes, vous saurez déployer, mettre à jour et dépanner vos applications.

  • Distinguer un chart d'une release, et comprendre où Helm conserve son historique.
  • Installer une application et lire chaque ligne de la sortie de helm install.
  • Mettre à jour une release avec helm upgrade, en sachant ce que --reuse-values conserve.
  • Revenir en arrière avec helm rollback en s'appuyant sur helm history.
  • Supprimer une release en identifiant ce qui lui survit, PVC et CRD compris.
  • Simuler un déploiement avec --dry-run avant de toucher au cluster.

Vérifiez votre environnement :

Fenêtre de terminal
# Vérifier la connexion au cluster
kubectl cluster-info
# Vérifier que Helm communique avec le cluster
helm list --all-namespaces

Helm ne se contente pas d'appliquer des manifests : il garde la mémoire de ce qu'il a déployé. Cette mémoire, c'est la release, l'objet qui relie un chart, les valeurs utilisées et l'état obtenu sur le cluster. Comprendre où elle est stockée et comment elle évolue explique la quasi-totalité du comportement de Helm, y compris ses messages d'erreur.

Une release est une instance déployée d'un chart Helm. Chaque release possède :

  • Un nom unique dans le namespace (choisi par vous)
  • Un numéro de révision (commence à 1, incrémenté à chaque upgrade)
  • Un statut (deployed, failed, pending-install, etc.)
  • Un historique des révisions précédentes (pour les rollbacks)

Helm stocke les métadonnées des releases directement dans Kubernetes, sous forme de Secrets dans le namespace de la release :

Fenêtre de terminal
kubectl get secrets -n helm-demo -l "owner=helm"
NAME TYPE DATA AGE
sh.helm.release.v1.podinfo.v1 helm.sh/release.v1 1 5m
sh.helm.release.v1.podinfo.v2 helm.sh/release.v1 1 2m

Chaque Secret sh.helm.release.v1.<release>.<revision> contient l'état complet de cette révision : les values utilisées, le manifeste généré, les métadonnées.

L'installation transforme un chart en objets Kubernetes réels. Helm calcule les manifests à partir des templates et des values, les envoie à l'API server, puis enregistre le tout dans une nouvelle release en révision 1. Tant que cette étape n'est pas comprise, les commandes suivantes (upgrade, rollback) restent opaques.

Deux arguments seulement sont obligatoires : le nom que vous donnez à la release et la référence du chart à déployer.

Fenêtre de terminal
helm install <nom-release> <chart> [options]
  • nom-release : identifiant unique de votre choix (ex: my-app, prometheus-prod)
  • chart : référence du chart (repo/chart ou chemin local)

Préparons un namespace de test et déployons une application :

Fenêtre de terminal
# Créer un namespace dédié
kubectl create namespace helm-demo
# Installer kube-state-metrics depuis prometheus-community
helm install my-metrics prometheus-community/kube-state-metrics --namespace helm-demo

Résultat :

NAME: my-metrics
LAST DEPLOYED: Sun Feb 1 17:48:21 2026
NAMESPACE: helm-demo
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
kube-state-metrics is a simple service that listens to the Kubernetes API server and generates metrics about the state of the objects.
The exposed metrics can be found here:
https://github.com/kubernetes/kube-state-metrics/blob/master/docs/README.md#exposed-metrics
The metrics are exported on the HTTP endpoint /metrics on the listening port.
In your case, my-metrics-kube-state-metrics.helm-demo.svc.cluster.local:8080/metrics
They are served either as plaintext or protobuf depending on the Accept header.
They are designed to be consumed either by Prometheus itself or by a scraper that is compatible with scraping a Prometheus client endpoint.

Chaque ligne de la sortie vous donne une information importante. Décortiquons :

LigneSignificationÀ retenir
NAME: my-metricsNom de la release que vous avez choisiC'est l'identifiant pour toutes les commandes futures (helm upgrade my-metrics, helm uninstall my-metrics)
LAST DEPLOYED: Sun Feb 1 17:48:21 2026Horodatage du déploiementUtile pour le debugging ("quand a été déployée cette version ?")
NAMESPACE: helm-demoNamespace Kubernetes cibleTous les objets créés (Pods, Services, etc.) sont dans ce namespace
STATUS: deployedÉtat actuel de la releasedeployed = succès. Autres valeurs possibles : failed, pending-install, pending-upgrade
REVISION: 1Numéro de version de la releaseCommence à 1, s'incrémente à chaque helm upgrade. Utilisé pour les rollbacks
TEST SUITE: NoneRésultat des tests Helm (si définis)Certains charts incluent des tests de validation post-installation
NOTES:Instructions post-installationLisez toujours cette section ! Elle contient les informations spécifiques au chart

Le statut est la première chose à regarder quand quelque chose ne va pas. Les statuts pending-* signalent une opération interrompue, souvent parce que le client Helm a été coupé en cours de route : la release reste alors bloquée dans cet état jusqu'à intervention. Le statut superseded n'est pas une anomalie, il désigne simplement une révision remplacée par une plus récente.

StatutSignificationAction
deployedInstallation réussie, ressources créées✅ Tout va bien
failedInstallation échouéeVérifier les logs, corriger, réessayer
pending-installInstallation en coursAttendre ou investiguer si bloqué
pending-upgradeMise à jour en coursAttendre
pending-rollbackRollback en coursAttendre
supersededAncienne révision remplacéeNormal après un upgrade
uninstallingSuppression en coursAttendre

Après un helm install, vérifiez que les ressources Kubernetes sont bien créées :

Fenêtre de terminal
# Voir les ressources créées par la release
kubectl get all -n helm-demo -l "app.kubernetes.io/instance=my-metrics"
NAME READY STATUS RESTARTS AGE
pod/my-metrics-kube-state-metrics-7b8d5c4f87-xj2kp 1/1 Running 0 2m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-metrics-kube-state-metrics ClusterIP 10.96.xxx.xxx <none> 8080/TCP 2m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-metrics-kube-state-metrics 1/1 1 1 2m

helm list interroge les Secrets de release, pas les objets déployés : vous voyez ce que Helm croit avoir installé. La commande est limitée à un namespace par défaut, celui du contexte courant, ce qui explique la plupart des « release not found » signalés par les débutants.

Sans filtre supplémentaire, la sortie ne montre que les releases dans l'état deployed ou failed.

Fenêtre de terminal
helm list -n helm-demo
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-metrics helm-demo 1 2026-02-01 17:48:21.123456789 +0100 CET deployed kube-state-metrics-5.27.0 2.14.0

Lecture du tableau :

ColonneSignification
NAMENom de la release
NAMESPACENamespace Kubernetes
REVISIONNuméro de révision actuel
UPDATEDDate/heure de la dernière modification
STATUSÉtat actuel
CHARTNom et version du chart
APP VERSIONVersion de l'application déployée

C'est la commande d'inventaire, celle qui répond à « qu'est-ce qui a été installé sur ce cluster ». Elle suppose un accès en lecture sur l'ensemble des namespaces.

Fenêtre de terminal
helm list --all-namespaces
# ou
helm list -A

Ces filtres servent surtout au diagnostic : une release restée pending plusieurs minutes après une opération indique presque toujours une commande interrompue.

Fenêtre de terminal
# Voir les releases en échec
helm list --failed
# Voir les releases en cours de déploiement
helm list --pending

Une mise à jour ne remplace pas la release, elle en ajoute une révision. Helm compare l'état enregistré à l'état demandé et n'envoie au cluster que ce qui diffère. Chaque upgrade réussi incrémente le numéro de révision et fait passer la précédente en superseded, ce qui rend le retour arrière possible à tout moment.

La commande helm upgrade met à jour une release existante :

Fenêtre de terminal
# Mettre à jour vers la dernière version du chart
helm upgrade my-metrics prometheus-community/kube-state-metrics -n helm-demo
# Mettre à jour vers une version spécifique
helm upgrade my-metrics prometheus-community/kube-state-metrics --version 5.26.0 -n helm-demo
# Mettre à jour avec de nouvelles values
helm upgrade my-metrics prometheus-community/kube-state-metrics -n helm-demo --set replicas=2

Résultat :

Release "my-metrics" has been upgraded. Happy Helming!
NAME: my-metrics
LAST DEPLOYED: Sun Feb 1 18:15:42 2026
NAMESPACE: helm-demo
STATUS: deployed
REVISION: 2
...

Notez que REVISION est passé de 1 à 2.

Pour les scripts CI/CD, utilisez --install avec upgrade pour une commande idempotente :

Fenêtre de terminal
# Installe si n'existe pas, upgrade si existe
helm upgrade --install my-metrics prometheus-community/kube-state-metrics -n helm-demo

L'historique est la contrepartie utile du stockage en Secrets : chaque révision conserve ses values et son manifeste complet, donc Helm sait reconstruire n'importe quel état passé sans avoir besoin de vos fichiers d'origine. C'est ce qui rend le rollback fiable, même si le poste qui a lancé le déploiement initial n'existe plus.

La colonne DESCRIPTION indique la nature de chaque opération, ce qui permet de repérer immédiatement un rollback antérieur.

Fenêtre de terminal
helm history my-metrics -n helm-demo
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Feb 1 17:48:21 2026 superseded kube-state-metrics-5.27.0 2.14.0 Install complete
2 Sun Feb 1 18:15:42 2026 deployed kube-state-metrics-5.27.0 2.14.0 Upgrade complete

Le numéro passé à helm rollback est celui de la révision cible, telle qu'affichée par helm history. Sans numéro, Helm revient à la révision immédiatement précédente.

Fenêtre de terminal
# Rollback à la révision 1
helm rollback my-metrics 1 -n helm-demo
Rollback was a success! Happy Helming!

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

Fenêtre de terminal
helm history my-metrics -n helm-demo
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Feb 1 17:48:21 2026 superseded kube-state-metrics-5.27.0 2.14.0 Install complete
2 Sun Feb 1 18:15:42 2026 superseded kube-state-metrics-5.27.0 2.14.0 Upgrade complete
3 Sun Feb 1 18:30:15 2026 deployed kube-state-metrics-5.27.0 2.14.0 Rollback to 1

La suppression est irréversible sans précaution : par défaut, Helm efface les objets Kubernetes et l'historique des révisions, donc plus aucun rollback n'est possible. Deux catégories d'objets survivent malgré tout, les PersistentVolumeClaims créés par un StatefulSet et les CRD installés par le chart, qu'il faut supprimer à la main si vous voulez repartir de zéro.

Le namespace, lui, n'est jamais supprimé : il reste en place avec les éventuels objets qui n'appartenaient pas à la release.

Fenêtre de terminal
helm uninstall my-metrics -n helm-demo
release "my-metrics" uninstalled

Par défaut, helm uninstall :

  • Supprime tous les objets Kubernetes créés par la release
  • Supprime l'historique des révisions

L'option --keep-history supprime les ressources mais garde les révisions enregistrées, ce qui laisse la possibilité de restaurer la release par un helm rollback. Le nom de la release reste alors réservé dans le namespace.

Fenêtre de terminal
helm uninstall my-metrics -n helm-demo --keep-history

Avec --keep-history, vous pouvez voir les releases supprimées :

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

Ces options se combinent librement et changent beaucoup le comportement de la commande. Deux méritent une attention particulière : --wait fait patienter Helm jusqu'à ce que les Pods soient prêts, sans quoi la commande rend la main avant que l'application ne fonctionne réellement ; --atomic va plus loin en annulant automatiquement l'opération si le délai expire, ce qui évite de laisser une release à moitié installée.

OptionDescriptionExemple
--namespace / -nNamespace cible-n production
--create-namespaceCrée le namespace s'il n'existe pas--create-namespace
--versionVersion spécifique du chart--version 5.26.0
--values / -fFichier de values personnalisées-f my-values.yaml
--setSurcharge une value en ligne de commande--set replicas=3
--dry-runSimule sans appliquer--dry-run
--waitAttend que les Pods soient Ready--wait
--timeoutTimeout pour --wait--timeout 5m
--atomicRollback automatique si échec--atomic

Cet appel est représentatif d'un déploiement réel : version du chart figée, fichier de values versionné, surcharge ponctuelle et attente de la disponibilité effective des Pods.

Fenêtre de terminal
helm install prometheus prometheus-community/prometheus \
--namespace monitoring \
--create-namespace \
--version 25.27.0 \
-f custom-values.yaml \
--set server.retention=30d \
--wait \
--timeout 10m

La simulation rend visible le rendu final des templates, valeurs substituées comprises. C'est le seul moyen de vérifier ce qu'un chart va réellement créer avant de le laisser toucher au cluster, en particulier quand vous passez plusieurs fichiers de values qui se surchargent.

Fenêtre de terminal
helm install my-app podinfo/podinfo -n helm-demo --dry-run

Cela affiche :

  1. Les métadonnées de la release (comme un install normal)
  2. Le manifeste YAML complet qui serait appliqué
  3. Les NOTES qui seraient affichées

La différence tient à qui vérifie le résultat : votre poste ou l'API Kubernetes. Le mode client fonctionne même sans cluster joignable, le mode serveur exige une connexion et les droits associés.

Fenêtre de terminal
# Côté client (ne contacte pas le cluster)
helm install my-app podinfo/podinfo --dry-run=client
# Côté serveur (valide avec l'API Kubernetes)
helm install my-app podinfo/podinfo --dry-run=server

--dry-run=server est plus précis car il valide que les manifestes sont acceptés par l'API Kubernetes.

Objectif : Pratiquer le cycle install → upgrade → rollback → uninstall.

  1. Créez un namespace et installez podinfo

    Fenêtre de terminal
    kubectl create namespace lab-helm
    helm install demo podinfo/podinfo --namespace lab-helm --version 6.7.0

    Lisez attentivement les NOTES affichées.

  2. Vérifiez le déploiement

    Fenêtre de terminal
    kubectl get all -n lab-helm
    helm list -n lab-helm
  3. Mettez à jour vers une version plus récente

    Fenêtre de terminal
    helm upgrade demo podinfo/podinfo --namespace lab-helm --version 6.9.0
  4. Consultez l'historique

    Fenêtre de terminal
    helm history demo -n lab-helm
  5. Effectuez un rollback

    Fenêtre de terminal
    helm rollback demo 1 -n lab-helm
    helm history demo -n lab-helm
  6. Nettoyez

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

Résultat attendu : Vous maîtrisez le cycle de vie complet d'une release Helm.

La plupart des erreurs Helm proviennent de l'écart entre l'état enregistré dans la release et la réalité du cluster : un nom déjà pris, un namespace implicite ou des Pods qui ne démarrent pas dans le temps imparti. Le tableau donne la lecture rapide, les commandes qui suivent permettent de remonter à la cause exacte.

SymptômeCause probableSolution
STATUS: failedErreur dans les templates ou ressources invalideshelm status <release> puis kubectl describe sur les ressources
Error: cannot re-use a name that is still in useRelease existe déjàUtiliser helm upgrade --install ou supprimer d'abord
Error: INSTALLATION FAILED: timed outPods ne démarrent pasAugmenter --timeout ou investiguer avec kubectl describe pod
Pods en CrashLoopBackOffConfiguration incorrecteVérifier les values, les secrets, les ressources
Error: release not foundMauvais namespaceAjouter -n <namespace> à la commande

Ces trois commandes lisent la release telle qu'elle est enregistrée : helm get manifest montre le YAML réellement appliqué et helm get values les valeurs effectives, souvent différentes de celles que vous croyiez avoir passées.

Fenêtre de terminal
# Voir le statut détaillé
helm status my-release -n my-namespace
# Voir les manifestes qui ont été appliqués
helm get manifest my-release -n my-namespace
# Voir les values utilisées
helm get values my-release -n my-namespace
  • Release = instance déployée d'un chart. Nom unique + numéro de révision + historique.
  • helm install crée une nouvelle release. Lisez toujours les NOTES affichées !
  • La sortie de helm install contient : NAME, NAMESPACE, STATUS, REVISION, informations essentielles pour le debugging.
  • helm upgrade --install est idempotent, préférez-le en CI/CD.
  • helm history + helm rollback permettent de revenir à un état antérieur.
  • --dry-run simule le déploiement, utilisez-le systématiquement avant la production.
  • Helm stocke les releases dans des Secrets Kubernetes (pas de base de données externe).

Ce site vous est utile ?

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

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn