Ce module décortique l’architecture interne de Kubernetes et vous apprend à naviguer dans l’API. C’est la base pour comprendre ce que font les commandes kubectl et pour réussir les questions d’examen demandant de “décrire le cycle de vie d’un objet”.
Table of Contents
Roadmap du module
- Cartographier le control plane et le data plane.
- Suivre le cycle de vie d’un manifeste YAML.
- Explorer l’API : discovery, ressources namespaced VS cluster-scoped.
- Laboratoire d’introspection détaillé.
1. Control plane vs data plane
Le control plane prend les décisions (schedulage, admission, convergence). Il regroupe :
- kube-apiserver : point d’entrée unique, expose l’API REST.
- etcd : base de données clé/valeur qui persiste l’état désiré.
- kube-scheduler : assigne les Pods aux nœuds en fonction des ressources disponibles et des affinities.
- kube-controller-manager : exécute les controllers natifs (deployment, job, replicaset, endpoint, etc.).
- cloud-controller-manager (clusters managés) : interagit avec l’IaaS (LB, volumes, nœuds).
Le data plane applique les décisions :
- kubelet : agent par nœud, s’assure que les Pods déclarés tournent vraiment.
- container runtime (containerd, cri-o, Docker shim) : lance les conteneurs.
- kube-proxy ou CNI eBPF : gère le trafic réseau vers les services.
Production Watch : sur EKS/GKE/AKS vous ne gérez pas etcd ni kube-apiserver mais vous devez surveiller leurs quotas API, latences et limites de taille d’objet.
2. Cycle de vie d’un objet
- Le manifeste est envoyé à l’API (
kubectl applyou appel REST). - Admission : validation, conversions (mutating webhook), vérifications (validating webhook).
- Persistance : l’objet est écrit dans etcd avec un
resourceVersion. - Controllers : la boucle de réconciliation compare
specetstatuspuis agit (création de Pod, update de endpoints…). - Scheduler : pour les Pods, il assigne
spec.nodeNameet les kubelet appliquent les changements.
3. Explorer l’API
Commencez par découvrir les versions et les ressources disponibles.
kubectl api-versions
kubectl api-resources --namespaced=false
kubectl api-resources --namespaced=true | head
Utilisez kubectl explain pour naviguer dans les champs :
kubectl explain deployment
kubectl explain deployment.spec.strategy
kubectl explain deployment.spec.template.spec.containers --recursive | head
Rappelez-vous de la structure group/version/resource :
apps/v1→ resources :deployments,statefulsets,daemonsets.batch/v1→jobs,cronjobs.core/v1(alias groupe vide) →pods,services,configmaps.
4. Lab d’introspection
Exécutez ces commandes et documentez vos observations dans ~/k8s-training/journal.md.
- Inventorier le control plane :
kubectl get pods -n kube-system -l tier=control-plane -o wide kubectl -n kube-system describe pod kube-apiserver-$(kubectl get nodes -o jsonpath='{.items[0].metadata.name}') - Inspecter les handlers d’admission :
kubectl get --raw '/api/v1/namespaces/kube-system/configmaps/extension-apiserver-authentication' | jq '.data' - Explorer l’API brute :
kubectl get --raw / | jq '.paths' | head kubectl get --raw /apis/apps/v1 | jq '.resources[] | {name, namespaced, verbs}' | head - Comprendre
resourceVersion:kubectl get deployment webapp -o jsonpath='{.metadata.resourceVersion}'Modifiez un champ (ex.
spec.replicas) et vérifiez que leresourceVersionchange.
5. Quiz express
- Quelle différence entre
kubectl applyetkubectl create? - Quel composant écrit dans etcd lorsqu’un Pod est supprimé ?
- Quel est l’impact d’un webhook mutating qui ajoute un sidecar ?
Pièges observés en production
- Confondre
kubectl get pods --all-namespacesetkubectl get pods -A: le premier est plus verbeux mais identique, gagnez du temps pendant l’examen. - Oublier que certaines ressources (RBAC, StorageClass, Nodes) sont cluster-scoped : inutile de fournir un namespace dans les manifestes.
- Ne pas vérifier la compatibilité API : sur un cluster récent,
batch/v1beta1ouextensions/v1beta1sont supprimés.
Ressources complémentaires
Checklist de fin de module
- ✅ Vous pouvez expliquer le rôle des composants du control plane et du data plane.
- ✅ Vous savez utiliser
kubectl explain,kubectl api-resourcesetkubectl get --raw. - ✅ Vous tenez un journal de bord avec les commandes exécutées et vos observations.
Solution détaillée
- Inventaire du control plane
kubectl get pods -n kube-system -l tier=control-planedoit montrerkube-apiserver,kube-controller-manager,kube-scheduler.
Utilisezkubectl -n kube-system describe pod kube-apiserver-…pour retrouver les arguments (--etcd-servers,--authorization-mode). - Cycle de vie
Editez un Deployment :kubectl patch deployment webapp -p '{"spec":{"replicas":4}}'.
Exécutezkubectl get deployment webapp -o jsonpath='{.metadata.resourceVersion}'avant/après pour observer l’incrément. - Exploration API
kubectl api-resources --namespaced=false | headdoit listernodes,namespaces,persistentvolumes.
kubectl get --raw /apis/apps/v1révèle toutes les ressources du groupeapps. - Handlers d’admission
kubectl get --raw '/api/v1/namespaces/kube-system/configmaps/extension-apiserver-authentication' | jq '.data'doit retourner les clusters CA utilisés par les webhooks. - Journal d’introspection
Ajoutez une entrée datée reprenant : composants visibles, webhooks présents, resourceVersion observé. Exemple :[2025-10-20] Control-plane OK, API expose 273 paths. Deployment webapp revision=4.
Ces vérifications confirment que vous savez naviguer dans l’API et que vous êtes prêt pour les modules workloads/réseau.


