Aller au contenu
Conteneurs & Orchestration medium

Helm en 15 minutes : installer et déployer votre premier chart

16 min de lecture

logo helm

En 15 minutes, vous allez installer Helm et déployer votre première application sur Kubernetes. À la fin de ce guide, vous saurez installer un chart public, vérifier le déploiement et désinstaller proprement — les 3 opérations de base que vous utiliserez au quotidien.

Ce que vous allez apprendre :

  • Installer Helm sur Linux, macOS ou Windows
  • Comprendre les 4 termes essentiels : chart, release, repo, values
  • Déployer nginx en une commande avec helm install
  • Vérifier que tout fonctionne avec helm list et kubectl

Prérequis : un cluster Kubernetes fonctionnel (kind, k3d, minikube ou distant) avec kubectl configuré. Si ce n’est pas le cas, consultez d’abord le guide Kubernetes.

Imaginez que vous devez déployer une application sur Kubernetes. Sans Helm, vous écrivez manuellement plusieurs fichiers YAML (Deployment, Service, ConfigMap, Secret…), puis vous les appliquez un par un avec kubectl apply. Si vous avez 10 environnements, vous dupliquez ces fichiers 10 fois. Et quand il faut mettre à jour ? Vous modifiez chaque fichier à la main, en espérant ne rien oublier.

Helm résout ce problème en regroupant tous ces fichiers dans un package appelé “chart”. Un chart, c’est comme une recette de cuisine : il contient tous les ingrédients (les fichiers YAML) et les instructions (les templates). Vous ajustez les quantités via un fichier de configuration (values.yaml), et Helm génère automatiquement tous les manifests Kubernetes.

CuisineHelm
RecetteChart — le template de déploiement
IngrédientsValues — les paramètres personnalisables
Plat préparéRelease — l’instance déployée sur votre cluster
Livre de recettesRepository — le catalogue de charts disponibles
Sans HelmAvec Helm
10 fichiers YAML à maintenir1 chart versionné
”Quelle version est en prod ?” → grep dans les logshelm list → version, date, statut
Rollback = retrouver les anciens fichiershelm rollback myapp 2
Config dev/prod = dupliquer tous les YAML1 chart + values-dev.yaml / values-prod.yaml
Mise à jour = modifier chaque fichierhelm upgrade avec les nouveaux values

Avant d’installer quoi que ce soit, comprenons les 4 termes que vous verrez partout :

Un chart est un package Helm. Il contient :

  • Des templates YAML (Deployment, Service, etc.) avec des variables
  • Un fichier values.yaml avec les valeurs par défaut
  • Un fichier Chart.yaml avec les métadonnées (nom, version, description)

Concrètement, un chart est un dossier avec cette structure :

  • Répertoiremychart/
    • Chart.yaml Nom, version, description
    • values.yaml Valeurs par défaut
    • Répertoiretemplates/ Fichiers YAML avec variables
      • deployment.yaml
      • service.yaml
      • _helpers.tpl

Une release est une instance d’un chart installée sur votre cluster. Quand vous exécutez helm install my-metrics prometheus-community/kube-state-metrics, vous créez une release nommée my-metrics.

Vous pouvez installer le même chart plusieurs fois avec des noms différents — chaque installation est une release distincte :

Fenêtre de terminal
helm install metrics-prod prometheus-community/kube-state-metrics -f values-prod.yaml
helm install metrics-dev prometheus-community/kube-state-metrics -f values-dev.yaml

Un repository est un serveur qui héberge des charts. C’est comme un “app store” pour Helm. Les plus connus :

RepoURLContenu
prometheus-communityhttps://prometheus-community.github.io/helm-chartsCharts monitoring (Prometheus, Grafana, exporters)
ingress-nginxhttps://kubernetes.github.io/ingress-nginxIngress controller officiel Kubernetes SIG

Les values sont les paramètres que vous passez au chart pour le personnaliser. Chaque chart définit des valeurs par défaut dans values.yaml, que vous pouvez surcharger :

Fenêtre de terminal
# Utiliser les values par défaut
helm install my-metrics prometheus-community/kube-state-metrics
# Surcharger une valeur
helm install my-metrics prometheus-community/kube-state-metrics --set replicas=3
# Surcharger via un fichier
helm install my-metrics prometheus-community/kube-state-metrics -f my-values.yaml

Helm est un binaire unique sans dépendances. L’installation prend moins d’une minute.

