
Cluster, Noeud (Node), Pod, Service, Déploiement (Deployment), Namespace
Maîtrisez le vocabulaire essentiel de Kubernetes. Ce guide définit clairement les concepts de Cluster, Noeud, Pod, Service, Déploiement et Namespace.
Introduction aux composants fondamentaux de Kubernetes
Pour naviguer dans l'univers Kubernetes, il est indispensable de comprendre les objets qui le composent et leurs interactions. Ce sous-chapitre décompose les éléments constitutifs que vous rencontrerez constamment : le Cluster, la fondation de votre environnement ; les Noeuds, les machines qui exécutent vos applications ; les Pods, l'unité de base pour vos conteneurs ; les Services, qui rendent vos applications accessibles ; les Déploiements, qui gèrent le cycle de vie de vos Pods ; et les Namespaces, qui organisent logiquement votre cluster.
Chacun de ces termes représente un concept clé avec un rôle spécifique. Les maîtriser vous permettra de comprendre comment Kubernetes orchestre vos applications conteneurisées, gère les ressources et assure la résilience. Commençons par la vue d'ensemble : le Cluster.
Le Cluster : votre centre de données Kubernetes
Un Cluster Kubernetes est l'ensemble complet des ressources managées par Kubernetes. Il est constitué d'un ensemble de machines, appelées Noeuds, qui exécutent vos applications conteneurisées. Le Cluster comprend également des composants maîtres (le Control Plane) qui prennent les décisions globales de gestion du cluster (planification des applications, maintien de l'état désiré, etc.) et communiquent avec les noeuds.
Pensez au Cluster comme à votre propre centre de données virtuel, fournissant une couche d'abstraction unifiée sur une ou plusieurs machines physiques ou virtuelles. C'est le périmètre principal dans lequel vos ressources Kubernetes (Pods, Services, etc.) vont vivre et interagir. Lorsque vous interagissez avec Kubernetes via kubectl, vous ciblez toujours un Cluster spécifique.
Le Noeud (Node) : la puissance de calcul
Un Noeud (Node) est une machine de travail dans un cluster Kubernetes. Il peut s'agir d'une machine virtuelle (VM) hébergée par un fournisseur cloud ou d'une machine physique (bare-metal) dans votre propre centre de données. Chaque Noeud possède les services nécessaires pour exécuter des Pods (qui contiennent vos conteneurs applicatifs) et est géré par le Control Plane du cluster.
Les Noeuds sont les ressources de calcul effectives de votre cluster. Ils fournissent le CPU, la mémoire vive (RAM) et le stockage nécessaires à l'exécution de vos applications. Kubernetes distribue et planifie intelligemment l'exécution des Pods sur les différents Noeuds disponibles, en fonction des ressources requises et disponibles, assurant ainsi une utilisation optimale et une tolérance aux pannes (si un Noeud tombe, les Pods peuvent être replanifiés sur d'autres Noeuds).
Le Pod : l'unité atomique d'exécution
Le Pod est la plus petite unité déployable et gérable dans Kubernetes. Il représente une instance unique d'un processus en cours d'exécution dans votre cluster. Un Pod encapsule un ou plusieurs conteneurs applicatifs (comme des conteneurs Docker/OCI), les ressources de stockage associées, une identité réseau unique (une adresse IP propre au Pod) et des options qui gouvernent la manière dont les conteneurs doivent s'exécuter.
Il est crucial de comprendre qu'un Pod est conçu pour être éphémère. Si un Pod échoue ou est supprimé, Kubernetes peut en créer un nouveau pour le remplacer, mais ce nouveau Pod aura une nouvelle adresse IP. C'est pourquoi on n'accède généralement pas directement aux Pods, mais plutôt via un Service. Bien qu'un Pod puisse contenir plusieurs conteneurs, le cas le plus courant est celui d'un Pod contenant un seul conteneur principal, parfois accompagné de conteneurs auxiliaires ("sidecars") pour des tâches comme la collecte de logs ou le proxying.
Les conteneurs au sein d'un même Pod partagent le même espace réseau (ils peuvent communiquer via localhost) et peuvent partager des volumes de stockage. Cette colocalisation est utile pour les conteneurs qui doivent travailler en étroite collaboration.
Le Service : point d'accès réseau stable
Comme les Pods sont éphémères et que leurs adresses IP peuvent changer, Kubernetes introduit le concept de Service. Un Service est une abstraction qui définit un ensemble logique de Pods et une politique pour y accéder. Il fournit une adresse IP stable et un nom DNS unique au sein du cluster, qui redirige le trafic vers les Pods correspondants (sélectionnés généralement via des Labels).
Le Service agit comme un point d'entrée réseau stable pour votre application ou une partie de celle-ci. Même si les Pods sous-jacents sont créés, détruits ou mis à l'échelle, l'adresse IP et le nom DNS du Service restent constants, permettant aux autres composants du cluster (ou aux utilisateurs externes, selon le type de Service) de trouver et de communiquer avec l'application de manière fiable.
Il existe plusieurs types de Services (par exemple, ClusterIP pour une exposition interne au cluster, NodePort pour exposer sur un port statique de chaque Noeud, LoadBalancer pour provisionner un équilibreur de charge externe chez un fournisseur cloud). Le rôle fondamental reste le même : découpler la découverte réseau de la gestion du cycle de vie des Pods.
Le Déploiement (Deployment) : gestionnaire d'applications déclaratif
Le Déploiement (Deployment) est un objet Kubernetes de plus haut niveau qui gère le cycle de vie des Pods de manière déclarative. Sa fonction principale est de s'assurer qu'un nombre spécifié d'instances (réplicas) de Pods sont en cours d'exécution et disponibles à tout moment. Si un Pod géré par un Déploiement tombe en panne, le contrôleur du Déploiement le remplacera automatiquement pour maintenir l'état désiré.
Les Déploiements sont l'outil privilégié pour déployer des applications sans état (stateless) sur Kubernetes. Ils facilitent également les mises à jour applicatives (par exemple, passer à une nouvelle version d'image de conteneur) en utilisant différentes stratégies de déploiement (comme le Rolling Update, qui met à jour les Pods progressivement sans interruption de service) et permettent de revenir facilement à une version précédente (rollback) en cas de problème.
Techniquement, un Déploiement gère des objets appelés ReplicaSets, qui sont eux-mêmes responsables de maintenir le nombre exact de Pods en cours d'exécution. Cependant, en tant qu'utilisateur, vous interagirez principalement avec l'objet Déploiement.
Le Namespace : isolation logique des ressources
Un Namespace (espace de noms) fournit un mécanisme pour isoler des groupes de ressources au sein d'un même cluster physique. C'est comme créer des "clusters virtuels" à l'intérieur de votre cluster principal. Les noms des ressources (comme les Pods, Services, Déploiements) doivent être uniques au sein d'un Namespace, mais pas nécessairement à travers tous les Namespaces.
Les Namespaces sont utiles pour organiser le cluster, par exemple, en séparant les environnements (développement, test, production), les équipes ou les projets. Ils permettent également d'appliquer des politiques de contrôle d'accès (RBAC) et des quotas de ressources (limites sur la quantité de CPU ou de mémoire) par Namespace.
Kubernetes démarre avec quelques Namespaces prédéfinis, comme default (où les objets sont créés si aucun Namespace n'est spécifié), kube-system (pour les objets créés par le système Kubernetes lui-même) et kube-public (lisible par tous les utilisateurs). Il est fortement recommandé de créer et d'utiliser vos propres Namespaces pour organiser vos applications plutôt que de tout placer dans default.