Aller au contenu
Conteneurs & Orchestration medium

Architecture Kubernetes : comprendre le cluster en 15 minutes

27 min de lecture

logo Kubernetes

Vous avez entendu parler de Kubernetes, vous savez qu’il “orchestre des conteneurs”, mais comment ça marche concrètement ? Ce guide vous explique l’architecture interne de Kubernetes : quels composants font quoi, comment ils communiquent entre eux, et pourquoi votre application reste disponible même quand un serveur tombe en panne.

  • Identifier chaque brique de l’architecture et son rôle précis
  • Comprendre le chemin d’un Pod depuis votre commande kubectl jusqu’à son exécution
  • Expliquer pourquoi Kubernetes “se répare tout seul” en cas de problème

Prérequis : avoir lu Qu’est-ce que Kubernetes et connaître les bases de Docker. Si ces concepts sont flous, commencez par là !

Avant d’entrer dans les détails, prenons du recul. Imaginez une entreprise de livraison : il y a un bureau central qui décide quels colis envoyer où, et des livreurs sur le terrain qui transportent réellement les colis. Kubernetes fonctionne exactement comme ça.

Architecture d'un cluster Kubernetes : Control Plane (API Server, etcd, Scheduler, Controller Manager) et Worker Nodes avec leurs Pods

Un cluster Kubernetes se divise en deux parties distinctes qui ne font pas du tout le même travail :

PartieRôleAnalogieCe qu’il NE fait PAS
Control PlaneLe cerveau : décide où déployer, surveille l’état, corrige les problèmesLe bureau central de l’entrepriseNe fait tourner aucun conteneur applicatif
Worker NodesLes muscles : exécutent les conteneurs de vos applicationsLes livreurs sur le terrainNe prennent aucune décision stratégique

Le Control Plane (plan de contrôle) est la partie “intelligente” de Kubernetes. Il prend toutes les décisions du cluster : où déployer vos applications, comment réagir si quelque chose tombe en panne, comment répartir la charge… Mais attention : il ne fait jamais tourner vos conteneurs applicatifs. Son seul travail, c’est d’orchestrer.

Dans notre analogie de l’entreprise de livraison, le Control Plane c’est le siège social : il décide, coordonne, mais ne livre aucun colis lui-même.

Le Control Plane repose sur 4 composants essentiels qui travaillent ensemble. Chacun a un rôle précis — comme les différents services d’une entreprise. Un 5ème composant optionnel (cloud-controller-manager) s’ajoute pour les clusters cloud.

  1. API Server — Le point d’entrée unique (l’accueil de l’entreprise)

    Imaginez un standard téléphonique : toutes les communications passent par lui. L’API Server est le seul point d’entrée vers le cluster Kubernetes. Que vous utilisiez la ligne de commande kubectl, un dashboard web, ou un pipeline CI/CD, tout passe par l’API Server.

    Son travail :

    • Recevoir vos requêtes (créer un Pod, lister les services…)
    • Valider que la requête est correcte et que vous avez les droits
    • Transmettre les instructions aux autres composants
    6443/api/v1/pods
    # Chaque commande kubectl passe par l'API Server
    kubectl get pods
    kubectl apply -f deployment.yaml
    # → L'API Server valide le YAML, puis le stocke dans etcd
  2. etcd — La mémoire du cluster (les archives de l’entreprise)

    etcd est une base de données clé-valeur distribuée. Elle stocke absolument tout sur l’état de votre cluster : la liste des Pods, leurs configurations, les secrets, les droits utilisateurs, l’historique des déploiements…

    C’est la “source de vérité” : si vous vous demandez “quel est l’état actuel de mon cluster ?”, la réponse est dans etcd.

  3. Scheduler — Le placeur de Pods (le service logistique)

    Quand vous créez un nouveau Pod, une question se pose : sur quel serveur le déployer ? C’est le travail du Scheduler.

    Il analyse :

    • Les ressources disponibles sur chaque Worker Node (CPU, mémoire)
    • Les contraintes que vous avez définies (affinités, taints, tolerations)
    • Les besoins du Pod (ressources demandées, volumes nécessaires)

    Puis il choisit le meilleur candidat et informe l’API Server de sa décision.

  4. Controller Manager — Le gardien de l’état (le service qualité)

    Le Controller Manager surveille en permanence l’état réel du cluster et le compare à l’état souhaité (ce que vous avez défini dans vos fichiers YAML). S’il y a une différence, il agit pour corriger.

    Exemples concrets :

    • Vous avez demandé 3 répliques, mais un Pod a crashé → il en recrée un
    • Un nœud ne répond plus → il marque ses Pods comme “à redéployer”
    • Un Deployment a été mis à jour → il orchestre le rolling update

    Le Controller Manager contient en fait plusieurs contrôleurs spécialisés : Node Controller, Replication Controller, Endpoints Controller, etc.

