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ème | Package Manager |
|---|---|
| Linux (Debian) | apt |
| Linux (RedHat) | yum/dnf |
| macOS | Homebrew |
| Node.js | npm |
| Python | pip |
| Kubernetes | Helm |
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
| Aspect | Helm 2 | Helm 3 |
|---|---|---|
| Architecture | Client + Tiller (serveur) | Client uniquement |
| Sécurité | Problèmes RBAC avec Tiller | Utilise les credentials kubectl |
| Stockage releases | ConfigMaps (par Tiller) | Secrets (namespace release) |
| CRDs | Gestion limitée | Support natif |
| 3-way merge | Non | Oui |
3-way merge
Helm 3 compare trois états lors d'un upgrade :
- État actuel dans le cluster
- État de la release précédente
- 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
| Repository | URL | Spécialité |
|---|---|---|
| Bitnami | charts.bitnami.com/bitnami | Applications générales |
| Prometheus | prometheus-community.github.io/helm-charts | Monitoring |
| Grafana | grafana.github.io/helm-charts | Dashboards |
| Jetstack | charts.jetstack.io | cert-manager |
| Ingress NGINX | kubernetes.github.io/ingress-nginx | Ingress |
5.3 Outils complémentaires
| Outil | Description |
|---|---|
| Helmfile | Déploiement déclaratif de multiple charts |
| helm-diff | Plugin pour voir les différences avant upgrade |
| helm-secrets | Plugin pour gérer les secrets chiffrés |
| chart-testing | Tests 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