Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Pourquoi un pod ne démarre pas

Après cette leçon: Je peux lire describe et logs et nommer la panne d’un pod qui ne démarre pas.

Leçon de 55 min12 commandesLab Kubernetes : un cluster k3s à un nœud pour chaque élève, sur une VM Ubuntu privée

Trois pods, trois pannes

Un pod en panne est un pod dont le statut n’est pas Running. Les trois statuts les plus courants sont ImagePullBackOff, Pending et CrashLoopBackOff, et deux commandes, kubectl describe et kubectl logs, suffisent à nommer la panne.

Vous êtes de garde à l’atelier d’impression d’un lycée. Trois services ne démarrent pas, et personne ne sait pourquoi. Vous avez dix minutes.

À la fin de cette leçon

Remarque

Je peux lire describe et logs et nommer la panne d’un pod qui ne démarre pas.

Mots-clés

MotCe que ça veut direExemple
ImagePullBackOffKubernetes ne trouve pas l’image du conteneurErrImagePull
Pendingle pod attend encore une place sur un nœud
CrashLoopBackOffle programme s’arrête, et Kubernetes le relance sans fin
Événementune phrase que Kubernetes écrit sur ce qu’il tente
Journalce que le programme du pod a écrit
Code de sortiele nombre rendu quand un programme s’arrête3

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Fabriquer trois pannes pour les lire

Les six Runs suivants créent un espace atelier et trois Deployments, chacun cassé à sa façon. imprimante nomme une image qui n’existe pas : busyboxx, avec deux x. gros-calcul demande 64 Gi de mémoire, bien plus que la machine. connexion écrit un message d’erreur puis s’arrête avec le code 3.

Chacun affiche deployment.apps/… created, resource requirements updated ou scaled.

Créer l’espace atelier

Commande
kubectl create namespace atelier

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.

Lancer un Deployment à l’image fausse

Commande
kubectl create deployment imprimante --image=busyboxx:1.37.0 -n atelier -- sleep 3600

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.

Créer un Deployment sans pod

Commande
kubectl create deployment gros-calcul --image=busybox:1.37.0 --replicas=0 -n atelier -- sleep 3600

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.

Lui demander 64 Gi de mémoire

Commande
kubectl set resources deployment/gros-calcul -n atelier --requests=memory=64Gi

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.

Lui demander un pod

Commande
kubectl scale deployment gros-calcul --replicas=1 -n atelier

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.

Lancer un programme qui plante

Commande
kubectl create deployment connexion --image=busybox:1.37.0 -n atelier -- sh -c 'echo "base de donnees introuvable"; exit 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.

La colonne STATUS donne le premier indice

Attendez une vingtaine de secondes, puis lisez le tableau. Il montre trois pods, chacun avec 0/1 dans READY. imprimante est en ImagePullBackOff, ou en ErrImagePull un instant avant. gros-calcul est en Pending. connexion est en Error ou en CrashLoopBackOff, selon l’instant.

Le statut dit quoi. Pour savoir pourquoi, il faut lire les événements, ou le journal.

Lire le tableau des pods

Commande
kubectl get pods -n atelier

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é : du statut à la commande

StatutCe que cela veut direOù chercher
ErrImagePull, ImagePullBackOffL’image est introuvabledescribe : la phrase Failed to pull image
PendingAucun nœud ne peut accueillir le poddescribe : la phrase Insufficient
Error, CrashLoopBackOffLe programme s’arrêtelogs, puis le code de sortie

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une image introuvable se lit dans describe

kubectl describe pod écrit tout ce que Kubernetes sait d’un pod, et finit par ses événements. Cette liste est trop longue pour un Run : le filtre grep -o garde la seule phrase utile.

Le Run affiche Failed to pull image "busyboxx:1.37.0" : Kubernetes a cherché cette image et ne l’a pas trouvée. Le nom est faux d’une lettre.

Lire pourquoi l’image échoue

Commande
kubectl describe pod -n atelier -l app=imprimante | grep -o 'Failed to pull image "[^"]*"' | head -n 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.

Un pod Pending attend une place

Pour gros-calcul, les événements disent que le nœud n’a pas la mémoire demandée. Le Run suivant affiche Insufficient memory.

Aucune image n’est en cause et le programme n’a pas démarré. Il faut demander moins de mémoire, ou ajouter une machine.

Lire pourquoi le pod attend

Commande
kubectl describe pod -n atelier -l app=gros-calcul | grep -o "Insufficient memory" | head -n 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.

Un programme qui plante se lit dans logs

Pour connexion, le conteneur a bien démarré, puis il s’est arrêté. Ce qu’il a écrit avant de s’arrêter se lit avec kubectl logs : le Run affiche base de donnees introuvable.

Le second Run extrait le code de sortie : 3. Zéro veut dire « tout va bien ». Tout autre nombre est un échec.

Lire le journal du programme

Commande
kubectl logs deployment/connexion -n atelier

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.

Lire le code de sortie

Commande
kubectl describe pod -n atelier -l app=connexion | grep -m 1 "Exit Code" | awk '{print $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.

Erreur fréquente

Attention

Beaucoup pensent qu’un pod qui ne démarre pas est une panne du cluster. Le plus souvent, la faute est dans ce que vous avez écrit : image, ressources ou programme. Lisez STATUS, puis describe pour une image ou une place, puis logs pour un programme.

Supprimer l’espace atelier

Commande
kubectl delete namespace atelier

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.

À propos de ce labo et de sa source: Lab Kubernetes : un cluster k3s à un nœud pour chaque élève, sur une VM Ubuntu privée

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.