Aller au contenu

Content slides

Introduction à Helm

Helm est le gestionnaire de paquets (Package Manager) et le moteur de templating de référence pour Kubernetes

Avantages clés - Simplification : Déploiement d'applications complexes en une seule commande - Templating : Éviter la duplication de YAML (principe DRY) - Multi-environnement : Gestion facile des configurations (dev, staging, prod) - Stabilité : Historique des versions et capacité de Rollback immédiat


Concepts fondamentaux

  • Chart : Package contenant tous les fichiers de ressources (YAML) et de logique (Templates)
  • Values : Fichier de configuration permettant de personnaliser le comportement du Chart
  • Release : Une instance spécifique d'un Chart déployée dans le cluster
  • Repository : Serveur hébergeant des Charts (ex : Artifact Hub)

Commandes de survie

# Ajouter un dépôt et mettre à jour
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# Simuler et débugger le rendu (Indispensable)
helm template ./my-chart
helm install --dry-run --debug my-release ./my-chart

# Gérer le cycle de vie
helm list
helm upgrade my-release ./my-chart -f values-prod.yaml
helm rollback my-release 1
helm uninstall my-release

Anatomie d'un Chart

my-chart/
  Chart.yaml        # Métadonnées (nom, version, description)
  values.yaml       # Valeurs par défaut des variables
  charts/           # Dépendances (autres charts)
  templates/        # Moteur de logique YAML
  │   ├── deployment.yaml
  │   ├── service.yaml
  │   └── _helpers.tpl  # Fonctions réutilisables

La puissance du Templating

Helm utilise le langage de template Go pour injecter de la logique dans le YAML :

  • Variables : {{ .Values.replicaCount }}
  • Conditions : {{ if .Values.ingress.enabled }}
  • Boucles : {{ range .Values.env }}
  • Pipelines : {{ .Values.image | lower | quote }}

Cela permet de créer des manifests dynamiques et réutilisables


Exemple : Deployment.yaml

Le template utilise les valeurs du fichier values.yaml :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}
    spec:
      containers:
      - name: nginx
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        ports:
        - containerPort: 80

Conclusion

  • Helm est l'outil indispensable pour gérer le "Mur de YAML" de Kubernetes
  • Prioriser l'utilisation de Values pour séparer le code de la configuration
  • Toujours tester ses changements avec helm template ou --dry-run
  • Maîtriser le Rollback pour garantir une haute disponibilité en production

☕️ Si tu souhaites soutenir mon travail, tu peux m'offrir un café ici.