Option 1 : Script officiel (recommandé)

Fenêtre de terminal
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Option 2 : Via le gestionnaire de paquets

Fenêtre de terminal
# Debian/Ubuntu
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update && sudo apt-get install helm
# Fedora/RHEL
sudo dnf install helm
Fenêtre de terminal
helm version

Résultat attendu :

v3.20.0+gb2e4314

Ou en version longue :

version.BuildInfo{Version:"v3.20.0", GitCommit:"b2e43143c31eb47e40bd36aabae7d4a76585a61d", GitTreeState:"clean", GoVersion:"go1.24.1"}

Maintenant que Helm est installé, déployons un outil de monitoring Kubernetes en 4 étapes.

  1. Ajouter le repository prometheus-community

    Les charts ne sont pas inclus avec Helm — il faut d’abord ajouter un repo :

    Fenêtre de terminal
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

    Résultat attendu :

    "prometheus-community" has been added to your repositories
  2. Mettre à jour l’index des charts

    Télécharge la liste des charts disponibles (comme apt update) :

    Fenêtre de terminal
    helm repo update

    Résultat attendu :

    Hang tight while we grab the latest from your chart repositories...
    ...Successfully got an update from the "prometheus-community" chart repository
    Update Complete. ⎈Happy Helming!⎈
  3. Installer kube-state-metrics

    Créez une release nommée my-metrics dans le namespace helm-demo :

    Fenêtre de terminal
    helm install my-metrics prometheus-community/kube-state-metrics \
    --namespace helm-demo \
    --create-namespace

    Résultat attendu :

    NAME: my-metrics
    LAST DEPLOYED: Sat Feb 1 17:38:28 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.

    Décryptage de la sortie :

    LigneSignification
    NAME: my-metricsLe nom de votre release — utilisez-le pour toutes les commandes futures (helm upgrade my-metrics, helm uninstall my-metrics)
    LAST DEPLOYEDDate et heure du déploiement — utile pour savoir “quand a été déployée cette version ?”
    NAMESPACE: helm-demoLe namespace Kubernetes où les ressources ont été créées
    STATUS: deployedL’installation a réussi. Autres valeurs possibles : failed, pending-install
    REVISION: 1Numéro de version de la release. S’incrémente à chaque helm upgrade. Permet les rollbacks
    NOTES:Instructions post-installation — lisez toujours cette section ! Elle indique comment accéder à l’application
  4. Attendre que les pods soient prêts

    Fenêtre de terminal
    kubectl get pods -n helm-demo --watch

    Attendez que le statut passe à Running (30-60 secondes), puis appuyez sur Ctrl+C.

Helm a créé plusieurs ressources Kubernetes. Vérifions que tout est en place.

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

Résultat attendu :

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-metrics helm-demo 1 2026-02-01 17:48:21.957437663 +0100 CET deployed kube-state-metrics-7.1.0 2.18.0

Cette commande montre :

  • NAME : le nom de votre release
  • REVISION : le numéro de version (incrémenté à chaque upgrade)
  • STATUS : deployed, failed, pending-install
  • CHART : le chart et sa version
  • APP VERSION : la version de l’application (ici kube-state-metrics 2.18.0)
Fenêtre de terminal
kubectl get all -n helm-demo

Résultat attendu :

NAME READY STATUS RESTARTS AGE
pod/my-metrics-kube-state-metrics-76cf999fdf-c5dnl 1/1 Running 0 30s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-metrics-kube-state-metrics ClusterIP 10.110.86.56 <none> 8080/TCP 30s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-metrics-kube-state-metrics 1/1 1 1 30s

Helm a créé un Deployment, un Service et un Pod — le tout à partir d’un seul helm install.

Fenêtre de terminal
# Port-forward pour accéder localement
kubectl port-forward svc/my-metrics-kube-state-metrics 8080:8080 -n helm-demo &
# Attendre 2 secondes que le port-forward soit établi
sleep 2
# Tester (affiche les métriques Prometheus)
curl -s http://localhost:8080/metrics | head -10

Résultat attendu :

# HELP kube_configmap_annotations Kubernetes annotations converted to Prometheus labels.
# TYPE kube_configmap_annotations gauge
# HELP kube_configmap_labels [STABLE] Kubernetes labels converted to Prometheus labels.
# TYPE kube_configmap_labels gauge
# HELP kube_configmap_info [STABLE] Information about configmap.
# TYPE kube_configmap_info gauge
kube_configmap_info{namespace="kube-system",configmap="kubeadm-config"} 1
kube_configmap_info{namespace="kube-system",configmap="coredns"} 1
Fenêtre de terminal
# Arrêter le port-forward en arrière-plan
pkill -f "port-forward.*8080"

Quand vous n’avez plus besoin de la release :

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

Résultat attendu :

release "my-metrics" uninstalled
Fenêtre de terminal
kubectl get all -n helm-demo

Résultat attendu :

No resources found in helm-demo namespace.

Helm a supprimé toutes les ressources qu’il avait créées (Deployment, Service, Pod). Le namespace reste, vous pouvez le supprimer manuellement :

Fenêtre de terminal
kubectl delete namespace helm-demo
SymptômeCauseSolution
Error: INSTALLATION FAILED: cannot re-use a name that is still in useUne release avec ce nom existe déjàChoisir un autre nom ou helm uninstall d’abord
Error: chart "kube-state-metrics" not foundRepo non ajouté ou nom incorrecthelm repo add prometheus-community https://prometheus-community.github.io/helm-charts
Error: Kubernetes cluster unreachablekubectl non configuréVérifier kubectl cluster-info
Pods en PendingPas assez de ressources sur le clusterVérifier kubectl describe pod pour les détails
Pods en ImagePullBackOffImage introuvable ou registry privéVérifier le nom de l’image et les credentials

Mettez en pratique ce que vous venez d’apprendre avec un autre chart de la communauté Prometheus.

  1. Créer un namespace dédié

    Fenêtre de terminal
    kubectl create namespace helm-lab
  2. Ajouter le repo prometheus-community (si pas déjà fait)

    Fenêtre de terminal
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
  3. Installer Alertmanager dans le namespace

    Fenêtre de terminal
    helm install my-alertmanager prometheus-community/alertmanager \
    --namespace helm-lab \
    --set persistence.enabled=false

    Résultat attendu :

    NAME: my-alertmanager
    LAST DEPLOYED: Sun Feb 1 17:47:46 2026
    NAMESPACE: helm-lab
    STATUS: deployed
    REVISION: 1
  4. Vérifier que le pod est Running

    Fenêtre de terminal
    # Attendre que le pod soit prêt (timeout 2 minutes)
    kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=alertmanager \
    -n helm-lab --timeout=120s
    # Vérifier les ressources créées
    kubectl get all -n helm-lab

    Résultat attendu :

    NAME READY STATUS RESTARTS AGE
    pod/my-alertmanager-0 1/1 Running 0 30s
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    service/my-alertmanager ClusterIP 10.106.232.92 <none> 9093/TCP 30s
    service/my-alertmanager-headless ClusterIP None <none> 9093/TCP 30s
    NAME READY AGE
    statefulset.apps/my-alertmanager 1/1 30s
  5. Validation fonctionnelle — tester l’endpoint de santé

    Fenêtre de terminal
    # Port-forward vers Alertmanager
    kubectl port-forward svc/my-alertmanager 9093:9093 -n helm-lab &
    sleep 2
    # Tester l'endpoint de santé
    curl -s http://localhost:9093/-/healthy

    Résultat attendu :

    OK

    Si vous voyez OK, Alertmanager est opérationnel !

  6. Désinstaller et nettoyer

    Fenêtre de terminal
    # Arrêter le port-forward
    pkill -f "port-forward.*9093"
    # Désinstaller la release
    helm uninstall my-alertmanager -n helm-lab
    # Supprimer le namespace
    kubectl delete namespace helm-lab

Critères de réussite :

  • Le namespace helm-lab contient un pod Alertmanager en Running
  • helm list -n helm-lab affiche la release my-alertmanager avec status deployed
  • curl http://localhost:9093/-/healthy retourne OK (validation fonctionnelle)
  • Après helm uninstall, plus aucune ressource applicative ne reste
  • Vous avez compris la différence entre helm install et kubectl apply
  • Helm est un gestionnaire de packages pour Kubernetes : un chart = un package réutilisable
  • Chart + Values = Release : une release est une instance nommée d’un chart avec sa configuration
  • Workflow de base : helm repo addhelm repo updatehelm installhelm listhelm uninstall
  • Helm 3 est client-only : pas de composant à installer côté cluster
  • Les repos open source recommandés : prometheus-community, ingress-nginx et Artifact Hub pour la recherche

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.