Bank 4 – Mise en ordre (Partie 1 : Fondations)¶
Instructions
Remettez les étapes dans le bon ordre chronologique ou logique.
Cliquez sur « Correction » pour vérifier.
Total : 10 exercices (2 faciles · 4 moyens · 4 difficiles)
Niveau Facile¶
Exercice 1 : Le cycle de vie d'un déploiement applicatif simple¶
Consigne : Remettez les étapes suivantes dans l'ordre logique pour déployer et exposer une application simple.
- [A] Créer un fichier manifeste YAML décrivant l'objet
Deploymentde l'application. - [B] Exécuter la commande
kubectl apply -f service.yamlpour rendre l'application accessible via un Service. - [C] Installer ou initialiser le cluster k3s et s'assurer que le fichier de configuration
~/.kube/configest actif. - [D] Appliquer le déploiement sur le cluster à l'aide de la commande
kubectl apply -f deployment.yaml.
Correction
C → A → D → B
On prépare d'abord le cluster, puis on rédige le manifeste de déploiement, on l'applique, et enfin on crée et applique le service réseau pour l'exposer.
Exercice 2 : Consultation de l'état d'un pod en erreur¶
Consigne : Ordonnisez les étapes qu'un administrateur doit suivre pour diagnostiquer un pod qui ne parvient pas à démarrer.
- [A] Consulter les journaux applicatifs du conteneur défaillant avec
kubectl logs <nom-pod>. - [B] Lister les pods du namespace courant avec
kubectl get podspour identifier celui en état d'échec (CrashLoopBackOffou autre). - [C] Analyser les événements système et la configuration détaillée du pod à l'aide de la commande
kubectl describe pod <nom-pod>. - [D] Corriger le manifeste YAML source et réappliquer la ressource corrigée.
Correction
B → C → A → D
On commence par lister les pods pour repérer l'anomalie, puis on utilise describe pour voir les événements récents, on lit les logs du conteneur pour identifier l'erreur exacte, et enfin on corrige le code.
Niveau Moyen¶
Exercice 3 : Le déroulement d'une mise à jour progressive (Rolling Update)¶
Consigne : Remettez dans l'ordre chronologique les étapes internes exécutées par Kubernetes lors d'un RollingUpdate d'un Deployment.
- [A] Le contrôleur crée de nouveaux pods basés sur la nouvelle version du modèle (
spec.template). - [B] Les anciens pods sont progressivement supprimés au fur et à mesure que les nouveaux pods deviennent sains, en respectant les paramètres
maxSurgeetmaxUnavailable. - [C] L'utilisateur modifie la version de l'image conteneur dans le manifeste YAML du Deployment et applique la modification.
- [D] Les nouveaux pods passent leurs sondes de préparation (
readinessProbe) avec succès et sont ajoutés aux endpoints du Service.
Correction
C → A → D → B
La modification initie le processus, le contrôleur génère les nouveaux pods, ceux-ci deviennent prêts via leurs sondes, et les anciens pods sont éliminés de manière fluide.
Exercice 4 : Le flux de résolution de nom DNS d'un Service interne¶
Consigne : Ordonnez les étapes de la résolution d'une requête réseau interne par un pod cherchant à joindre un service.
- [A] Le serveur CoreDNS intercepte la requête DNS et cherche l'enregistrement correspondant au nom canonique du service.
- [B] L'application du pod émet une requête de résolution de nom vers le serveur DNS du cluster (ex:
mon-service.mon-namespace.svc.cluster.local). - [C] CoreDNS renvoie l'adresse IP virtuelle (
ClusterIP) du service (ou les adresses IP directes s'il s'agit d'un service Headless). - [D] Le trafic réseau de la requête est acheminé vers le pod cible via l'interception du kube-proxy.
Correction
B → A → C → D
Le pod initie la requête textuelle, CoreDNS la traduit en IP de cluster, puis le réseau s'occupe de relayer le paquet vers l'application ciblée.
Exercice 5 : Le processus de planification (Scheduling) d'un nouveau Pod¶
Consigne : Remettez dans l'ordre les étapes de placement d'un pod nouvellement créé sur un nœud du cluster.
- [A] L'API Server enregistre le nouveau Pod dans la base de données de stockage avec l'état non planifié (
nodeName: ""). - [B] Le planificateur (
kube-scheduler) sélectionne le nœud optimal en fonction des contraintes, affinités et ressources disponibles. - [C] L'agent
kubeletdu nœud choisi détecte l'affectation, récupère les instructions et lance la création des conteneurs via le runtime. - [D] Le planificateur écrit le nom du nœud choisi dans l'objet Pod via l'API Server (opération de binding).
Correction
A → B → D → C
Le pod est créé sans nœud, le scheduler l'évalue et choisit la meilleure machine, inscrit son choix dans l'API, et le kubelet du nœud destinataire exécute l'ordre.
Exercice 6 : Le cycle de vie d'un Job Kubernetes¶
Consigne : Ordonnez les étapes d'exécution d'un objet Job destiné à effectuer une tâche de calcul ponctuelle.
- [A] Le pod associé au job démarre et exécute le script ou le binaire applicatif prévu.
- [B] L'utilisateur soumet le manifeste YAML définissant un objet de type
Job. - [C] Le pod s'arrête avec un code de sortie valant zéro (
Exit 0), indiquant le succès de la tâche. - [D] Le job passe à l'état complété (
Completed) et conserve le pod terminé dans l'historique selon la politique de rétention.
Correction
B → A → C → D
Le job est créé, le conteneur exécute son travail, s'arrête proprement une fois terminé, et le contrôleur enregistre le succès de l'exécution.
Niveau Difficile¶
Exercice 7 : Le pipeline interne de traitement d'une requête par l'API Server¶
Consigne : Remettez dans l'ordre les couches traversées par une requête kubectl entrante au sein de l'API Server.
- [A] Validation et mutation des données via les contrôleurs d'admission (
Admission Controllers). - [B] Authentification de l'utilisateur ou du compte de service émetteur de la requête.
- [C] Évaluation des autorisations via le système RBAC pour vérifier si l'entité a le droit d'effectuer l'action.
- [D] Enregistrement et persistance définitive de la ressource modifiée dans la base de données backend (etcd ou SQLite/kine).
Correction
B → C → A → D
L'API Server commence par identifier qui agit (Authentification), vérifie ce qu'il a le droit de faire (Autorisation RBAC), ajuste ou valide le manifeste via les plugins d'admission, et enfin stocke l'objet.
Exercice 8 : La séquence d'initialisation et de démarrage d'un nœud k3s¶
Consigne : Ordonnez les étapes chronologiques du lancement d'un nœud maître k3s.
- [A] Le binaire unique k3s démarre et initialise ses sous-composants intégrés (API server, controller manager, scheduler, kine/SQLite).
- [B] L'agent interne s'initialise et lance le démon
kubeletainsi que le proxy réseau. - [C] Le système de fichiers et les interfaces réseau de base (bridge/CNI Flannel) sont configurés sur le système d'exploitation hôte.
- [D] Le cluster est prêt à recevoir des requêtes et les conteneurs système (CoreDNS, Traefik) se déploient.
Correction
C → A → B → D
Le système hôte prépare le terrain, k3s lance son control-plane monobloc, puis l'agent s'active avec le CNI, permettant le déploiement des composants additionnels.
Exercice 9 : La configuration et l'application d'une règle CNI réseau pour un nouveau Pod¶
Consigne : Remettez dans l'ordre les actions réalisées par le système réseau lors de la création d'un pod.
- [A] Le kubelet invoque le plugin CNI configuré (ex. Flannel) lors de la création du sandbox réseau du pod.
- [B] Le plugin CNI alloue une adresse IP unique au pod depuis le sous-réseau du nœud.
- [C] Le plugin configure les interfaces virtuelles (
veth pair) et les règles de routage/tables du noyau pour permettre la communication. - [D] Le conteneur de l'application démarre et peut communiquer à travers l'interface réseau ainsi établie.
Correction
A → B → C → D
Le kubelet appelle le CNI, qui attribue l'IP, configure les interfaces de pont et les règles de routage, avant que le conteneur ne démarre avec son réseau opérationnel.
Exercice 10 : Le processus de restauration (Rollback) d'un déploiement défectueux¶
Consigne : Ordonnez les étapes d'exécution d'un retour en arrière (rollout undo) suite à une erreur applicative.
- [A] L'utilisateur exécute la commande
kubectl rollout undo deployment <nom>. - [B] L'API Server met à jour le Deployment en restaurant le modèle de pod (
spec.template) issu de la révision précédente stockée dans le ReplicaSet historique. - [C] Le contrôleur de déploiement exécute une mise à jour progressive (
rolling update) en basculant le trafic vers l'ancienne version stable. - [D] L'historique des révisions est mis à jour pour refléter l'annulation de la modification.
Correction
A → B → D → C
L'utilisateur déclenche l'ordre, l'API applique le template de la révision antérieure, l'historique s'actualise, et le contrôleur effectue le remplacement progressif des pods.