Helm est le gestionnaire de packages Kubernetes. Un chart = ensemble de templates. Une release = chart déployé dans le cluster.
Installation
| Description | Commande |
|---|---|
| Linux / macOS (script officiel) | curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash |
| macOS (Homebrew) | brew install helm |
| Vérifier la version | helm version |
Repositories
| Description | Commande |
|---|---|
| Ajouter un repo | helm repo add bitnami https://charts.bitnami.com/bitnami |
| Lister les repos | helm repo list |
| Mettre à jour tous les repos | helm repo update |
| Supprimer un repo | helm repo remove bitnami |
| Chercher un chart dans les repos | helm search repo nginx |
| Chercher sur Artifact Hub | helm search hub wordpress |
| Lister toutes les versions d'un chart | helm search repo bitnami/redis --versions |
Repos utiles
| Nom | URL |
|---|---|
| Bitnami | https://charts.bitnami.com/bitnami |
| ingress-nginx | https://kubernetes.github.io/ingress-nginx |
| cert-manager | https://charts.jetstack.io |
| Prometheus Community | https://prometheus-community.github.io/helm-charts |
| Grafana | https://grafana.github.io/helm-charts |
| Longhorn | https://charts.longhorn.io |
| Argo | https://argoproj.github.io/argo-helm |
| Rancher | https://releases.rancher.com/server-charts/stable |
Releases - opérations de base
| Description | Commande |
|---|---|
| Installer un chart | helm install ma-release bitnami/redis |
| Installer dans un namespace | helm install ma-release bitnami/redis -n mon-ns --create-namespace |
| Installer une version précise | helm install ma-release bitnami/redis --version 18.0.0 |
| Lister les releases | helm list |
| Lister dans tous les namespaces | helm list -A |
| Statut d'une release | helm status ma-release |
| Historique des révisions | helm history ma-release |
| Désinstaller | helm uninstall ma-release |
| Désinstaller en gardant l'historique | helm uninstall ma-release --keep-history |
Configurer une release
| Description | Commande |
|---|---|
| Voir les valeurs disponibles d'un chart | helm show values bitnami/redis |
| Exporter les valeurs par défaut | helm show values bitnami/redis > values.yaml |
| Installer avec valeurs inline | helm install ma-release bitnami/redis --set auth.enabled=false |
| Installer avec un fichier de valeurs | helm install ma-release bitnami/redis -f my-values.yaml |
| Combiner fichier + override | helm install ma-release bitnami/redis -f values.yaml --set auth.password=secret |
Exemple de fichier values.yaml
# values.yaml - exemple Redis
auth:
enabled: true
password: "supersecret"
master:
persistence:
enabled: true
size: 10Gi
resources:
limits:
memory: 256Mi
cpu: 250m
replica:
replicaCount: 2
metrics:
enabled: true
Upgrade et rollback
| Description | Commande |
|---|---|
| Mettre à jour une release | helm upgrade ma-release bitnami/redis -f my-values.yaml |
| Installer ou upgrader (idempotent) | helm upgrade --install ma-release bitnami/redis -f my-values.yaml |
| Upgrade avec rollback auto si échec | helm upgrade --install ma-release bitnami/redis -f my-values.yaml --atomic --timeout 5m |
| Voir diff avant d'appliquer | helm diff upgrade ma-release bitnami/redis -f values.yaml |
| Rollback à la révision précédente | helm rollback ma-release |
| Rollback à une révision précise | helm rollback ma-release 2 |
Inspecter et débugger
| Description | Commande |
|---|---|
| Voir les valeurs effectives d'une release | helm get values ma-release |
| Valeurs effectives + défauts | helm get values ma-release --all |
| Voir les manifestes déployés | helm get manifest ma-release |
| Voir les notes post-install | helm get notes ma-release |
| Tout afficher (values + manifest + notes) | helm get all ma-release |
| Simuler un install (dry-run) | helm install ma-release bitnami/redis --dry-run --debug |
| Voir les manifestes générés (sans install) | helm template ma-release bitnami/redis -f values.yaml |
| Exporter les manifestes en fichier | helm template ma-release bitnami/redis -f values.yaml > manifests.yaml |
| Tester une release (test hooks) | helm test ma-release --logs |
Créer et développer un chart
| Description | Commande |
|---|---|
| Créer la structure d'un chart | helm create mon-chart |
| Valider la syntaxe | helm lint mon-chart |
| Valider avec des valeurs custom | helm lint mon-chart -f prod-values.yaml |
| Télécharger les dépendances | helm dependency update mon-chart |
| Lister les dépendances | helm dependency list mon-chart |
| Packager en archive .tgz | helm package mon-chart |
| Pousser vers un OCI registry | helm push mon-chart-1.0.0.tgz oci://registry.io/charts |
Structure d'un chart
mon-chart/
├── Chart.yaml # Métadonnées (nom, version, dépendances)
├── values.yaml # Valeurs par défaut
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── _helpers.tpl # Fonctions partagées ({{ define }})
│ └── NOTES.txt # Message affiché après install
└── charts/ # Dépendances packagées
Chart.yaml
apiVersion: v2
name: mon-chart
description: Mon application
type: application
version: 0.1.0 # Version du chart
appVersion: "1.0.0" # Version de l'app déployée
dependencies:
- name: redis
version: "~18.0.0"
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled
Fonctions de template fréquentes
| Fonction | Usage |
|---|---|
{{ .Values.replicaCount }} | Lire une valeur du values.yaml |
{{ .Release.Name }} | Nom de la release |
{{ .Chart.Version }} | Version du chart |
{{ include "chart.fullname" . }} | Appeler un helper |
{{ toYaml .Values.resources | nindent 10 }} | Injecter un bloc YAML indenté |
{{ .Values.tag | default .Chart.AppVersion }} | Valeur par défaut |
{{ if .Values.ingress.enabled }} | Condition |
{{ range .Values.env }} | Boucle |
{{ quote .Values.name }} | Échapper une string |
Plugins utiles
| Plugin | Usage | Installation |
|---|---|---|
| helm-diff | Voir les différences avant upgrade | helm plugin install https://github.com/databus23/helm-diff |
| helm-secrets | Secrets chiffrés avec SOPS | helm plugin install https://github.com/jkroepke/helm-secrets |
| helm-unittest | Tests unitaires de templates | helm plugin install https://github.com/helm-unittest/helm-unittest |
Ressources
- Documentation officielle : https://helm.sh/docs
- Artifact Hub (chercher des charts) : https://artifacthub.io
- Helm chart best practices : https://helm.sh/docs/chart_best_practices