Aller au contenu
English
Conteneurs & Orchestration medium

Les concepts clés de Kubernetes pour bien démarrer

20 min de lecture

logo kubernetes

Kubernetes ne lance pas simplement des conteneurs : il orchestre des applications sur un ensemble de machines. Vous ne démarrez pas un conteneur directement sur un serveur. Vous déclarez un état souhaité au cluster, et Kubernetes se charge d'y parvenir. Pour comprendre ce fonctionnement sans vous perdre, vous devez maîtriser six notions fondamentales : le Cluster, les Nodes, les Namespaces, les Pods, les Deployments et les Services.

Un cluster de test et kubectl configuré. Si vous n'en avez pas encore, montez-en un en vingt minutes avec votre premier cluster, puis revenez ici. Les commandes de cette page se contentent de lire l'état du cluster : elles ne créent rien et ne peuvent rien casser.

  • Cluster et Nodes : l'infrastructure sur laquelle tout repose
  • Namespace : comment organiser et isoler vos ressources
  • Pod : l'unité de base qui exécute vos conteneurs
  • Deployment : le contrôleur qui maintient vos applications en vie
  • Service : le point d'accès réseau stable vers vos pods
  • Comment tout s'articule : le modèle mental complet

Sans ce vocabulaire, ni la documentation officielle ni les tutoriels ne sont lisibles : tous les emploient en permanence, sans jamais les redéfinir. Les apprendre maintenant fait gagner du temps sur tout le reste du parcours.

Avant de détailler chaque notion, voici comment les situer :

ConceptNatureRôle
ClusterEnsembleRegroupe toutes les ressources
NodeMachineExécute les workloads
NamespaceOrganisation logiqueIsole et range les objets
PodUnité d'exécutionFait tourner les conteneurs
DeploymentContrôleurMaintient et met à jour les pods
ServiceAbstraction réseauFournit un accès stable

Un cluster est un ensemble de machines qui travaillent ensemble pour exécuter vos applications. Il se compose de deux types de machines :

TypeRôle
Control planeCerveau du cluster : décide où placer les pods, surveille l'état
Worker nodesMuscles du cluster : exécutent réellement les conteneurs

Vous interagissez avec le cluster via kubectl, l'outil en ligne de commande.

Vérifier la connexion au cluster
kubectl cluster-info
Résultat
Kubernetes control plane is running at https://127.0.0.1:39195
CoreDNS is running at https://127.0.0.1:39195/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Cette commande confirme que votre machine peut communiquer avec le control plane. Le port varie d'un cluster à l'autre : seule compte la réponse.

Un node est une machine (physique ou virtuelle) qui fait partie du cluster. Chaque node peut exécuter plusieurs pods.

Lister les nodes du cluster
kubectl get nodes
Résultat
NAME STATUS ROLES AGE VERSION
doc-k8s-control-plane Ready control-plane 9m v1.37.0
doc-k8s-worker Ready <none> 9m v1.37.0

Dans cet exemple :

  • doc-k8s-control-plane est le control plane, ce que dit la colonne ROLES
  • doc-k8s-worker est un worker node : <none> signifie qu'il ne porte aucun rôle particulier, pas qu'il est mal configuré

La colonne STATUS est celle à surveiller. Un node Ready est opérationnel et peut recevoir des pods. Un NotReady signale un problème, le plus souvent le réseau, des ressources épuisées ou un kubelet arrêté. Nuance utile juste après une création de cluster : NotReady y est normal pendant quelques secondes, le temps que le réseau se mette en place.

Un namespace est un espace de noms qui isole logiquement les ressources. Avant de créer des pods, il faut savoir les ranger.

Lister les namespaces
kubectl get namespaces
Résultat
NAME STATUS AGE
default Active 9m
kube-node-lease Active 9m
kube-public Active 9m
kube-system Active 9m
local-path-storage Active 9m
NamespaceUsage
defaultVos applications si vous ne spécifiez rien
kube-systemComposants internes de Kubernetes
kube-publicRessources lisibles par tous
kube-node-leaseGestion interne des heartbeats des nodes
local-path-storageAjouté par Kind pour fournir du stockage local

En production, créez un namespace par application ou par équipe. Au-delà du rangement, c'est ce découpage qui rend possible tout le reste : un namespace sert de périmètre aux quotas de ressources et aux droits d'accès. Sans lui, ces politiques s'appliqueraient au cluster entier ou à rien.

Un Pod est l'unité minimale que Kubernetes déploie. Dans la majorité des cas, il contient un seul conteneur applicatif. Plusieurs conteneurs dans un même Pod partagent le même réseau (même IP) et peuvent partager des volumes.

Lister tous les pods du cluster
kubectl get pods -A
Résultat (extrait)
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-559f6c778d-4wr5k 1/1 Running 0 9m
kube-system etcd-doc-k8s-control-plane 1/1 Running 0 9m
kube-system kube-apiserver-doc-k8s-control-plane 1/1 Running 0 9m
kube-system kube-controller-manager-doc-k8s-control-plane 1/1 Running 0 9m
kube-system kube-proxy-8rrws 1/1 Running 0 9m
kube-system kube-scheduler-doc-k8s-control-plane 1/1 Running 0 9m

Chaque ligne est un pod. La colonne READY indique le nombre de conteneurs prêts sur le total (1/1 = 1 conteneur prêt sur 1).

