Qu’est-ce que Kubernetes ?
Kubernetes est un logiciel qui lance des programmes sur un groupe d’ordinateurs et les garde en marche. Pour le lire et le dépanner, il faut d’abord comprendre trois notions : le nœud, l’espace de noms et le pod.
Prenez le site de réservation de billets d’une compagnie ferroviaire. Le soir d’un départ en vacances, des milliers de personnes se connectent. Personne ne veut démarrer des machines à la main : Kubernetes s’en charge.
À la fin de cette leçon
Remarque
Je peux dire ce qu’est un nœud, un espace de noms et un pod, et les lister avec kubectl get.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Cluster | un groupe de machines gérées ensemble | |
| Nœud | une machine du cluster | |
| Espace de noms | un dossier qui range les objets d’un projet | kube-system |
| Pod | un ou plusieurs conteneurs lancés ensemble | |
| Conteneur | un programme isolé, avec ce dont il a besoin | |
| kubectl | la commande qui parle au cluster |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un cluster est un groupe de nœuds
Un cluster est un groupe de machines que Kubernetes gère comme un tout. Chaque machine du groupe s’appelle un nœud.
Le nœud qui décide où tourne chaque programme porte le rôle control-plane, le plan de contrôle. Dans une grande entreprise, il y a plusieurs nœuds. Dans ce labo, il n’y en a qu’un : k3s, une version légère de Kubernetes, tient dans une seule machine.
Lister le nœud du cluster
kubectl get nodes --no-headers | awk '{print $2, $3, $5}'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Que dit la ligne du nœud ?
La commande affiche une ligne : Ready control-plane v1.35.9+k3s1. Ready veut dire que le nœud est prêt à recevoir des pods. control-plane est son rôle. La dernière colonne est la version de Kubernetes que fait tourner ce k3s.
awk ne garde ici que trois colonnes : sans lui, kubectl get nodes affiche aussi le nom du nœud et son âge, qui changent d’une machine à l’autre.
Un espace de noms range les objets
Un espace de noms (en anglais namespace) est comme un dossier : il range les objets d’un projet et les sépare de ceux des autres. Deux projets peuvent avoir chacun un objet appelé menu, tant qu’ils sont dans deux espaces de noms différents.
Kubernetes en crée quatre tout seul. Lancez la commande pour les lire, puis comparez avec le tableau.
Lister les espaces de noms
kubectl get namespaces --no-headers | awk '{print $1}'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple travaillé : les quatre espaces du départ
| Espace de noms | Ce qu’il contient |
|---|---|
| default | Ce que vous créez sans préciser d’espace |
| kube-system | Les pods que Kubernetes lance pour lui-même |
| kube-public | Ce que tout le monde peut lire |
| kube-node-lease | Les signes de vie des nœuds |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Compter les pods du système
kubectl get pods -n kube-system --no-headers | wc -lAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Les pods que Kubernetes lance lui-même
L’option -n choisit l’espace de noms. Dans kube-system, la commande compte deux pods : coredns, qui sert les noms (leçon 3), et local-path-provisioner, qui donne du disque aux pods qui en demandent.
Sans -n, kubectl regarde l’espace default. Pour tout voir d’un coup, on écrit -A, pour all namespaces.
Erreur fréquente
Attention
Beaucoup pensent que kubectl get pods liste tous les pods du cluster. Il ne liste que ceux de l’espace de noms courant, default au départ. Un « No resources found » veut donc souvent dire : vous regardez au mauvais endroit. Ajoutez -n nom ou -A.
Le pod est le plus petit objet
Un pod est l’unité que Kubernetes lance : un ou plusieurs conteneurs qui tournent ensemble sur le même nœud. Le plus souvent, un pod ne contient qu’un conteneur.
Les trois Runs suivants créent un espace cantine, y lancent un pod qui écrit une ligne puis s’arrête (--restart=Never), et attendent qu’il ait fini.
Créer l’espace cantine
kubectl create namespace cantineAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lancer un pod qui dit bonjour
kubectl run bonjour -n cantine --image=busybox:1.37.0 --restart=Never -- echo "Bonjour de la cantine"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Attendre la fin du pod
kubectl wait --for=jsonpath='{.status.phase}'=Succeeded pod/bonjour -n cantine --timeout=60sAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lire ce que le pod a écrit
kubectl logs bonjour -n cantineAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Que montrent ces quatre Runs ?
Le premier affiche namespace/cantine created, le deuxième pod/bonjour created. Le troisième affiche pod/bonjour condition met quand le pod a fini. Le dernier affiche la ligne écrite par le programme : Bonjour de la cantine.
Le labo n’a pas accès à Internet : l’image busybox:1.37.0 est la seule qu’il possède, donc tous les pods du cours l’utilisent.
Lire l’état final du pod
kubectl get pod bonjour -n cantine --no-headers | awk '{print $2, $3}'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple travaillé : lire un tableau de pods
| Colonne | Elle dit | Exemple |
|---|---|---|
| NAME | Le nom du pod | menu-5c4b7-fghij |
| READY | Conteneurs prêts sur conteneurs du pod | 1/1, ou 0/1 pour le pod qui a fini |
| STATUS | Où en est le pod | Running, Pending, Completed |
| RESTARTS | Combien de fois un conteneur a redémarré | 0 |
| AGE | Depuis combien de temps il existe | 5m |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Supprimer l’espace cantine
kubectl delete namespace cantineAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.