Veröffentlicht am

Pod startet nicht: Status lesen, dann der Fix

Teilen:
Authors

Pod startet nicht: Status lesen, dann der Fix

TL;DR

Ein Pod hat einen Status. Der Status ist die Weiche, nicht die Diagnose. Lesen Sie ihn, bevor Sie etwas ändern:

kubectl get pod POD
kubectl describe pod POD

Pending ist der Scheduler. ContainerCreating ist Volume, Sandbox oder Netz. ImagePullBackOff ist die Registry. CreateContainerConfigError ist Secret oder ConfigMap. CrashLoopBackOff ist ein Prozess, der schon lief und sich beendet hat. Evicted ist Druck auf dem Node. Schlägt kubectl selbst fehl, ist der Pod nicht das Problem.

Welcher Status, welcher Artikel

Was Sie sehenErster BlickWeiter
Pending, NODE leerEvents: FailedSchedulingPod Pending
Pending wegen VolumePVC nicht BoundPVC Pending
ContainerCreatingFailedMount, Sandbox, CNIContainerCreating hängt
ImagePullBackOffEvent: Failed to pull imageImagePullBackOff
CreateContainerConfigErrorSecret oder Key fehltCreateContainerConfigError
CrashLoopBackOfflogs --previous, Exit-CodeCrashLoopBackOff
Exit 1Anwendungsfehler im LogExit Code 1
Exit 137, Reason OOMKilledMemory-LimitExit Code 137
Exit 143 beim StoppenSIGTERMExit Code 143
EvictedNode-Druck, Disk oder RAMPod Evicted
Terminating, minutenlangFinalizer oder toter NodePod Terminating
Running, aber kein Name auflösbarCoreDNS, ndots, PolicyDNS fehlgeschlagen
Service, keine Pods dahinterEndpoints leerService ohne Endpoints
Ingress, ADDRESS leerController oder ClassIngress ohne Address
Node NotReadyKubelet, nicht der PodNode NotReady
connection refused, Port 6443API-Server, kubeconfigconnection refused 6443
Error from server (Forbidden)RBAC, nicht das ObjektForbidden

kubectl get pod POD -o wide zeigt, ob überhaupt ein Node zugewiesen ist. Leere Spalte NODE heißt: der Scheduler war noch nicht erfolgreich. Ein Node-Name heißt: alles Weitere passiert auf diesem Node.

Drei Verwechslungen, die Zeit kosten

CrashLoop und ImagePull. Beim ImagePull ist Restart Count 0, Logs existieren nicht. Beim CrashLoop ist der Zähler größer als 0, und --previous hat Ausgabe. Wer am Secret schraubt, während das Image nicht existiert, ändert die falsche Zeile.

Pending und ContainerCreating. Pending hat keinen Node. ContainerCreating hat einen. Ab da sind Requests, Taints und Quota erledigt. Übrig sind Mount, CNI und das Pause-Image.

Exit-Code und Reason. 137 allein ist SIGKILL. Nur Reason: OOMKilled ist das Memory-Limit. Dieselbe Zahl mit Reason: Error ist oft die Liveness-Probe. 143 beim Rollout ist ein normaler Stopp, 143 im Minutentakt ist ein Kill.

Wenn kubectl gar nicht antwortet

The connection to the server localhost:6443 was refused erreicht den API-Server nicht. Kein Pod-Status der Welt erklärt das. Zuerst Port 6443: Kontext, URL, Firewall, API-Prozess.

Error from server (Forbidden) hat den API-Server erreicht. Er hat den Request abgelehnt. Das Objekt kann gesund sein. Zuerst welches Recht fehlt, mit kubectl auth can-i.

Eine Änderung, dann wieder der Status

Löschen und hoffen wiederholt das Spec. Ein geänderter Request, ein neues Secret oder ein anderes Image, danach dasselbe describe. Steht dort noch die alte Meldung, ist der Rollout nicht angekommen: kubectl rollout status deployment/NAME.

Quellen

📖 Verwandte Artikel

Weitere interessante Beiträge zu ähnlichen Themen