Ce guide vous apprend à personnaliser vos déploiements Helm sans modifier les charts. Vous allez maîtriser les fichiers values.yaml pour gérer plusieurs environnements (dev, staging, prod), comprendre l’ordre de précédence des surcharges, et éviter les pièges courants de --set. En 20 minutes, vous saurez configurer n’importe quel chart de manière reproductible.
Prérequis
Section intitulée « Prérequis »- Helm installé et un repo configuré (voir module H1-02)
- Un cluster Kubernetes fonctionnel (minikube, kind, k3d)
- Avoir compris
helm install(voir module H1-03)
Comprendre le système de values
Section intitulée « Comprendre le système de values »Comment fonctionne la personnalisation ?
Section intitulée « Comment fonctionne la personnalisation ? »Chaque chart Helm contient un fichier values.yaml avec des valeurs par défaut. Quand vous installez un chart, Helm fusionne vos surcharges avec ces valeurs par défaut, puis injecte le résultat dans les templates pour générer les manifests Kubernetes.
Voir les values par défaut d’un chart
Section intitulée « Voir les values par défaut d’un chart »Avant de surcharger quoi que ce soit, consultez les valeurs disponibles :
helm show values podinfo/podinfoRésultat (extrait) :
# Default values for podinfo.
replicaCount: 1logLevel: info
image: repository: ghcr.io/stefanprodan/podinfo tag: 6.10.0 pullPolicy: IfNotPresent
ui: color: "#34577c" message: ""
service: enabled: true type: ClusterIP httpPort: 9898
resources: limits: requests: cpu: 1m memory: 16MiCe que vous devez repérer :
| Élément | Signification |
|---|---|
| Structure hiérarchique | ui.color signifie ui: → color: |
Valeurs vides ("", {}, []) | À compléter si besoin |
| Valeurs commentées | Options disponibles mais désactivées |
| Types de données | Nombres (1), strings ("info"), booléens (true), objets, listes |
Surcharger avec —set (rapide mais limité)
Section intitulée « Surcharger avec —set (rapide mais limité) »L’option --set permet de modifier une valeur directement en ligne de commande :
helm install demo podinfo/podinfo \ --namespace helm-demo \ --create-namespace \ --set replicaCount=2 \ --set ui.message="Hello DevOps"Résultat :
NAME: demoLAST DEPLOYED: Sun Feb 1 18:10:59 2026NAMESPACE: helm-demoSTATUS: deployedREVISION: 1Vérifier les values utilisées
Section intitulée « Vérifier les values utilisées »La commande helm get values montre uniquement les surcharges (pas les valeurs par défaut) :
helm get values demo -n helm-demoRésultat :
USER-SUPPLIED VALUES:replicaCount: 2ui: message: Hello DevOpsPour voir toutes les values (défaut + surcharges fusionnées) :
helm get values demo -n helm-demo --allRésultat (extrait) :
COMPUTED VALUES:image: pullPolicy: IfNotPresent repository: ghcr.io/stefanprodan/podinfo tag: 6.10.0logLevel: inforeplicaCount: 2 # ← Votre surchargeui: color: '#34577c' # ← Valeur par défaut conservée message: Hello DevOps # ← Votre surchargeLecture du résultat :
| Section | Contenu |
|---|---|
USER-SUPPLIED VALUES | Uniquement vos surcharges |
COMPUTED VALUES | Fusion complète (défaut + surcharges) |
Syntaxe —set pour différents types
Section intitulée « Syntaxe —set pour différents types »| Type | Syntaxe | Exemple |
|---|---|---|
| Valeur simple | --set key=value | --set replicaCount=3 |
| Valeur imbriquée | --set parent.child=value | --set ui.color="#ff0000" |
| Liste | --set key[0]=val1,key[1]=val2 | --set backends[0]=http://a:80 |
| Objet dans liste | --set list[0].key=value | --set tolerations[0].key=node |
Exemple avec une liste (tolerations) :
helm template test podinfo/podinfo \ --set "tolerations[0].key=node-role.kubernetes.io/master" \ --set "tolerations[0].effect=NoSchedule"Génère :
tolerations: - effect: NoSchedule key: node-role.kubernetes.io/master—set-string : forcer le type string
Section intitulée « —set-string : forcer le type string »Par défaut, --set interprète les valeurs :
123→ nombretrue→ booléennull→ null
Si vous avez besoin d’une string littérale, utilisez --set-string :
# ❌ --set interprète "123" comme un nombrehelm template test podinfo/podinfo --set image.tag=123
# ✅ --set-string force la string "123"helm template test podinfo/podinfo --set-string image.tag="123"—set-json : structures complexes
Section intitulée « —set-json : structures complexes »Pour injecter des objets JSON complets en une seule option :
helm template test podinfo/podinfo \ --set-json 'resources={"limits":{"cpu":"500m","memory":"256Mi"},"requests":{"cpu":"100m","memory":"128Mi"}}'Génère :
resources: limits: cpu: 500m memory: 256Mi requests: cpu: 100m memory: 128MiSurcharger avec -f (fichier values)
Section intitulée « Surcharger avec -f (fichier values) »Pour des configurations plus complexes ou réutilisables, créez un fichier YAML :
# Configuration pour environnement de développementreplicaCount: 1
ui: color: "#17a2b8" # Bleu cyan pour identifier dev message: "🔧 Environnement DEV"
resources: limits: cpu: 100m memory: 64Mi requests: cpu: 10m memory: 32Mi
logLevel: debugUtilisez-le avec -f (ou --values) :
helm install demo-dev podinfo/podinfo \ --namespace helm-demo \ --create-namespace \ -f values-dev.yamlVérifier les values appliquées
Section intitulée « Vérifier les values appliquées »helm get values demo-dev -n helm-demoRésultat :
USER-SUPPLIED VALUES:logLevel: debugreplicaCount: 1resources: limits: cpu: 100m memory: 64Mi requests: cpu: 10m memory: 32Miui: color: '#17a2b8' message: "🔧 Environnement DEV"Gérer plusieurs environnements
Section intitulée « Gérer plusieurs environnements »Stratégie de fichiers par environnement
Section intitulée « Stratégie de fichiers par environnement »Créez un fichier values par environnement :
Répertoirehelm-config/
- values-base.yaml Configuration commune
- values-dev.yaml Surcharges développement
- values-staging.yaml
- values-prod.yaml Surcharges production
values-base.yaml (configuration commune) :
image: repository: ghcr.io/stefanprodan/podinfo pullPolicy: IfNotPresent
service: type: ClusterIP httpPort: 9898
probes: readiness: initialDelaySeconds: 1 liveness: initialDelaySeconds: 1values-prod.yaml (surcharges production) :
replicaCount: 3
ui: color: "#28a745" # Vert pour identifier prod message: "🚀 Production"
resources: limits: cpu: 500m memory: 256Mi requests: cpu: 100m memory: 128Mi
logLevel: warnCombiner plusieurs fichiers -f
Section intitulée « Combiner plusieurs fichiers -f »Vous pouvez passer plusieurs fichiers -f. Helm les fusionne dans l’ordre :
helm install myapp-prod podinfo/podinfo \ -n production \ -f values-base.yaml \ -f values-prod.yamlRègle de fusion : les valeurs du dernier fichier gagnent.
# Démonstration de l'ordre de précédence# values-a.yaml contient replicaCount: 2# values-b.yaml contient replicaCount: 5
# Fichier A puis B → replicaCount = 5helm template test podinfo/podinfo -f values-a.yaml -f values-b.yaml
# Fichier B puis A → replicaCount = 2helm template test podinfo/podinfo -f values-b.yaml -f values-a.yamlOrdre de précédence complet
Section intitulée « Ordre de précédence complet »Helm applique les values dans cet ordre (du moins au plus prioritaire) :
1. values.yaml du chart (défaut) ↓2. Fichiers -f dans l'ordre (le dernier gagne) ↓3. --set / --set-string / --set-json (plus prioritaire)Exemple concret :
# Le chart a replicaCount: 1 par défaut# values-dev.yaml a replicaCount: 2# --set définit replicaCount=5
helm install demo podinfo/podinfo \ -f values-dev.yaml \ --set replicaCount=5
# Résultat : replicaCount = 5 (--set gagne)Comportement lors des upgrades
Section intitulée « Comportement lors des upgrades »—reuse-values : conserver les values existantes
Section intitulée « —reuse-values : conserver les values existantes »Par défaut, helm upgrade ne conserve pas les anciennes values. Pour les garder :
# Installation initiale avec plusieurs valueshelm install demo podinfo/podinfo -n helm-demo \ -f values-dev.yaml
# Upgrade en conservant les anciennes values + ajout d'une nouvellehelm upgrade demo podinfo/podinfo -n helm-demo \ --reuse-values \ --set replicaCount=3Avant upgrade :
logLevel: debugreplicaCount: 1ui: color: '#17a2b8'Après upgrade avec —reuse-values :
logLevel: debug # ← ConservéreplicaCount: 3 # ← Modifié par --setui: color: '#17a2b8' # ← Conservé—reset-values : repartir de zéro
Section intitulée « —reset-values : repartir de zéro »Pour ignorer les anciennes values et repartir des valeurs par défaut :
helm upgrade demo podinfo/podinfo -n helm-demo \ --reset-values \ --set ui.message="Fresh start"Après upgrade avec —reset-values :
ui: message: Fresh start # ← Seule surcharge, tout le reste = défautVisualiser sans déployer : helm template
Section intitulée « Visualiser sans déployer : helm template »Pour voir le manifeste généré sans l’installer :
helm template demo podinfo/podinfo \ --set replicaCount=3 \ --set "ui.message=Test Template"Résultat (extrait) :
---apiVersion: apps/v1kind: Deploymentmetadata: name: demo-podinfospec: replicas: 3 # ← Votre value appliquéeC’est idéal pour :
- Debugger une configuration avant déploiement
- Vérifier ce qui sera créé
- Générer des manifests pour GitOps (ArgoCD, Flux)
Lab A4 : Configuration multi-environnements
Section intitulée « Lab A4 : Configuration multi-environnements »Objectif : Créer et tester une configuration multi-environnements avec fichiers values.
-
Créer le namespace et les fichiers values
Fenêtre de terminal kubectl create namespace helm-labCréez
values-base.yaml:image:repository: ghcr.io/stefanprodan/podinfopullPolicy: IfNotPresentservice:type: ClusterIPhttpPort: 9898Créez
values-dev.yaml:replicaCount: 1ui:color: "#17a2b8"message: "DEV"logLevel: debugresources:limits:cpu: 100mmemory: 64MiCréez
values-prod.yaml:replicaCount: 3ui:color: "#28a745"message: "PROD"logLevel: warnresources:limits:cpu: 500mmemory: 256Mi -
Déployer l’environnement dev
Fenêtre de terminal helm install app-dev podinfo/podinfo -n helm-lab \-f values-base.yaml \-f values-dev.yaml -
Vérifier les values et les pods
Fenêtre de terminal helm get values app-dev -n helm-labkubectl get pods -n helm-labAttendu : 1 pod (replicaCount: 1)
-
Tester un upgrade avec —reuse-values
Fenêtre de terminal helm upgrade app-dev podinfo/podinfo -n helm-lab \--reuse-values \--set ui.message="DEV - Updated"helm get values app-dev -n helm-labVérifiez que
logLevel: debugest toujours présent. -
Tester la précédence fichier vs —set
Fenêtre de terminal helm upgrade app-dev podinfo/podinfo -n helm-lab \-f values-base.yaml \-f values-dev.yaml \--set replicaCount=5kubectl get pods -n helm-labAttendu : 5 pods (—set surcharge le fichier)
-
Nettoyer
Fenêtre de terminal helm uninstall app-dev -n helm-labkubectl delete namespace helm-lab
Résultat attendu : Vous maîtrisez la gestion des values multi-environnements et l’ordre de précédence.
Bonnes pratiques
Section intitulée « Bonnes pratiques »Structure de fichiers recommandée
Section intitulée « Structure de fichiers recommandée »Répertoirecharts/
Répertoiremyapp/
- Chart.yaml
- values.yaml Défauts sensés
Répertoirevalues/ Surcharges par environnement
- dev.yaml
- staging.yaml
- prod.yaml
Conventions de nommage
Section intitulée « Conventions de nommage »| Convention | Exemple | Usage |
|---|---|---|
values-<env>.yaml | values-prod.yaml | Fichier par environnement |
values-<feature>.yaml | values-monitoring.yaml | Fichier par fonctionnalité |
values.override.yaml | Surcharges locales (gitignored) |
Checklist values production
Section intitulée « Checklist values production »- Fichiers versionnés : toutes les values sont dans Git
- Pas de —set en CI/CD : uniquement des fichiers
-f - Valeurs sensibles : externalisées (Secrets, Vault)
- Resources définies : limits et requests explicites
- Replicas adaptés : >= 2 en prod pour la haute disponibilité
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
| Value non appliquée | Typo dans le chemin (ui.Color vs ui.color) | Vérifier avec helm show values |
| Nombre interprété comme string | Mauvais type attendu par le template | Utiliser --set sans quotes ou --set-json |
| Values perdues après upgrade | Pas de --reuse-values ni -f | Toujours utiliser -f ou --reuse-values |
| Erreur de parsing YAML | Indentation incorrecte | Valider avec yamllint |
Error: values don't meet the spec | Schema validation du chart | Vérifier le schéma dans values.schema.json |
Investiguer les values d’une release
Section intitulée « Investiguer les values d’une release »# Values fournies par l'utilisateurhelm get values myrelease -n mynamespace
# Toutes les values (fusionnées)helm get values myrelease -n mynamespace --all
# Manifests généréshelm get manifest myrelease -n mynamespaceÀ retenir
Section intitulée « À retenir »- values.yaml = valeurs par défaut du chart. Consultez-le avec
helm show values. - -f fichier.yaml = surcharges via fichier. Versionnez-les dans Git.
- —set = surcharges CLI ponctuelles. Le plus prioritaire, mais moins traçable.
- Ordre de précédence : défaut < fichiers
-f(dans l’ordre) <--set. - —reuse-values conserve les anciennes values lors d’un upgrade. Sans lui, elles sont perdues.
- —set-string force une valeur en string (utile pour les tags d’image numériques).
- helm template génère les manifests sans déployer — idéal pour le debug.