☸️ Certification Helm : Examen Final (30 Questions)
Instructions
Pour chaque question, réfléchissez à la réponse avant de cliquer sur “Correction & Explication”. Chaque erreur est expliquée pour approfondir la logique Kubernetes/Helm.
📂 Section 1 : Architecture & Structure
Q1 : Quel est le rôle principal du fichier Chart.yaml ?
-
Définir les variables utilisateur.
-
Stocker les métadonnées et la version du Chart.
-
Contenir les fonctions Go Template.
Correction & Explication
Réponse : 2
Justesse : C’est la carte d’identité du package (nom, version, description).
Pourquoi la 1 est fausse : Le paramétrage utilisateur se fait exclusivement dans le fichier
values.yaml.Pourquoi la 3 est fausse : La logique et les fonctions réutilisables sont stockées dans le fichier
_helpers.tpldu dossiertemplates/.
Q2 : Où doit obligatoirement se trouver le fichier _helpers.tpl ?
-
À la racine du Chart.
-
Dans le dossier
templates/. -
Dans le dossier
charts/.
Correction & Explication
Réponse : 2
Justesse : Helm scanne le dossier
templates/pour générer les manifests ; les helpers doivent y être pour être chargés par le moteur.Pourquoi la 1 est fausse : Si placé à la racine, le moteur de rendu Helm ignorera le fichier et tes templates nommés (définis par
{{ define ... }}) seront introuvables.Pourquoi la 3 est fausse : Le dossier
charts/est strictement réservé aux dépendances (sous-charts) compressées ou décompressées.
Q3 : Que signifie l’underscore (_) au début du fichier _helpers.tpl ?
-
Il indique à Helm de ne pas déployer ce fichier comme une ressource K8s.
-
C’est un fichier caché pour le système.
-
Il sert à indiquer que le fichier est crypté.
Correction & Explication
Réponse : 1
Justesse : L’underscore indique au moteur Helm : “Lis ce fichier pour charger les fonctions, mais ne tente pas de transformer son contenu en objet Kubernetes”.
Pourquoi la 2 est fausse : Un fichier commençant par
_n’est pas un fichier caché au sens OS (contrairement aux fichiers commençant par un point.).Pourquoi la 3 est fausse : Helm n’utilise pas de convention de nommage pour le chiffrement. Pour les données sensibles, on utilise des outils comme Helm Secrets ou Sealed Secrets.
Q4 : À quoi sert le dossier charts/ à la racine ?
-
À stocker les images Docker.
-
À stocker les dépendances (sous-charts).
-
À archiver les anciennes versions.
Correction & Explication
Réponse : 2
Justesse : Il contient les autres Charts dont ton projet dépend pour fonctionner.
Pourquoi la 1 est fausse : Helm gère les manifests YAML. Les images Docker résident dans un registre d’images (comme Docker Hub ou ECR) et sont simplement référencées par leur URL dans le YAML.
Pourquoi la 3 est fausse : Helm gère l’historique des versions via des “Releases” stockées dans le cluster K8s, pas via un dossier d’archive local.
🔧 Section 2 : Fonctions & Logique Go Template
Q5 : Quelle fonction permet de définir une valeur de secours si une variable est absente ?
-
fallback -
default -
required
Correction & Explication
Réponse : 2
Justesse :
{{ .Values.cle | default "valeur" }}permet d’éviter les erreurs si la clé n’existe pas.Pourquoi la 1 est fausse : La fonction
fallbackn’existe pas dans le langage Go Template ni dans la bibliothèque Sprig utilisée par Helm.Pourquoi la 3 est fausse :
requiredfait l’inverse : il stoppe immédiatement le rendu et affiche une erreur si la valeur est absente.
Q6 : Quelle fonction est indispensable pour transformer une donnée en format Secret Kubernetes ?
-
quote -
b64enc -
toYaml
Correction & Explication
Réponse : 2
Justesse : Kubernetes exige que les données des
Secretssoient encodées en base64.Pourquoi la 1 est fausse :
quotese contente d’ajouter des guillemets" "autour d’une valeur pour forcer le type string, mais ne change pas le contenu.Pourquoi la 3 est fausse :
toYamlconvertit une structure de données (liste ou dictionnaire) en bloc YAML, mais laisse les valeurs en clair.
Q7 : Quelle est la syntaxe correcte pour vérifier si .Values.env est égal à "prod" ?
-
{{ if eq .Values.env "prod" }} -
{{ if .Values.env == "prod" }} -
{{ if equals .Values.env "prod" }}
Correction & Explication
Réponse : 1
Justesse : Helm utilise la notation préfixée (l’opérateur vient avant les valeurs).
Pourquoi la 2 est fausse : L’opérateur binaire
==n’est pas supporté par les Go Templates. On utilise la fonctioneq.Pourquoi la 3 est fausse : Le mot-clé exact est
eq,equalsn’est pas une fonction reconnue.
Q8 : Dans une boucle range, que représente le symbole $ ?
-
La fin de la boucle.
-
Le contexte racine (global).
-
Une variable temporaire.
Correction & Explication
Réponse : 2
Justesse : Dans un
range, le point.change de valeur pour devenir l’élément courant. Le$permet de revenir à la racine pour accéder à.Valuesou.Release.Pourquoi la 1 est fausse : La boucle se termine par le mot-clé
{{ end }}.Pourquoi la 3 est fausse : Bien que l’on puisse déclarer des variables personnalisées (ex:
$maVar), le symbole$seul est une référence globale prédéfinie.
Q9 : Comment forcer un champ à être une chaîne de caractères (pour éviter que 01 devienne 1) ?
-
string() -
quote -
asString
Correction & Explication
Réponse : 2
Justesse :
quoteajoute des guillemets, ce qui empêche le parser YAML de transformer un nombre commençant par 0 en base octale ou en entier.Pourquoi la 1/3 sont fausses : Ce ne sont pas des fonctions intégrées à Helm. Helm s’appuie sur les fonctions de la bibliothèque Go Sprig.
Q10 : Quelle fonction permet d’insérer un bloc YAML avec le bon décalage d’espaces ?
-
indent -
nindent -
align
Correction & Explication
Réponse : 2
Justesse :
nindentajoute une nouvelle ligne (n) avant d’appliquer le décalage, ce qui est crucial pour la structure YAML.Pourquoi la 1 est fausse :
indentapplique le décalage mais ne crée pas de nouvelle ligne. Cela conduit souvent à des erreurs d’alignement sur la première ligne du bloc injecté.Pourquoi la 3 est fausse : La fonction
alignn’existe pas dans le moteur de template Helm.
🚀 Section 3 : Commandes & Gestion des Releases
Q11 : Quelle commande permet de simuler un déploiement et de voir le YAML généré ?
-
helm install --dry-run --debug -
helm lint -
helm preview
Correction & Explication
Réponse : 1
Justesse :
--dry-runsimule l’installation et--debugaffiche le YAML final envoyé au cluster.Pourquoi la 2 est fausse :
helm lintvérifie la syntaxe de tes fichiers pour s’assurer qu’ils sont bien formés, mais il ne montre pas le rendu final fusionné avec tesvalues.Pourquoi la 3 est fausse :
helm previewn’est pas une commande standard de la CLI Helm.
Q12 : Comment appelle-t-on une instance d’un Chart installée sur un cluster ?
-
Un Chart déployé.
-
Une Release.
-
Un Snapshot.
Correction & Explication
Réponse : 2
Justesse : Une Release est une version spécifique d’un Chart tournant dans un namespace.
Pourquoi la 1 est fausse : C’est une description textuelle, mais pas le terme technique utilisé dans la CLI (ex:
helm listaffiche des “Releases”).Pourquoi la 3 est fausse : Un Snapshot est une capture d’état (souvent pour des disques) ; Helm n’utilise pas ce terme pour ses déploiements.
Q13 : À quoi sert le plugin helm-diff ?
-
À comparer deux fichiers localement.
-
À voir les changements réels sur le cluster avant un
upgrade. -
À corriger les erreurs.
Correction & Explication
Réponse : 2
Justesse : Il compare l’état actuel du cluster avec ce que le nouveau rendu propose (très utile en CI/CD).
Pourquoi la 1 est fausse : Pour comparer des fichiers locaux, on utilise la commande système
diffouvimdiff. Le plugin Helm interroge l’API Kubernetes.Pourquoi la 3 est fausse : Le plugin ne modifie pas le code, il se contente d’afficher les différences.
Q14 : Quelle commande annule un déploiement et revient à la version précédente ?
-
helm undo -
helm rollback -
helm back
Correction & Explication
Réponse : 2
Justesse :
helm rollback <nom-release> <revision>permet de revenir en arrière instantanément.Pourquoi la 1/3 sont fausses : Ces commandes n’existent pas dans Helm. Le terme standard Kubernetes/Helm pour le retour arrière est “Rollback”.
Q15 : Que fait helm dependency update ?
-
Met à jour la version de Helm.
-
Télécharge les charts listés dans
dependencies. -
Met à jour Kubernetes.
Correction & Explication
Réponse : 2
Justesse : Elle lit ton fichier
Chart.yamlet télécharge les sous-charts nécessaires dans le dossiercharts/.Pourquoi la 1 est fausse : Pour mettre à jour Helm, il faut télécharger le nouveau binaire sur le site officiel ou via un gestionnaire de paquets (brew, apt).
Pourquoi la 3 est fausse : Helm n’a aucun pouvoir pour mettre à jour la version du cluster Kubernetes lui-même.
🧪 Section 4 : Logique Avancée & Types de Charts
Q16 : Qu’est-ce qu’un “Library Chart” ?
-
Un chart qui installe une base de données.
-
Un chart qui ne contient que des helpers réutilisables.
-
Un chart qui contient de la documentation.
Correction & Explication
Réponse : 2
Justesse : Défini par
type: library, il sert de boîte à outils pour d’autres Charts mais ne crée aucune ressource K8s (Pod, Service) par lui-même.Pourquoi la 1 est fausse : Un Chart installant une ressource est un “Application Chart”.
Pourquoi la 3 est fausse : La documentation est gérée par le fichier
README.mdprésent dans n’importe quel type de Chart.
Q17 : Quel est l’intérêt d’un “Umbrella Chart” ?
-
Protéger le serveur contre la pluie (blague).
-
Déployer plusieurs micro-services via un seul point d’entrée.
-
Augmenter la sécurité du cluster.
Correction & Explication
Réponse : 2
Justesse : C’est un Chart parent qui appelle plusieurs sous-charts pour déployer une stack complète (ex: Front + Back + DB).
Pourquoi la 3 est fausse : L’Umbrella Chart est une structure d’organisation, il n’apporte pas de fonctionnalités de sécurité supplémentaires par rapport à un Chart classique.
Q18 : Que se passe-t-il si j’écris {{ if "" }} ?
-
Le bloc est exécuté.
-
Le bloc est ignoré.
-
Erreur de syntaxe.
Correction & Explication
Réponse : 2
Justesse : En Go Template, une chaîne vide
""est considérée comme “Falsy” (faux). Le bloc ne sera donc pas rendu.Pourquoi la 1 est fausse : Seule une chaîne contenant au moins un caractère est “Truthy”.
Pourquoi la 3 est fausse : La syntaxe est correcte, c’est juste le résultat de l’évaluation qui est négatif.
Q19 : Quelle fonction arrête le rendu si une variable critique est absente ?
-
stop -
fail -
required
Correction & Explication
Réponse : 3
Justesse : Elle permet d’afficher un message personnalisé et de bloquer le déploiement si une donnée manque dans le
values.yaml.Pourquoi la 1 est fausse : La fonction
stopn’existe pas dans l’écosystème Helm.Pourquoi la 2 est fausse :
failexiste mais elle est utilisée pour forcer l’échec inconditionnel d’un template dans des cas logiques complexes, elle n’est pas spécifiquement conçue pour valider l’existence d’une variable comme le faitrequired.
Q20 : Comment passer plusieurs variables à un template nommé (helper) ?
-
Avec des virgules.
-
En utilisant la fonction
dict. -
On ne peut pas.
Correction & Explication
Réponse : 2
Justesse :
{{ include "mon-helper" (dict "cle1" .Val1 "cle2" .Val2) }}permet de passer plusieurs valeurs via un dictionnaire, car Helm n’accepte qu’un seul argument.Pourquoi la 1 est fausse : La syntaxe par virgule n’est pas supportée dans les appels de templates Helm.
Pourquoi la 3 est fausse : C’est tout à fait possible et même recommandé pour créer des helpers complexes.
🛡️ Section 5 : Sécurité & Bonnes Pratiques
Q21 : Où Helm stocke-t-il les informations de ses Releases par défaut ?
-
Dans un fichier sur votre PC.
-
Dans des Secrets Kubernetes au sein du cluster.
-
Dans une base SQL externe.
Correction & Explication
Réponse : 2
Justesse : Depuis Helm 3, les releases sont des
Secrets(ouConfigMaps) dans le namespace de l’application.Pourquoi la 1 est fausse : Cela empêcherait le travail collaboratif. Si tu changes de PC, tu n’aurais plus accès aux informations de tes déploiements.
Pourquoi la 3 est fausse : Helm 2 utilisait un composant appelé Tiller qui pouvait être configuré avec d’autres backends, mais Helm 3 a simplifié cela en utilisant nativement l’API K8s.
Q22 : Quelle est la limite DNS de caractères pour un nom de ressource K8s ?
-
32
-
63
-
256
Correction & Explication
Réponse : 2
Justesse : C’est une limite imposée par le standard DNS RFC 1123, car les noms de services K8s deviennent des noms de domaine.
Pourquoi la 1 est fausse : Trop restrictif pour les noms d’applications modernes.
Pourquoi la 3 est fausse : C’est la limite pour certains chemins de fichiers ou URLs, mais trop long pour le protocole DNS.
Q23 : À quoi sert le champ appVersion dans Chart.yaml ?
-
À définir la version du Chart Helm.
-
À définir la version du logiciel interne (ex: nginx 1.21).
-
À définir la version de Kubernetes compatible.
Correction & Explication
Réponse : 2
Justesse : Il permet de savoir quelle version de ton application (le code métier) est empaquetée.
Pourquoi la 1 est fausse : La version du package Helm lui-même est définie par le champ
version.Pourquoi la 3 est fausse : La compatibilité K8s est définie par le champ
kubeVersion.
Q24 : Que fait la fonction trimSuffix "-" .Name ?
-
Supprime tous les tirets du nom.
-
Supprime le tirets seulement s’il est à la fin du nom.
-
Ajoute un tiret à la fin.
Correction & Explication
Réponse : 2
Justesse : Utile pour nettoyer un nom généré qui pourrait se terminer accidentellement par un tiret (invalide en K8s).
Pourquoi la 1 est fausse : Pour supprimer tous les tirets, on utiliserait la fonction
replace.Pourquoi la 3 est fausse : Pour cela, on utiliserait
printfou la fonctionappend.
Q25 : Peut-on utiliser des fonctions mathématiques (add, sub) dans Helm ?
-
Oui, via les fonctions Sprig.
-
Non, Helm ne fait que du texte.
-
Seulement pour les réplicas.
Correction & Explication
Réponse : 1
Justesse : Helm intègre la bibliothèque Sprig qui offre des fonctions arithmétiques.
Pourquoi la 2 est fausse : Bien que Helm produise du texte, il peut calculer des valeurs (ex: augmenter la mémoire de 10%) avant de les écrire.
Pourquoi la 3 est fausse : Les calculs peuvent être utilisés n’importe où (limites de ressources, ports, etc.).
🏁 Section 6 : Questions de Synthèse
Q26 : Quel est le moteur de template utilisé par Helm ?
-
Jinja2
-
Go Templates
-
Mustache
Correction & Explication
Réponse : 2
Justesse : Helm est codé en langage Go, il utilise donc le package natif
text/template.Pourquoi la 1 est fausse : Jinja2 est utilisé par Ansible (Python).
Pourquoi la 3 est fausse : Mustache est un moteur de template “logic-less” utilisé principalement en Front-end.
Q27 : Que fait toYaml ?
-
Transforme une liste/dictionnaire en format YAML lisible.
-
Traduit du Python en YAML.
-
Vérifie si le YAML est valide.
Correction & Explication
Réponse : 1
Justesse : Très pratique pour copier-coller un bloc entier de ton
values.yamldirectement dans un manifest.Pourquoi la 2 est fausse : Helm ne communique pas avec Python.
Pourquoi la 3 est fausse : La validation est faite par
helm lint.
Q28 : Quel est le rôle de printf ?
-
Imprimer sur la console de debug.
-
Formater une chaîne de caractères complexe.
-
Envoyer des logs à Kubernetes.
Correction & Explication
Réponse : 2
Justesse : Permet de concaténer des chaînes et des variables (ex:
{{ printf "%s-%s" .Release.Name .Chart.Name }}).Pourquoi la 1 est fausse : Dans un template, tout ce qui est produit est écrit dans le fichier final, pas dans une console séparée.
Pourquoi la 3 est fausse : Helm ne gère pas l’envoi de logs applicatifs.
Q29 : Le fichier values.yaml est-il modifiable lors de l’installation ?
-
Non, il est figé dans le chart.
-
Oui, via le flag
-fou--set. -
Seulement par l’administrateur du cluster.
Correction & Explication
Réponse : 2
Justesse : C’est la force de Helm : surcharger les valeurs par défaut selon l’environnement (Dev, Prod).
Pourquoi la 1 est fausse : Si on ne pouvait pas le modifier, on perdrait tout l’intérêt du templating dynamique.
Pourquoi la 3 est fausse : Quiconque a le droit d’exécuter la commande Helm et possède les droits RBAC sur le cluster peut fournir ses propres valeurs.
Q30 : Quelle commande permet de voir l’historique d’une release ?
-
helm history [NOM] -
helm log -
helm list --all
Correction & Explication
Réponse : 1
Justesse : Affiche la liste des révisions, la date de déploiement et l’état de chaque mise à jour.
Pourquoi la 2 est fausse :
helm logn’existe pas. Pour voir les logs, on utilisekubectl logs.Pourquoi la 3 est fausse :
helm listmontre les releases actuellement installées, mais ne détaille pas l’historique des versions passées pour une release spécifique.
💡 Un dernier conseil pour Obsidian
Si tu veux un rendu encore plus visuel, tu peux installer le plugin “Obsidian Charts” ou simplement utiliser des blocs de code pour illustrer la structure des fichiers à côté de ce quiz.
Veux-tu que je fasse le même travail de correction détaillée pour ton quiz Git/Terraform ?