Regardez les noms : Kubernetes se gère lui-même avec ses propres pods. etcd, kube-apiserver et kube-scheduler sont les composants du control plane, et ils tournent comme n'importe quelle autre application du cluster. Vous n'avez rien à en faire aujourd'hui : ils sont gérés par Kubernetes, et les connaître n'est utile qu'au moment d'administrer un cluster.

En production, ne créez jamais de pod seul. Un pod créé directement avec kubectl run n'est surveillé par personne : s'il plante ou si son nœud tombe, il disparaît définitivement, et rien ne le recrée. C'est la différence qui justifie l'existence des contrôleurs. Pour toute application durable, passez par un Deployment. Les pods seuls gardent leur utilité pour apprendre, tester ou diagnostiquer, ce que fait d'ailleurs ce guide.

Le Deployment : le contrôleur qui maintient vos applications

Section intitulée « Le Deployment : le contrôleur qui maintient vos applications »

Un Deployment est le contrôleur le plus courant pour faire tourner une application. Il ne se contente pas de "créer des pods" : il maintient le bon nombre de répliques, remplace ceux qui tombent et pilote les mises à jour progressives.

Ce que vous déclarezCe que le Deployment fait
replicas: 3Crée et maintient 3 pods
Image nginx:1.29S'assure que tous les pods utilisent cette image
Un pod planteEn relance un automatiquement
Nouvelle version d'imageRolling update sans coupure de service
Lister tous les deployments
kubectl get deployments -A
Résultat (extrait)
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system coredns 2/2 2 2 9m
local-path-storage local-path-provisioner 1/1 1 1 9m

La colonne READY montre pods-prêts/pods-désirés. CoreDNS affiche 2/2 : deux répliques demandées, deux en service. C'est le Deployment qui maintient ce compte, pas vous.

Un Service fournit un point d'accès stable à un groupe de pods. Comme les pods sont éphémères (ils peuvent être recréés avec une nouvelle IP), on ne les contacte pas directement : on passe par le Service, qui garde une adresse stable et répartit le trafic.

ProblèmeSolution du Service
Les pods changent d'IP quand ils redémarrentLe Service garde une IP fixe
Plusieurs pods font le même travailLe Service répartit le trafic (load balancing)
Besoin d'un nom DNS pour l'applicationLe Service expose un nom stable
Lister tous les services
kubectl get services -A
Résultat (extrait)
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 9m

Types de services les plus courants :

  • ClusterIP (défaut) : accessible uniquement depuis l'intérieur du cluster
  • LoadBalancer : accessible depuis l'extérieur via une adresse dédiée

Un cluster neuf n'a que des ClusterIP, comme ci-dessus. Le type LoadBalancer suppose que quelqu'un fournisse l'adresse : un fournisseur cloud en production, un composant à installer en local. Vous en créerez un plus tard dans le parcours.

Voici comment ces objets travaillent ensemble dans un scénario typique :

Dans un cluster, le control plane décide et observe l'état, tandis que les worker nodes hébergent le namespace demo : le Deployment web maintient trois Pods (web-abc12, web-def34, web-ghi56) que le Service web de type ClusterIP route vers ces trois pods

  1. Je crée un namespace demo pour ranger mes ressources

  2. Je déclare un Deployment web avec 3 répliques

  3. Le Deployment crée 3 Pods qui tournent sur les worker nodes

  4. Je crée un Service web qui cible ces pods

  5. Les autres applications appellent le Service, pas les pods directement

Ce modèle déclaratif est la clé de Kubernetes : vous décrivez l'état souhaité, le cluster s'assure de l'atteindre.

Ce que vous n'avez pas besoin de comprendre tout de suite

Section intitulée « Ce que vous n'avez pas besoin de comprendre tout de suite »

Vous croiserez ces composants plus tard dans votre parcours. Pour bien démarrer, concentrez-vous d'abord sur les objets que vous manipulez directement :

ComposantQuand l'apprendre
etcdAdministration avancée
SchedulerAdministration avancée
kube-proxyRéseau avancé
CNI (Calico, Cilium...)Réseau avancé
Admission controllersSécurité avancée

Maîtrisez d'abord Pod, Deployment et Service. Ces trois objets suffisent à déployer la grande majorité des applications, et tout le reste s'y rattache : les ConfigMaps et Secrets alimentent le Pod, l'Ingress se pose devant le Service, les contrôleurs plus spécialisés remplacent le Deployment sur des cas précis.

ConceptDéfinition en une phrase
ClusterEnsemble de machines qui exécutent Kubernetes
NodeUne machine du cluster
NamespaceIsolation logique pour ranger les ressources
PodUnité minimale qui exécute un ou plusieurs conteneurs
DeploymentContrôleur qui maintient et met à jour les pods
ServicePoint d'accès réseau stable vers un groupe de pods

Les 4 idées fondamentales à retenir :

  1. Je ne déploie pas mon application directement sur un node, je la déclare au cluster
  2. Je déploie des pods, généralement via un Deployment
  3. Je passe par un Service pour joindre mes pods
  4. Le cluster répartit tout cela sur les machines disponibles

Les commandes essentielles :

Les commandes de base
kubectl cluster-info # Vérifier la connexion
kubectl get nodes # Lister les machines
kubectl get namespaces # Lister les espaces de noms
kubectl get pods -A # Lister tous les pods
kubectl get deployments -A # Lister tous les deployments
kubectl get services -A # Lister tous les services

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn