Packaging & Config

Helm

Gestionnaire de paquets Kubernetes CNCF Graduated - charts versionés, templates Go, dépendances, rollback. Standard de facto pour déployer des applications K8s. Apache 2.0.

Helm est le gestionnaire de paquets standard pour Kubernetes, CNCF Graduated. Il regroupe les manifests Kubernetes dans des packages versionnés appelés charts - archives contenant des templates Go, des valeurs par défaut et des métadonnées. Helm gère le cycle de vie complet d'une installation (install, upgrade, rollback, uninstall), suit l'état des déploiements via des releases stockées dans des secrets Kubernetes, et résout les dépendances entre charts. ArtifactHub centralise les charts publics de l'écosystème.


Informations essentielles

Origine : Deis → CNCF Graduated  ·  Licence : Apache 2.0  ·  Architectures : x86_64, ARM64

Liens : Site officiel  ·  Documentation  ·  GitHub  ·  ArtifactHub

Support : CNCF Graduated. Standard de facto, écosystème très large.

Stack par défaut

ComposantValeur
LangageGo
TemplatesGo templates + fonctions Sprig
Stockage releasesSecrets Kubernetes (namespace de déploiement)
RegistriesOCI registries (ghcr.io, ECR, etc.) ou repos HTTP Helm classiques
Intégrations GitOpsFluxCD (HelmRelease), Argo CD (Application)

Prérequis

RessourceValeur
kubectlConfiguré avec accès cluster
Kubernetes1.20+

Installation

# Script officiel (Linux/macOS)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# Homebrew
brew install helm

# Snap
sudo snap install helm --classic

# Windows (Chocolatey)
choco install kubernetes-helm

helm version

Commandes fondamentales

Gérer les dépôts

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update                          # Mettre à jour le cache local

helm search repo nginx                    # Rechercher dans les dépôts locaux
helm search hub nginx                     # Rechercher sur ArtifactHub

Installer et gérer des releases

# Installer un chart
helm install my-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace

# Installer avec des valeurs personnalisées
helm install my-release bitnami/postgresql \
  --namespace database \
  --create-namespace \
  --set auth.postgresPassword=secret123 \
  --set primary.persistence.size=20Gi

# Installer depuis un fichier de valeurs
helm install my-release bitnami/postgresql \
  -f values-prod.yaml \
  --namespace database

# Prévisualiser sans installer (dry-run)
helm install my-release bitnami/postgresql --dry-run --debug -f values.yaml

# Mettre à jour une release
helm upgrade my-release bitnami/postgresql \
  --namespace database \
  -f values-prod.yaml \
  --reuse-values             # Conserver les valeurs non spécifiées

# Installer ou mettre à jour (install-or-upgrade)
helm upgrade --install my-release bitnami/postgresql \
  --namespace database \
  --create-namespace \
  -f values-prod.yaml

Rollback et désinstallation

helm history my-release -n database       # Historique des révisions
helm rollback my-release 2 -n database    # Revenir à la révision 2
helm uninstall my-release -n database     # Désinstaller
helm uninstall my-release -n database --keep-history   # Garder l'historique

Créer un chart

helm create my-app
# Génère la structure :
# my-app/
# ├── Chart.yaml         # Métadonnées du chart
# ├── values.yaml        # Valeurs par défaut
# ├── charts/            # Dépendances
# └── templates/         # Templates Kubernetes
#     ├── deployment.yaml
#     ├── service.yaml
#     ├── ingress.yaml
#     ├── _helpers.tpl   # Fonctions réutilisables
#     └── NOTES.txt      # Affiché après install

Chart.yaml

apiVersion: v2
name: my-app
description: Mon application
type: application
version: 0.1.0        # Version du chart
appVersion: "1.0.0"   # Version de l'application packagée

dependencies:
  - name: postgresql
    version: "13.x.x"
    repository: https://charts.bitnami.com/bitnami
    condition: postgresql.enabled
helm dependency update my-app   # Télécharger les dépendances

Templates et valeurs

# values.yaml
replicaCount: 2
image:
  repository: ghcr.io/org/my-app
  tag: "1.0.0"
  pullPolicy: IfNotPresent
service:
  type: ClusterIP
  port: 80
ingress:
  enabled: false
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "my-app.fullname" . }}
  labels:
    {{- include "my-app.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "my-app.selectorLabels" . | nindent 6 }}
  template:
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}

Packaging et publication

# Linter un chart
helm lint my-app

# Packager
helm package my-app                        # Génère my-app-0.1.0.tgz

# Publier sur un registry OCI (ex: GHCR)
helm push my-app-0.1.0.tgz oci://ghcr.io/org/charts

# Installer depuis OCI
helm install my-release oci://ghcr.io/org/charts/my-app --version 0.1.0

Mise à jour de Helm

# Script officiel
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# Homebrew
brew upgrade helm

Troubleshooting

# Lister les releases dans un namespace
helm list -n database

# Voir le statut et les notes d'une release
helm status my-release -n database

# Voir les valeurs actuelles d'une release
helm get values my-release -n database
helm get values my-release -n database --all    # Toutes les valeurs (y compris défauts)

# Voir les manifests générés actuellement
helm get manifest my-release -n database

# Debug d'un template
helm template my-app . -f values.yaml --debug

# Release bloquée en pending : forcer le rollback
helm rollback my-release 0 -n database          # 0 = version précédente

Commandes utiles

helm list -A                                     # Toutes les releases dans tous les namespaces
helm repo list                                   # Dépôts configurés
helm show values bitnami/postgresql              # Valeurs disponibles d'un chart
helm show chart bitnami/postgresql               # Métadonnées d'un chart
helm diff upgrade my-release bitnami/postgresql  # Diff (plugin helm-diff requis)
helm plugin install https://github.com/databus23/helm-diff  # Installer plugin diff

Ressources

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic