Aller au contenu principal

Introduction à Helm


1 - Qu'est-ce que Helm ?

Helm est le gestionnaire de packages officiel pour Kubernetes. Il permet de définir, installer et mettre à jour des applications Kubernetes complexes de manière reproductible.

Analogie

ÉcosystèmePackage Manager
Linux (Debian)apt
Linux (RedHat)yum/dnf
macOSHomebrew
Node.jsnpm
Pythonpip
KubernetesHelm

2 - Pourquoi utiliser Helm ?

Le problème sans Helm

Déployer une application sur Kubernetes nécessite souvent plusieurs manifests YAML :

mon-application/
├── deployment.yaml
├── service.yaml
├── configmap.yaml
├── secret.yaml
├── ingress.yaml
├── pvc.yaml
├── serviceaccount.yaml
├── role.yaml
└── rolebinding.yaml

Problèmes rencontrés :

  • Duplication de code entre environnements
  • Gestion manuelle des versions
  • Difficile à partager et réutiliser
  • Pas de mécanisme de rollback natif

La solution avec Helm

Avantages de Helm :

  • 📦 Packaging : Tout dans un seul package (chart)
  • 🔧 Configuration : Values pour personnaliser
  • 📜 Versioning : Historique des releases
  • Rollback : Retour facile à une version précédente
  • 🔄 Reproductibilité : Même chart = même résultat
  • 🤝 Partage : Repositories de charts

3 - Concepts de base

3.1 Chart

Un Chart est un package Helm contenant tous les fichiers nécessaires pour déployer une application.

mon-chart/
├── Chart.yaml # Métadonnées du chart
├── values.yaml # Valeurs par défaut
├── templates/ # Templates Kubernetes
│ ├── deployment.yaml
│ ├── service.yaml
│ └── _helpers.tpl
├── charts/ # Charts dépendants
└── README.md

3.2 Release

Une Release est une instance d'un chart déployée sur un cluster.

# Installer un chart crée une release
helm install mon-app ./mon-chart

# Plusieurs releases du même chart
helm install prod-app ./mon-chart --namespace production
helm install staging-app ./mon-chart --namespace staging

3.3 Repository

Un Repository est un serveur HTTP où les charts sont stockés et partagés.

# Ajouter un repository
helm repo add bitnami https://charts.bitnami.com/bitnami

# Lister les repositories
helm repo list

# Rechercher des charts
helm search repo nginx

3.4 Values

Les Values sont les paramètres de configuration d'un chart.

# values.yaml
replicaCount: 3
image:
repository: nginx
tag: "1.25"
service:
type: LoadBalancer
port: 80
# Surcharger les values
helm install mon-app ./mon-chart --set replicaCount=5
helm install mon-app ./mon-chart -f production-values.yaml

4 - Helm 3 vs Helm 2

Évolution majeure

AspectHelm 2Helm 3
ArchitectureClient + Tiller (serveur)Client uniquement
SécuritéProblèmes RBAC avec TillerUtilise les credentials kubectl
Stockage releasesConfigMaps (par Tiller)Secrets (namespace release)
CRDsGestion limitéeSupport natif
3-way mergeNonOui

3-way merge

Helm 3 compare trois états lors d'un upgrade :

  1. État actuel dans le cluster
  2. État de la release précédente
  3. Nouvel état souhaité

Cela permet de préserver les modifications manuelles quand c'est approprié.


5 - Écosystème Helm

5.1 Artifact Hub

Artifact Hub est le registre public officiel pour trouver des charts Helm.

5.2 Repositories populaires

RepositoryURLSpécialité
Bitnamicharts.bitnami.com/bitnamiApplications générales
Prometheusprometheus-community.github.io/helm-chartsMonitoring
Grafanagrafana.github.io/helm-chartsDashboards
Jetstackcharts.jetstack.iocert-manager
Ingress NGINXkubernetes.github.io/ingress-nginxIngress

5.3 Outils complémentaires

OutilDescription
HelmfileDéploiement déclaratif de multiple charts
helm-diffPlugin pour voir les différences avant upgrade
helm-secretsPlugin pour gérer les secrets chiffrés
chart-testingTests et linting de charts

6 - Cas d'utilisation

6.1 Déployer des applications tierces

# Installer PostgreSQL
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-postgres bitnami/postgresql

# Installer Prometheus + Grafana
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install monitoring prometheus-community/kube-prometheus-stack

6.2 Standardiser les déploiements internes

# values-production.yaml
replicaCount: 5
resources:
limits:
cpu: 1000m
memory: 1Gi
ingress:
enabled: true
host: app.example.com

# values-staging.yaml
replicaCount: 2
resources:
limits:
cpu: 500m
memory: 512Mi
ingress:
enabled: true
host: app.staging.example.com

6.3 CI/CD et GitOps


7 - Workflow typique

# 1. Trouver un chart
helm search hub wordpress
helm search repo wordpress

# 2. Examiner le chart
helm show readme bitnami/wordpress
helm show values bitnami/wordpress > values.yaml

# 3. Personnaliser
vim values.yaml

# 4. Installer
helm install my-wordpress bitnami/wordpress -f values.yaml

# 5. Vérifier
helm list
kubectl get pods

# 6. Mettre à jour
helm upgrade my-wordpress bitnami/wordpress -f values.yaml

# 7. Rollback si nécessaire
helm rollback my-wordpress 1

# 8. Désinstaller
helm uninstall my-wordpress

Résumé

Dans ce chapitre, nous avons découvert :

  • Helm comme gestionnaire de packages Kubernetes
  • Les concepts clés : Charts, Releases, Repositories, Values
  • L'évolution de Helm 2 à Helm 3
  • L'écosystème Helm et les outils complémentaires
  • Les cas d'utilisation typiques

Prochaine étape

Dans le prochain chapitre, nous allons installer Helm et le configurer.

→ Chapitre suivant : Installation


← Retour à la table des matières