Le cloud-controller-manager : l’intégrateur cloud (optionnel)

Section intitulée « Le cloud-controller-manager : l’intégrateur cloud (optionnel) »

Le cloud-controller-manager est un composant optionnel du Control Plane. Il n’existe que si votre cluster est déployé sur un fournisseur cloud (AWS, GCP, Azure, etc.). Si vous utilisez un cluster bare-metal ou local (Minikube, kubeadm sur VMs), vous n’en avez pas besoin.

Que gère le cloud-controller-manager ?

Il contient plusieurs contrôleurs spécifiques au cloud :

ContrôleurRôleExemple concret
Node ControllerVérifie si un nœud existe toujours chez le providerSi une VM AWS est supprimée, il met à jour l’état du cluster
Route ControllerConfigure les routes réseau dans le cloudCrée les règles de routage entre sous-réseaux
Service ControllerGère les Load Balancers cloudCrée automatiquement un ELB/ALB quand vous déclarez type: LoadBalancer

Ce que ça change pour vous :

# Avec cloud-controller-manager sur AWS :
apiVersion: v1
kind: Service
metadata:
name: mon-app
spec:
type: LoadBalancer # ← Le cloud-controller-manager crée un ELB automatiquement
ports:
- port: 80

Sans cloud-controller-manager, un Service de type LoadBalancer resterait en état “Pending” indéfiniment.

Ces composants ne fonctionnent jamais isolément — ils forment une chaîne de traitement. Voici ce qui se passe quand vous déployez une application :

Flux de traitement dans le Control Plane : kubectl → API Server → etcd → Scheduler → Controller Manager

Les Worker Nodes : là où tournent vos conteneurs

Section intitulée « Les Worker Nodes : là où tournent vos conteneurs »

Maintenant que nous avons vu le “cerveau”, passons aux “muscles”. Les Worker Nodes (nœuds de travail) sont les machines qui exécutent réellement vos applications. C’est là que vos conteneurs tournent, consomment du CPU, de la mémoire, et répondent aux requêtes.

Dans notre analogie, les Worker Nodes sont les livreurs : ils ne décident pas où aller (c’est le Control Plane), mais ce sont eux qui font le travail concret.

Chaque Worker Node est une machine (physique ou virtuelle) avec trois composants essentiels installés dessus.

Architecture détaillée d'un Worker Node : Kubelet, Kube-proxy, Container Runtime et Pods applicatifs

ComposantRôle en une phraseAnalogieExemple concret
KubeletAgent qui reçoit les ordres et lance les conteneursLe contremaître sur le chantier”L’API Server dit de lancer nginx, je m’en occupe”
Kube-proxyConfigure le réseau pour que les Pods communiquentLe standardiste téléphonique”Le Service X doit rediriger vers ces 3 Pods”
Container RuntimeExécute réellement les conteneursLes outils de construction”Je télécharge l’image et je lance le conteneur”

Le Kubelet est un agent qui tourne sur chaque Worker Node. C’est lui qui fait le lien entre le Control Plane (qui décide) et le Node (qui exécute).

Son travail au quotidien :

  • Écouter l’API Server pour savoir quels Pods il doit faire tourner
  • Lancer les conteneurs en demandant au Container Runtime
  • Surveiller la santé des Pods (liveness probes, readiness probes)
  • Remonter l’état au Control Plane (“ce Pod est Running”, “celui-là a crashé”)
Fenêtre de terminal
# Vérifier que kubelet tourne sur un nœud (à exécuter sur le Node)
systemctl status kubelet
# Voir les logs du kubelet
journalctl -u kubelet -f

Kube-proxy est responsable de la connectivité réseau sur le Node. Quand vous créez un Service Kubernetes (une IP stable pour accéder à vos Pods), c’est kube-proxy qui configure les règles pour que ça fonctionne.

Concrètement, il gère :

  • Les règles iptables ou IPVS pour router le trafic
  • Le load balancing entre les Pods d’un même Service
  • La communication entre Pods de différents Nodes

Sans kube-proxy, vos Pods seraient isolés et incapables de communiquer avec le reste du cluster.

Le Container Runtime est le moteur qui lance réellement les conteneurs. Kubernetes ne sait pas “lancer un conteneur” — il délègue cette tâche au runtime.

Kubernetes supporte plusieurs runtimes via l’interface CRI (Container Runtime Interface) :

RuntimeDescriptionQuand l’utiliser
containerdLéger, standard de factoRecommandé pour la plupart des cas
CRI-OOptimisé pour KubernetesClusters OpenShift, environnements Red Hat
DockerVia dockershim (déprécié)Éviter pour les nouveaux clusters

Le cycle de vie d’un déploiement : de kubectl au conteneur

Section intitulée « Le cycle de vie d’un déploiement : de kubectl au conteneur »

Maintenant que vous connaissez tous les composants, voyons le film complet : que se passe-t-il exactement quand vous tapez kubectl apply ? Suivons le parcours étape par étape.

Cycle de vie d'un déploiement Kubernetes en 6 étapes : envoi kubectl, stockage etcd, notification scheduler, décision de placement, exécution kubelet, conteneur running

  1. Vous envoyez une requête depuis votre terminal

    Tout commence par votre commande. Vous avez un fichier YAML qui décrit votre application, et vous demandez à Kubernetes de le déployer.

    Fenêtre de terminal
    kubectl apply -f mon-pod.yaml

    À ce stade, rien ne tourne encore. Vous venez juste d’envoyer une requête vers l’API Server.

  2. L’API Server valide et stocke

    L’API Server reçoit votre requête et effectue plusieurs vérifications :

    • Authentification : qui êtes-vous ? (certificat, token…)
    • Autorisation : avez-vous le droit de créer un Pod dans ce namespace ?
    • Validation : le YAML est-il correct ? Les champs requis sont-ils présents ?

    Si tout est OK, il enregistre l’état souhaité dans etcd. À ce moment, etcd contient “je veux un Pod nginx”, mais le Pod n’existe pas encore réellement.

  3. Le Scheduler choisit un nœud

    Le Scheduler surveille etcd en permanence. Il détecte qu’un nouveau Pod existe mais n’a pas encore de Node assigné (champ nodeName vide).

    Il analyse alors tous les Worker Nodes disponibles :

    • Node A : 2 CPU libres, 4 Go RAM → ✅ suffisant
    • Node B : 0.5 CPU libre, 1 Go RAM → ❌ pas assez
    • Node C : marqué “en maintenance” → ❌ exclu

    Décision : Node A. Le Scheduler met à jour etcd avec cette assignation.

  4. Le Kubelet lance le conteneur

    Le Kubelet du Node A surveille aussi etcd (via l’API Server). Il voit qu’un Pod lui est assigné.

    Il passe alors à l’action :

    • Télécharge l’image Docker/OCI si elle n’est pas en cache
    • Demande au Container Runtime (containerd) de créer le conteneur
    • Configure les volumes, les variables d’environnement, les limites de ressources
    • Lance le conteneur

    Une fois le conteneur démarré, le Kubelet met à jour le statut : “Running”.

  5. Kube-proxy configure le réseau

    En parallèle, kube-proxy entre en jeu. Le Pod vient d’obtenir une adresse IP (attribuée par le plugin CNI).

    Kube-proxy s’assure que :

    • Le Pod peut communiquer avec les autres Pods du cluster
    • Si le Pod fait partie d’un Service, les règles de routage sont mises à jour
    • Le load balancing est configuré si nécessaire
  6. Le Controller Manager surveille en continu

    Le travail n’est pas terminé ! Le Controller Manager continue de surveiller :

    • Le Pod est-il toujours “Running” ?
    • Répond-il aux health checks (liveness probe) ?
    • Si c’est un Deployment avec 3 répliques, y a-t-il bien 3 Pods ?

    Si quelque chose ne va pas, le Controller Manager déclenche une action corrective (on verra ça dans la section suivante).

La réconciliation : Kubernetes se répare tout seul

Section intitulée « La réconciliation : Kubernetes se répare tout seul »

C’est le super-pouvoir de Kubernetes et ce qui le différencie fondamentalement d’un simple script de déploiement. Kubernetes ne se contente pas de lancer vos conteneurs — il garantit qu’ils restent dans l’état que vous avez demandé, quoi qu’il arrive.

Quand vous déployez une application sur Kubernetes, vous ne dites pas “lance 3 conteneurs”. Vous dites “je veux 3 répliques de mon application”. C’est une différence subtile mais fondamentale :

  • Impératif (script classique) : “Exécute cette commande maintenant”
  • Déclaratif (Kubernetes) : “Voici l’état que je souhaite, débrouille-toi”

Kubernetes stocke votre déclaration (l’état souhaité) dans etcd. Puis le Controller Manager compare en permanence avec la réalité (l’état actuel). S’il y a un écart, il agit.

Imaginons que vous avez déclaré vouloir 3 répliques de votre application :

État souhaitéÉtat actuelÉcart détectéAction du Controller Manager
3 répliques3 Pods runningAucun✅ Rien à faire, tout va bien
3 répliques2 Pods running-1 Pod⚠️ Créer 1 nouveau Pod
3 répliques4 Pods running+1 Pod⚠️ Supprimer 1 Pod en trop
3 répliques0 Pod running-3 Pods🔴 Créer 3 Pods d’urgence

