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 listetkubectl
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.
Pourquoi Helm ?
Section intitulée « Pourquoi Helm ? »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.
L’analogie de la recette de cuisine
Section intitulée « L’analogie de la recette de cuisine »| Cuisine | Helm |
|---|---|
| Recette | Chart — le template de déploiement |
| Ingrédients | Values — les paramètres personnalisables |
| Plat préparé | Release — l’instance déployée sur votre cluster |
| Livre de recettes | Repository — le catalogue de charts disponibles |
Avant / Après Helm
Section intitulée « Avant / Après Helm »| Sans Helm | Avec Helm |
|---|---|
| 10 fichiers YAML à maintenir | 1 chart versionné |
| ”Quelle version est en prod ?” → grep dans les logs | helm list → version, date, statut |
| Rollback = retrouver les anciens fichiers | helm rollback myapp 2 |
| Config dev/prod = dupliquer tous les YAML | 1 chart + values-dev.yaml / values-prod.yaml |
| Mise à jour = modifier chaque fichier | helm upgrade avec les nouveaux values |
Vocabulaire minimal
Section intitulée « Vocabulaire minimal »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.yamlavec les valeurs par défaut - Un fichier
Chart.yamlavec 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 :
helm install metrics-prod prometheus-community/kube-state-metrics -f values-prod.yamlhelm install metrics-dev prometheus-community/kube-state-metrics -f values-dev.yamlRepository (repo)
Section intitulée « Repository (repo) »Un repository est un serveur qui héberge des charts. C’est comme un “app store” pour Helm. Les plus connus :
| Repo | URL | Contenu |
|---|---|---|
| prometheus-community | https://prometheus-community.github.io/helm-charts | Charts monitoring (Prometheus, Grafana, exporters) |
| ingress-nginx | https://kubernetes.github.io/ingress-nginx | Ingress 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 :
# Utiliser les values par défauthelm install my-metrics prometheus-community/kube-state-metrics
# Surcharger une valeurhelm install my-metrics prometheus-community/kube-state-metrics --set replicas=3
# Surcharger via un fichierhelm install my-metrics prometheus-community/kube-state-metrics -f my-values.yamlInstaller Helm
Section intitulée « Installer Helm »Helm est un binaire unique sans dépendances. L’installation prend moins d’une minute.
Option 1 : Script officiel (recommandé)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bashOption 2 : Via le gestionnaire de paquets
# Debian/Ubuntucurl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/nullecho "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.listsudo apt-get update && sudo apt-get install helm
# Fedora/RHELsudo dnf install helm# Via Homebrew (recommandé)brew install helm
# Ou via le script officielcurl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash# Via Chocolateychoco install kubernetes-helm
# Via Scoopscoop install helm
# Via wingetwinget install Helm.HelmVérifier l’installation
Section intitulée « Vérifier l’installation »helm versionRésultat attendu :
v3.20.0+gb2e4314Ou en version longue :
version.BuildInfo{Version:"v3.20.0", GitCommit:"b2e43143c31eb47e40bd36aabae7d4a76585a61d", GitTreeState:"clean", GoVersion:"go1.24.1"}Déployer un chart en 2 minutes
Section intitulée « Déployer un chart en 2 minutes »Maintenant que Helm est installé, déployons un outil de monitoring Kubernetes en 4 étapes.
-
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-chartsRésultat attendu :
"prometheus-community" has been added to your repositories -
Mettre à jour l’index des charts
Télécharge la liste des charts disponibles (comme
apt update) :Fenêtre de terminal helm repo updateRésultat attendu :
Hang tight while we grab the latest from your chart repositories......Successfully got an update from the "prometheus-community" chart repositoryUpdate Complete. ⎈Happy Helming!⎈ -
Installer kube-state-metrics
Créez une release nommée
my-metricsdans le namespacehelm-demo:Fenêtre de terminal helm install my-metrics prometheus-community/kube-state-metrics \--namespace helm-demo \--create-namespaceRésultat attendu :
NAME: my-metricsLAST DEPLOYED: Sat Feb 1 17:38:28 2026NAMESPACE: helm-demoSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:kube-state-metrics is a simple service that listens to the Kubernetes APIserver and generates metrics about the state of the objects.Décryptage de la sortie :
Ligne Signification 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-installREVISION: 1Numéro de version de la release. S’incrémente à chaque helm upgrade. Permet les rollbacksNOTES:Instructions post-installation — lisez toujours cette section ! Elle indique comment accéder à l’application -
Attendre que les pods soient prêts
Fenêtre de terminal kubectl get pods -n helm-demo --watchAttendez que le statut passe à
Running(30-60 secondes), puis appuyez surCtrl+C.
Vérifier le déploiement
Section intitulée « Vérifier le déploiement »Helm a créé plusieurs ressources Kubernetes. Vérifions que tout est en place.
Lister les releases Helm
Section intitulée « Lister les releases Helm »helm list -n helm-demoRésultat attendu :
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONmy-metrics helm-demo 1 2026-02-01 17:48:21.957437663 +0100 CET deployed kube-state-metrics-7.1.0 2.18.0Cette 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)
Voir les ressources Kubernetes créées
Section intitulée « Voir les ressources Kubernetes créées »kubectl get all -n helm-demoRésultat attendu :
NAME READY STATUS RESTARTS AGEpod/my-metrics-kube-state-metrics-76cf999fdf-c5dnl 1/1 Running 0 30s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/my-metrics-kube-state-metrics ClusterIP 10.110.86.56 <none> 8080/TCP 30s
NAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/my-metrics-kube-state-metrics 1/1 1 1 30sHelm a créé un Deployment, un Service et un Pod — le tout à partir d’un seul helm install.
Tester l’accès aux métriques
Section intitulée « Tester l’accès aux métriques »# Port-forward pour accéder localementkubectl port-forward svc/my-metrics-kube-state-metrics 8080:8080 -n helm-demo &
# Attendre 2 secondes que le port-forward soit établisleep 2
# Tester (affiche les métriques Prometheus)curl -s http://localhost:8080/metrics | head -10Ré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 gaugekube_configmap_info{namespace="kube-system",configmap="kubeadm-config"} 1kube_configmap_info{namespace="kube-system",configmap="coredns"} 1# Arrêter le port-forward en arrière-planpkill -f "port-forward.*8080"Désinstaller proprement
Section intitulée « Désinstaller proprement »Quand vous n’avez plus besoin de la release :
helm uninstall my-metrics -n helm-demoRésultat attendu :
release "my-metrics" uninstalledVérifier le nettoyage
Section intitulée « Vérifier le nettoyage »kubectl get all -n helm-demoRé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 :
kubectl delete namespace helm-demoErreurs fréquentes
Section intitulée « Erreurs fréquentes »| Symptôme | Cause | Solution |
|---|---|---|
Error: INSTALLATION FAILED: cannot re-use a name that is still in use | Une release avec ce nom existe déjà | Choisir un autre nom ou helm uninstall d’abord |
Error: chart "kube-state-metrics" not found | Repo non ajouté ou nom incorrect | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts |
Error: Kubernetes cluster unreachable | kubectl non configuré | Vérifier kubectl cluster-info |
Pods en Pending | Pas assez de ressources sur le cluster | Vérifier kubectl describe pod pour les détails |
Pods en ImagePullBackOff | Image introuvable ou registry privé | Vérifier le nom de l’image et les credentials |
Lab A1 — Déployer Alertmanager
Section intitulée « Lab A1 — Déployer Alertmanager »Mettez en pratique ce que vous venez d’apprendre avec un autre chart de la communauté Prometheus.
-
Créer un namespace dédié
Fenêtre de terminal kubectl create namespace helm-lab -
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-chartshelm repo update -
Installer Alertmanager dans le namespace
Fenêtre de terminal helm install my-alertmanager prometheus-community/alertmanager \--namespace helm-lab \--set persistence.enabled=falseRésultat attendu :
NAME: my-alertmanagerLAST DEPLOYED: Sun Feb 1 17:47:46 2026NAMESPACE: helm-labSTATUS: deployedREVISION: 1 -
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ééeskubectl get all -n helm-labRésultat attendu :
NAME READY STATUS RESTARTS AGEpod/my-alertmanager-0 1/1 Running 0 30sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/my-alertmanager ClusterIP 10.106.232.92 <none> 9093/TCP 30sservice/my-alertmanager-headless ClusterIP None <none> 9093/TCP 30sNAME READY AGEstatefulset.apps/my-alertmanager 1/1 30s -
Validation fonctionnelle — tester l’endpoint de santé
Fenêtre de terminal # Port-forward vers Alertmanagerkubectl port-forward svc/my-alertmanager 9093:9093 -n helm-lab &sleep 2# Tester l'endpoint de santécurl -s http://localhost:9093/-/healthyRésultat attendu :
OKSi vous voyez
OK, Alertmanager est opérationnel ! -
Désinstaller et nettoyer
Fenêtre de terminal # Arrêter le port-forwardpkill -f "port-forward.*9093"# Désinstaller la releasehelm uninstall my-alertmanager -n helm-lab# Supprimer le namespacekubectl delete namespace helm-lab
Critères de réussite :
- Le namespace
helm-labcontient un pod Alertmanager enRunning -
helm list -n helm-labaffiche la releasemy-alertmanageravec statusdeployed -
curl http://localhost:9093/-/healthyretourneOK(validation fonctionnelle) - Après
helm uninstall, plus aucune ressource applicative ne reste - Vous avez compris la différence entre
helm installetkubectl apply
À retenir
Section intitulée « À retenir »- 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 add→helm repo update→helm install→helm list→helm 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