Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Kubernetes Pod startet nicht: Fehlersuche

Nach dieser Lektion: Ich kann mit describe und logs den Fehler eines Pods benennen.

Lektion, 60 Min.9 BefehleKubernetes-Lab: ein k3s-Cluster mit einem Knoten für jede lernende Person auf einer privaten Ubuntu-VM

Warum läuft mein Pod nicht?

Läuft ein Pod in Kubernetes nicht, sagt sein Status schon, in welche Richtung Sie suchen müssen: Pending, ImagePullBackOff oder CrashLoopBackOff. Mit kubectl describe und kubectl logs finden Sie dann den genauen Grund.

Das Rechenzentrum eines Stadtwerks meldet morgens drei Programme als „nicht bereit“. Wer die Statuswörter kennt, braucht für jedes nur eine Minute.

Am Ende dieser Lektion

Notiz

Ich kann mit describe und logs den Fehler eines Pods benennen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Pendingder Pod ist angelegt, aber noch auf keinem Knoten gestartet
ImagePullBackOffdas Image lässt sich nicht holen, Kubernetes wartet und versucht es erneut
CrashLoopBackOffdas Programm startet, endet mit Fehler und wird immer wieder gestartet
describeder Befehl, der ein Objekt mit seinen Ereignissen beschreibtkubectl describe pod
logsder Befehl, der ausgibt, was das Programm selbst geschrieben hatkubectl logs
Ereigniseine Meldung von Kubernetes darüber, was mit einem Objekt geschah

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Der Status sagt, wo Sie suchen müssen

Die Spalte STATUS von kubectl get pods ist die erste Spur. Jedes Wort steht für eine andere Phase.

Wir legen im Namespace kurs5 drei Programme an, die jeweils auf eigene Art scheitern. Das erste nennt ein Image, das es nicht gibt. Das zweite verlangt 100 Kerne, mehr als die Maschine hat. Das dritte liest eine Datei, die nicht da ist.

Den Namespace kurs5 anlegen

Befehl
kubectl create namespace kurs5

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Deployment mit falschem Image-Tag anlegen

Befehl
kubectl create deployment bild -n kurs5 --image=busybox:1.99.0 -- sleep 3600

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Einen Pod anlegen, der 100 Kerne verlangt

Befehl
kubectl run gross -n kurs5 --image=busybox:1.37.0 --overrides='{"spec":{"containers":[{"name":"gross","image":"busybox:1.37.0","command":["sleep","3600"],"resources":{"requests":{"cpu":"100"}}}]}}'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Deployment anlegen, das eine fehlende Datei liest

Befehl
kubectl create deployment absturz -n kurs5 --image=busybox:1.37.0 -- sh -c 'cat /etc/einstellung/app.conf'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Warten Sie, bis der Fehler sichtbar wird

Ein Pod braucht etwas Zeit, bis sein Fehler im Status steht. Warten Sie gut eine halbe Minute und drücken Sie dann Ausführen. Steht noch ContainerCreating, warten Sie weiter.

Der Befehl zeigt dann drei Pods mit drei verschiedenen Status. Die Namen der Pods enden bei jedem Lauf anders.

Die Pods in kurs5 anzeigen

Befehl
kubectl get pods -n kurs5

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Statuswort, Bedeutung und erster Schritt

StatusBedeutungErster Schritt
ErrImagePull oder ImagePullBackOffDas Image lässt sich nicht holendescribe lesen: Name und Tag prüfen
PendingKein Knoten nimmt den Pod aufdescribe lesen: Ereignis FailedScheduling
Error oder CrashLoopBackOffDas Programm endet mit Fehlerlogs lesen
ContainerCreatingDer Container wird noch gebautEinige Sekunden warten

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

describe nennt die Ereignisse eines Pods

kubectl describe pod gibt viel aus. Die wichtigste Stelle steht ganz unten im Abschnitt Events: die Meldungen von Kubernetes, älteste oben.

Die Befehle unten filtern aus dieser Ausgabe nur die Zeilen, die den Grund nennen. Beim ersten steht der Name des Images, das sich nicht holen ließ. Beim zweiten steht, welche Ressource fehlt.

Die Meldung zum Image lesen

Befehl
kubectl describe pod -n kurs5 -l app=bild | grep "Failed to pull image" | head -n 1

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Meldung des Schedulers lesen

Befehl
kubectl describe pod gross -n kurs5 | grep FailedScheduling

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

logs zeigt, was das Programm selbst sagt

Ein Pod, der startet und endet, hat eine eigene Meldung. Das Programm schreibt sie, nicht Kubernetes. Sie steht in den Logs.

kubectl logs deployment/absturz gibt die Meldung des Programms aus. Hier sagt sie, welche Datei fehlt.

Die Logs des abgestürzten Programms lesen

Befehl
kubectl logs -n kurs5 deployment/absturz

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, kubectl logs helfe bei jedem kaputten Pod. Ein Pod im Status Pending oder ImagePullBackOff hat nie ein Programm gestartet. Also gibt es auch keine Logs. Lesen Sie in diesen Fällen kubectl describe. Logs gibt es erst, wenn das Programm wenigstens einmal lief.

Den Namespace kurs5 wieder löschen

Befehl
kubectl delete namespace kurs5

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Über dieses Lab und seinen Quellcode: Kubernetes-Lab: ein k3s-Cluster mit einem Knoten für jede lernende Person auf einer privaten Ubuntu-VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.