Cette boucle de réconciliation tourne en continu, toutes les quelques secondes. Elle ne s’arrête jamais.

Suivons un scénario réaliste pas à pas :

Fenêtre de terminal
# Situation initiale : tout va bien, 3 répliques running
kubectl get pods
# NAME READY STATUS RESTARTS AGE
# nginx-deployment-abc12 1/1 Running 0 2h
# nginx-deployment-def34 1/1 Running 0 2h
# nginx-deployment-ghi56 1/1 Running 0 2h
# 💥 PANNE : le Node qui héberge nginx-deployment-ghi56 tombe !
# (panne réseau, crash matériel, peu importe)
# Que se passe-t-il automatiquement ?
# 1. Le Node Controller détecte que le Node ne répond plus
# 2. Après un délai (node-monitor-grace-period), il marque le Node "NotReady"
# 3. Les Pods sur ce Node sont marqués "Unknown" puis "Terminating"
# 4. Le ReplicaSet Controller détecte : 2 Pods running ≠ 3 souhaités
# 5. Il demande la création d'un nouveau Pod
# 6. Le Scheduler assigne ce Pod à un Node sain
# 7. Le Kubelet du nouveau Node lance le conteneur
# Résultat quelques minutes plus tard :
kubectl get pods
# NAME READY STATUS RESTARTS AGE
# nginx-deployment-abc12 1/1 Running 0 2h
# nginx-deployment-def34 1/1 Running 0 2h
# nginx-deployment-xyz99 1/1 Running 0 45s ← Nouveau !

Avant Kubernetes, gérer les pannes demandait :

  • Des scripts de monitoring complexes
  • Des procédures manuelles de failover
  • Une astreinte 24/7 pour réagir aux incidents

Avec Kubernetes, vous déclarez ce que vous voulez, et le cluster se débrouille. Pas besoin d’écrire “si le serveur A tombe, relance sur B”. C’est automatique.

Le réseau Kubernetes : comment les Pods communiquent

Section intitulée « Le réseau Kubernetes : comment les Pods communiquent »

Le réseau est souvent la partie la plus abstraite pour les débutants. Pourtant, Kubernetes impose un modèle simple et élégant qui facilite grandement la vie des développeurs.

Kubernetes garantit ces trois propriétés, quel que soit le plugin réseau utilisé :

RègleCe que ça signifiePourquoi c’est pratique
Chaque Pod a sa propre IPPas d’IP partagée, pas de ports en conflitVos conteneurs peuvent tous écouter sur le port 80
Tous les Pods peuvent communiquerRéseau “plat” sans NATPas de configuration complexe pour joindre un autre Pod
Les Services fournissent une IP stableUne IP fixe même si les Pods changentVos applications peuvent se référencer par nom

Kubernetes définit les règles, mais ne fournit pas l’implémentation réseau. C’est le rôle des plugins CNI (Container Network Interface). Vous devez en choisir un lors de l’installation du cluster.

PluginPoints fortsCas d’usage typique
CalicoRéseau + Network Policies avancées, BGPProduction avec besoins de sécurité
FlannelSimple, léger, rapide à installerClusters de test, environnements simples
CiliumeBPF, observabilité native, performancesClusters modernes, besoin de visibilité
WeaveChiffrement intégré, mesh réseauMulti-datacenter, réseaux non fiables

Récapitulatif : tous les composants en un coup d’œil

Section intitulée « Récapitulatif : tous les composants en un coup d’œil »

Voici un tableau de synthèse de tous les composants que nous avons vus. Gardez-le sous la main comme référence !

ComposantRôle en une phraseAnalogieQuestion qu’il résout
API ServerPoint d’entrée unique du clusterL’accueil de l’entreprise”Comment communiquer avec le cluster ?“
etcdBase de données de l’état du clusterLes archives centrales”Quel est l’état actuel et souhaité ?”
SchedulerDécide où placer les PodsLe service logistique”Sur quel Node déployer ce Pod ?”
Controller ManagerMaintient l’état souhaitéLe service qualité”L’état réel correspond-il au souhaité ?”
Cloud Controller Manager (optionnel)Intègre les services cloudLe service partenariats”Comment utiliser les ressources du cloud ?”
ComposantRôle en une phraseAnalogieQuestion qu’il résout
KubeletAgent qui lance les conteneursLe contremaître”Comment lancer ce Pod sur ce Node ?”
Kube-proxyConfigure le réseau localLe standardiste”Comment joindre ce Pod ?”
Container RuntimeExécute les conteneursLes outils”Comment faire tourner ce conteneur ?”

Si vous ne devez retenir que quelques points de ce guide, voici l’essentiel :

Vue d'ensemble d'un cluster Kubernetes : Control Plane avec ses 4 composants et Worker Nodes avec leurs Pods

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
15 min.
70%

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre