kube-quest

QCM Kubernetes 50 questions

Niveau : fondamentaux et administration courante Durée conseillée : 60 minutes Barème : 1 point par question. Les questions marquées (plusieurs réponses) ne sont comptées justes que si toutes les bonnes réponses sont cochées et aucune mauvaise. Documents autorisés : aucun (variante possible : documentation kubernetes.io autorisée, durée ramenée à 45 minutes)

Le corrigé complet, avec justification de chaque réponse, se trouve en fin de document.


1. Architecture et plan de contrôle

Q1. Quel composant du plan de contrôle décide sur quel nœud un nouveau Pod sera exécuté ?

  • a) kubelet
  • b) kube-scheduler
  • c) kube-controller-manager
  • d) kube-proxy

Q2. Quel est le seul composant qui lit et écrit directement dans etcd ?

  • a) kubelet
  • b) kube-scheduler
  • c) kube-apiserver
  • d) kube-controller-manager

Q3. (plusieurs réponses) Quelles affirmations décrivent correctement kubelet ?

  • a) Il s'exécute sur chaque nœud du cluster
  • b) Il crée et supervise les conteneurs en passant par un runtime via l'interface CRI
  • c) Il choisit le nœud sur lequel placer un Pod
  • d) Il remonte à l'API server l'état des Pods et du nœud

Q4. Quel est le rôle de kube-proxy ?

  • a) Il route le trafic HTTP entrant selon les règles Ingress
  • b) Il programme les règles réseau du nœud (iptables ou IPVS) qui redirigent le trafic destiné aux Services vers les Pods
  • c) Il attribue les adresses IP aux Pods
  • d) Il chiffre les communications entre les nœuds

Q5. (plusieurs réponses) Le plan de contrôle est totalement indisponible pendant 30 minutes. Que se passe-t-il ?

  • a) Les Pods déjà démarrés continuent de servir le trafic
  • b) Tous les Pods sont arrêtés immédiatement sur tous les nœuds
  • c) Un Pod qui plante n'est pas replanifié ailleurs
  • d) kubectl ne répond plus

2. Pods et cycle de vie

Q6. Quelle est la plus petite unité déployable et ordonnançable dans Kubernetes ?

  • a) Le conteneur
  • b) Le Pod
  • c) Le ReplicaSet
  • d) Le Deployment

Q7. (plusieurs réponses) Que partagent les conteneurs d'un même Pod ?

  • a) L'espace de noms réseau, donc la même adresse IP et les mêmes ports
  • b) Le système de fichiers racine
  • c) Les volumes déclarés au niveau du Pod, s'ils y sont montés
  • d) L'espace de noms PID, par défaut

Q8. Comment se comportent les initContainers ?

  • a) Ils tournent en parallèle des conteneurs applicatifs pendant toute la vie du Pod
  • b) Ils s'exécutent l'un après l'autre avant le démarrage des conteneurs applicatifs et doivent se terminer avec succès
  • c) Ils redémarrent en boucle tant que le Pod est actif
  • d) Ils ne peuvent ni monter de volume ni lire de ConfigMap

Q9. Un Pod reste en état Pending depuis plusieurs minutes. Quelle est la cause la plus probable ?

  • a) Le processus principal du conteneur plante au démarrage
  • b) Aucun nœud ne satisfait les demandes de ressources ou les contraintes de placement
  • c) La readinessProbe échoue
  • d) Le conteneur a dépassé sa limite mémoire

Q10. Que signifie l'état CrashLoopBackOff ?

  • a) Le nœud hébergeant le Pod est injoignable
  • b) Le conteneur démarre puis se termine de façon répétée, et le kubelet espace progressivement les redémarrages
  • c) L'image ne peut pas être téléchargée depuis le registre
  • d) Le Pod attend qu'un volume soit attaché

3. Contrôleurs et workloads

Q11. Quel objet crée et gère un ReplicaSet, et pilote les mises à jour progressives ?

  • a) Le StatefulSet
  • b) Le DaemonSet
  • c) Le Deployment
  • d) Le Job

Q12. Vous devez déployer un agent de collecte de logs, à raison d'une instance sur chaque nœud, y compris sur les nœuds ajoutés plus tard. Quel objet utilisez-vous ?

  • a) Un Deployment avec replicas égal au nombre de nœuds
  • b) Un DaemonSet
  • c) Un StatefulSet
  • d) Un CronJob

Q13. (plusieurs réponses) Quelles propriétés sont spécifiques au StatefulSet ?

  • a) Les Pods portent un nom stable et indexé (db-0, db-1, db-2)
  • b) Les Pods sont créés et supprimés dans un ordre déterminé
  • c) Chaque réplique obtient son propre PVC grâce à volumeClaimTemplates
  • d) La suppression du StatefulSet supprime automatiquement les PVC associés

Q14. Quelles valeurs de restartPolicy sont acceptées pour les Pods d'un Job ?

  • a) Always et OnFailure
  • b) OnFailure et Never
  • c) Always uniquement
  • d) Les trois valeurs sont acceptées

Q15. Un Pod créé directement en YAML, sans contrôleur, se trouve sur un nœud qui tombe définitivement en panne. Que se passe-t-il ?

  • a) Le scheduler le replanifie sur un autre nœud
  • b) Le kubelet d'un autre nœud le reprend
  • c) Il n'est pas recréé
  • d) Il est recréé après expiration du terminationGracePeriodSeconds

4. Mises à jour et déploiements

Q16. Quelle est la stratégie de mise à jour par défaut d'un Deployment, et quelles sont les valeurs par défaut associées ?

  • a) Recreate, sans paramètre
  • b) RollingUpdate, avec maxSurge à 25 % et maxUnavailable à 25 %
  • c) RollingUpdate, avec maxSurge à 1 et maxUnavailable à 1
  • d) OnDelete, avec maxSurge à 25 %

Q17. Quelle commande permet de revenir à la révision précédente d'un Deployment nommé api ?

  • a) kubectl rollout undo deployment/api
  • b) kubectl rollback deployment/api
  • c) kubectl apply --previous -f deployment.yaml
  • d) kubectl replace --revision=-1 deployment/api

Q18. Que garantit la configuration maxUnavailable: 0 associée à maxSurge: 1 ?

  • a) La mise à jour est instantanée
  • b) Le nombre de Pods disponibles ne descend jamais sous le nombre de réplicas souhaité, un Pod supplémentaire étant créé avant chaque suppression
  • c) Un seul Pod tourne pendant toute la mise à jour
  • d) Les anciens Pods sont tous supprimés avant la création des nouveaux

Q19. Quel est l'effet de la stratégie Recreate sur un Deployment ?

  • a) Elle recrée les Pods un par un
  • b) Elle supprime tous les anciens Pods avant de créer les nouveaux, ce qui provoque une interruption de service
  • c) Elle ne recrée les Pods qu'au redémarrage du nœud
  • d) Elle duplique le nombre de réplicas pendant la mise à jour

Q20. Comment un Deployment conserve-t-il l'historique de ses révisions ?

  • a) Dans un objet DeploymentHistory dédié
  • b) En conservant les anciens ReplicaSets, dans la limite fixée par revisionHistoryLimit
  • c) Dans les annotations du Pod le plus ancien
  • d) Dans etcd, sous forme de sauvegardes horodatées

5. Services et DNS

Q21. Quel est le type de Service utilisé par défaut si le champ type n'est pas renseigné ?

  • a) NodePort
  • b) LoadBalancer
  • c) ClusterIP
  • d) ExternalName

Q22. Quelle est la plage de ports par défaut allouée aux Services de type NodePort ?

  • a) 1024 à 9999
  • b) 8000 à 8999
  • c) 30000 à 32767
  • d) 40000 à 49151

Q23. Quel est le nom DNS complet du Service api déployé dans le namespace prod ?

  • a) api.cluster.local
  • b) prod.api.svc.cluster.local
  • c) api.prod.svc.cluster.local
  • d) api.svc.prod.cluster.local

Q24. Que produit un Service déclaré avec clusterIP: None ?

  • a) Le Service est désactivé
  • b) La résolution DNS du Service renvoie directement les adresses IP des Pods correspondants
  • c) Le Service n'est accessible que depuis le nœud local
  • d) Le trafic est réparti aléatoirement sur tous les nœuds

Q25. (plusieurs réponses) Un Service ne redirige aucun trafic vers les Pods attendus. Quelles causes sont plausibles ?

  • a) Le selector du Service ne correspond à aucun label de Pod
  • b) Les Pods ciblés ne sont pas à l'état Ready
  • c) Le targetPort ne correspond pas au port réellement exposé par le conteneur
  • d) Le Service est de type ClusterIP

6. Ingress et politiques réseau

Q26. Vous créez un objet Ingress mais aucune requête n'aboutit et aucune adresse n'apparaît dans kubectl get ingress. Quelle est la cause la plus probable ?

  • a) L'Ingress doit être créé dans le namespace kube-system
  • b) Aucun contrôleur Ingress n'est déployé dans le cluster
  • B) Le Service cible doit être de type LoadBalancer
  • c) Le Service cible doit obligatoirement être de type NodePort
  • d) Un objet Ingress ne fonctionne qu'avec TLS activé

Q27. Sur quels critères un objet Ingress standard sait-il router une requête ?

  • a) L'adresse IP source et le port TCP
  • b) Le nom d'hôte et le chemin de l'URL
  • c) Le label du Pod de destination
  • d) Le protocole de transport uniquement

Q28. (plusieurs réponses) Quelles affirmations sont exactes à propos des NetworkPolicy ?

  • a) En l'absence de toute NetworkPolicy, l'ensemble du trafic entre Pods est autorisé
  • b) Dès qu'une policy sélectionne un Pod en entrée, tout trafic entrant non explicitement autorisé est bloqué
  • c) Elles sont appliquées par l'API server
  • d) Le plugin CNI installé doit prendre en charge les NetworkPolicy pour qu'elles produisent un effet

Q29. Quelle définition met en place un refus par défaut de tout le trafic entrant dans un namespace ?

  • a) Un podSelector vide, policyTypes: [Ingress], et aucune règle ingress
  • b) Un podSelector vide avec une règle ingress autorisant 0.0.0.0/0
  • c) La suppression de toutes les NetworkPolicy du namespace
  • d) L'annotation network.kubernetes.io/deny-all sur le namespace

Q30. De quoi dépend l'attribution effective d'une adresse externe à un Service de type LoadBalancer ?

  • a) De la configuration de CoreDNS
  • b) D'un contrôleur fourni par le cloud provider ou d'une solution équivalente en interne, comme MetalLB
  • c) De la présence d'un Ingress dans le même namespace
  • d) De l'activation d'IPVS sur les nœuds

7. Configuration et secrets

Q31. (plusieurs réponses) Comment le contenu d'un ConfigMap peut-il être exposé à un conteneur ?

  • a) Comme variable d'environnement unitaire, via valueFrom.configMapKeyRef
  • b) Comme jeu complet de variables d'environnement, via envFrom
  • c) Comme fichiers, en montant le ConfigMap dans un volume
  • d) Comme argument implicite ajouté automatiquement à la commande du conteneur

Q32. Quelle affirmation décrit correctement un Secret Kubernetes standard ?

  • a) Son contenu est chiffré par défaut dans etcd
  • b) Son contenu est encodé en base64 et n'est pas chiffré tant que le chiffrement au repos n'a pas été activé sur le cluster
  • c) Il n'est lisible que par le kubelet du nœud
  • d) Il est automatiquement répliqué dans tous les namespaces

Q33. Une clé d'un ConfigMap monté sous forme de volume est modifiée. Que se passe-t-il côté conteneur ?

  • a) Le fichier monté est mis à jour après un court délai de synchronisation, sans redémarrage du Pod
  • b) Le Pod redémarre automatiquement pour recharger la valeur
  • c) Le montage devient invalide jusqu'à recréation du Pod
  • d) Le changement est rejeté par l'API server

Q34. Comment autoriser un Pod à tirer une image depuis un registre privé ?

  • a) En renseignant le mot de passe en clair dans le champ image
  • b) En créant un Secret de type kubernetes.io/dockerconfigjson et en le référençant via imagePullSecrets
  • c) En ajoutant les identifiants dans un ConfigMap monté sur /root/.docker
  • d) En désactivant la vérification TLS sur le kubelet

Q35. Quel est l'intérêt principal du champ immutable: true sur un ConfigMap ou un Secret ?

  • a) Il chiffre le contenu de l'objet
  • b) Il interdit toute modification ultérieure et réduit la charge de surveillance sur l'API server
  • c) Il rend l'objet visible depuis tous les namespaces
  • d) Il empêche la suppression de l'objet

8. Stockage

Q36. Quelle formulation décrit correctement la relation entre PV et PVC ?

  • a) Le PVC est la ressource de stockage réelle, le PV est la demande de l'utilisateur
  • b) Le PV représente la ressource de stockage disponible dans le cluster, le PVC est la demande formulée par l'utilisateur et liée ensuite à un PV
  • c) PV et PVC sont deux noms d'un même objet
  • d) Le PVC est obligatoirement créé par l'administrateur avant le PV

Q37. Que signifie exactement le mode d'accès ReadWriteOnce ?

  • a) Le volume ne peut être monté qu'une seule fois dans la vie du cluster
  • b) Le volume peut être monté en lecture et écriture par un seul nœud à la fois
  • c) Le volume peut être monté en lecture et écriture par un seul Pod, quel que soit le nœud
  • d) Le volume est en lecture seule après le premier montage

Q38. À quoi sert une StorageClass ?

  • a) À classer les PV par ordre de priorité d'utilisation
  • b) À décrire un type de stockage et permettre le provisionnement dynamique des PV lorsqu'un PVC est créé
  • c) À limiter le volume de stockage consommé par un namespace
  • d) À chiffrer les volumes montés dans les Pods

Q39. Un PVC est supprimé alors que le PV associé porte persistentVolumeReclaimPolicy: Retain. Que devient le PV ?

  • a) Il est supprimé avec son contenu
  • b) Il passe à l'état Released et conserve ses données, sans être réutilisable automatiquement
  • c) Il est immédiatement rattaché au prochain PVC compatible
  • d) Il repasse à l'état Available après nettoyage automatique

Q40. Quelle est la durée de vie d'un volume emptyDir ?

  • a) Celle du cluster
  • b) Celle du nœud
  • c) Celle du Pod, le volume étant supprimé en même temps que lui
  • d) Celle du conteneur, le volume étant recréé à chaque redémarrage de celui-ci

9. Ordonnancement et ressources

Q41. Comment fonctionne le couple taint et toleration ?

  • a) Le taint est posé sur le Pod, la toleration sur le nœud
  • b) Le taint est posé sur le nœud pour repousser les Pods, la toleration est déclarée sur le Pod pour l'autoriser à s'y placer
  • c) Les deux sont posés sur le nœud
  • d) Les deux sont posés sur le namespace

Q42. À quelle condition un Pod obtient-il la classe de qualité de service Guaranteed ?

  • a) Il déclare uniquement des limits
  • b) Tous ses conteneurs déclarent des requests et des limits égales, pour le CPU comme pour la mémoire
  • c) Il ne déclare ni requests ni limits
  • d) Il porte l'annotation qos: guaranteed

Q43. Un conteneur dépasse la limite mémoire fixée dans resources.limits.memory. Que se passe-t-il ?

  • a) Le conteneur est ralenti par le noyau, comme pour le CPU
  • b) Le processus est tué par le noyau et le conteneur est marqué OOMKilled, puis redémarré selon la restartPolicy
  • c) Le Pod est déplacé sur un nœud disposant de plus de mémoire
  • d) La limite est automatiquement relevée

Q44. Quelle est la différence entre ResourceQuota et LimitRange ?

  • a) ResourceQuota plafonne la consommation totale d'un namespace, LimitRange fixe des valeurs par défaut et des bornes par conteneur ou par Pod
  • b) ResourceQuota s'applique au cluster entier, LimitRange à un nœud
  • c) Les deux objets sont équivalents, seul le nom diffère
  • d) ResourceQuota agit sur le CPU uniquement, LimitRange sur la mémoire uniquement

Q45. (plusieurs réponses) Quelles conditions sont nécessaires pour qu'un HorizontalPodAutoscaler basé sur l'utilisation CPU fonctionne ?

  • a) Une source de métriques doit être installée, généralement metrics-server
  • b) Les conteneurs ciblés doivent déclarer une requests.cpu
  • c) La ressource pilotée doit exposer une sous-ressource scale, comme un Deployment ou un StatefulSet
  • d) Le cluster doit disposer d'au moins trois nœuds

10. Sondes, sécurité et dépannage

Q46. Que se passe-t-il lorsque la readinessProbe d'un conteneur échoue durablement ?

  • a) Le conteneur est redémarré
  • b) Le Pod est retiré des endpoints des Services qui le sélectionnent, mais il n'est pas redémarré
  • c) Le Pod est supprimé puis replanifié
  • d) Rien, la sonde n'est qu'informative

Q47. Que se passe-t-il lorsque la livenessProbe d'un conteneur échoue au-delà du seuil configuré ?

  • a) Le conteneur est redémarré par le kubelet
  • b) Le Pod est retiré des endpoints du Service sans redémarrage
  • c) Le nœud est marqué NotReady
  • d) Le Deployment déclenche un rollback

Q48. Vous devez accorder à un utilisateur les droits définis par un ClusterRole, mais uniquement dans le namespace dev. Que faites-vous ?

  • a) Vous créez un ClusterRoleBinding référençant ce ClusterRole
  • b) Vous créez un RoleBinding dans le namespace dev qui référence ce ClusterRole
  • c) Vous recopiez le ClusterRole en Role, seule solution possible
  • d) Vous ajoutez le champ namespace dans le ClusterRole

Q49. Un conteneur vient de redémarrer après un plantage. Quelle commande affiche les logs de l'instance précédente ?

  • a) kubectl logs api-7d9f --previous
  • b) kubectl logs api-7d9f --history
  • c) kubectl describe pod api-7d9f --logs
  • d) kubectl get logs api-7d9f -o old

Q50. Un Pod reste bloqué et vous cherchez le motif exact du blocage, par exemple FailedScheduling ou ImagePullBackOff. Quelle commande consultez-vous en priorité ?

  • a) kubectl get pod api-7d9f -o wide
  • b) kubectl describe pod api-7d9f, section Events
  • c) kubectl top pod api-7d9f
  • d) kubectl api-resources