Skip to content

1. Les concepts

Formation suivie via le blog de Stéphane Robert : parcours Kubernetes.

3 outils permettent de créer des clusters K8S dans Docker : Kind, k3d/k3s, minikube.

Kind « a été conçu avant tout pour tester Kubernetes » et c’est un installeur certifié conforme par la CNCF.

Terminal window
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
kubectl apply -f fichier.yaml # Appliquer une configuration
kubectl diff -f fichier.yaml # Voir les différences

Ensemble de machines qui travaillent ensemble pour exécuter les applications. Il se compose de deux types de machines :

Le control plane

Cerveau qui surveille l’état du cluster.

Les worker nodes

Celles qui exécutent les conteneurs.

Machine (physique ou virtuelle) qui fait partie du cluster. Chaque node peut exécuter plusieurs pods.

Control plane

Composant Rôle
API Server Point d’entrée unique du cluster : tous les composants passent par lui.
etcd Base clé-valeur qui stocke l’état du cluster. Seul l’API Server y accède.
Scheduler Choisit sur quel node placer chaque nouveau Pod.
Controller Manager Fait tourner les contrôleurs qui ramènent l’état réel vers l’état souhaité.
Cloud Controller Manager Fait le lien avec le fournisseur cloud (load balancers, disques…). Absent hors cloud.

Worker nodes

Composant Rôle
kubelet Agent du node : démarre les Pods qui lui sont assignés et remonte leur état.
kube-proxy Traduit les Services en règles réseau sur le node.
Container runtime Télécharge les images et lance les conteneurs (containerd, CRI-O).

Le détail de chaque composant est dans la fiche 4. L’architecture.

Espace de noms qui isole logiquement les ressources.

Namespace Usage
default vos applications si rien n’est spécifié
kube-system composants internes de Kubernetes
kube-public ressources lisibles par tous
kube-node-lease gestion interne des heartbeats des nodes

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.

Terminal window
kubectl get pods -A

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.

Le Deployment crée des Pods avec des labels qu’il a lui-même déterminés. Ces labels sont nécessaires pour l’identification des Pods et pour les distinguer les uns des autres.

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.

Types de services :

  • ClusterIP (défaut) : accessible uniquement depuis l’intérieur du cluster (pods, autres services). C’est le service par défaut.
  • LoadBalancer : accessible depuis l’extérieur via une adresse dédiée. Nécessite un cloud provider ou MetalLB.
  • NodePort : accessible depuis l’extérieur via un port sur chaque nœud.

Un service ne rend pas les pods publics. Il leur donne d’abord une adresse stable à l’intérieur du cluster : les pods peuvent mourir et renaître avec des adresses différentes, celle du Service ne bouge pas.

Pour obtenir des informations sur un Service :

Terminal window
kubectl describe service <name> -n <namespace>

Deux informations importantes sont à vérifier en cas d’investigation :

  • Selector : label que le Service cherche (ex : app=nginx).
  • Endpoints : adresses IP des Pods qui correspondent au sélecteur.