Passer au contenu principal

Production (Kubernetes)

Helm — gestion de paquets

Helm est le gestionnaire de paquets de Kubernetes. Un chart Helm est une collection de templates YAML paramétrables, versionnés, distribuables. Il simplifie le déploiement d'applications complexes (plusieurs Deployments, Services, ConfigMaps, CRDs...) en un seul artefact cohérent.

Concepts clés

  • Chart : package Helm (templates + valeurs par défaut + métadonnées)
  • Release : instance d'un chart déployée dans un cluster (un chart peut être déployé plusieurs fois avec des noms différents)
  • Values : paramètres passés au chart pour personnaliser le déploiement
  • Repository : dépôt de charts (Artifact Hub, Bitnami, charts officiels...)

Installation et gestion

# Ajouter un repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

# Chercher un chart
helm search repo prometheus
helm search hub cert-manager   # Sur Artifact Hub

# Installer
helm install mon-nginx ingress-nginx/ingress-nginx   --namespace ingress-nginx --create-namespace   --version 4.11.3

# Voir les valeurs par défaut
helm show values ingress-nginx/ingress-nginx

# Installer avec overrides
helm install prometheus prometheus-community/kube-prometheus-stack   -f custom-values.yaml   --set grafana.adminPassword=secret123

# Lister les releases
helm list -A

# Statut d'une release
helm status mon-nginx

# Mettre à jour
helm upgrade mon-nginx ingress-nginx/ingress-nginx --version 4.12.0 -f values.yaml

# Rollback
helm rollback mon-nginx 1    # Revenir à la révision 1

# Désinstaller
helm uninstall mon-nginx -n ingress-nginx

Créer un chart

helm create myapp   # Génère la structure de base

Structure d'un chart :

myapp/
├── Chart.yaml        # Métadonnées (nom, version, description)
├── values.yaml       # Valeurs par défaut
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   ├── _helpers.tpl  # Fonctions Go template partagées
│   └── NOTES.txt     # Affiché après helm install
└── charts/           # Dépendances (sous-charts)
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "myapp.fullname" . }}
  labels:
    {{- include "myapp.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "myapp.selectorLabels" . | nindent 6 }}
  template:
    spec:
      containers:
      - name: {{ .Chart.Name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        resources:
          {{- toYaml .Values.resources | nindent 12 }}
# Tester le rendu avant déploiement
helm template myapp ./myapp -f values.yaml
helm lint ./myapp
helm install myapp ./myapp --dry-run --debug

Helmfile

Helmfile orchestre plusieurs releases Helm via un fichier déclaratif. Il permet de gérer l'état complet des déploiements d'un cluster (applications + infrastructure) de façon reproductible et versionnable.

Sources