- Authors

- Name
- Phillip Pham
- @ddppham
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 sehen | Erster Blick | Weiter |
|---|---|---|
| Pending, NODE leer | Events: FailedScheduling | Pod Pending |
| Pending wegen Volume | PVC nicht Bound | PVC Pending |
| ContainerCreating | FailedMount, Sandbox, CNI | ContainerCreating hängt |
| ImagePullBackOff | Event: Failed to pull image | ImagePullBackOff |
| CreateContainerConfigError | Secret oder Key fehlt | CreateContainerConfigError |
| CrashLoopBackOff | logs --previous, Exit-Code | CrashLoopBackOff |
| Exit 1 | Anwendungsfehler im Log | Exit Code 1 |
| Exit 137, Reason OOMKilled | Memory-Limit | Exit Code 137 |
| Exit 143 beim Stoppen | SIGTERM | Exit Code 143 |
| Evicted | Node-Druck, Disk oder RAM | Pod Evicted |
| Terminating, minutenlang | Finalizer oder toter Node | Pod Terminating |
| Running, aber kein Name auflösbar | CoreDNS, ndots, Policy | DNS fehlgeschlagen |
| Service, keine Pods dahinter | Endpoints leer | Service ohne Endpoints |
| Ingress, ADDRESS leer | Controller oder Class | Ingress ohne Address |
| Node NotReady | Kubelet, nicht der Pod | Node NotReady |
| connection refused, Port 6443 | API-Server, kubeconfig | connection refused 6443 |
| Error from server (Forbidden) | RBAC, nicht das Objekt | Forbidden |
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
Exit Code 1: die erste Zeile im Previous-Log
Exit Code 1 auf Kubernetes: die Anwendung beendet sich selbst. kubectl logs --previous zeigt die Zeile. Speicher, Image-Pull und SIGKILL sind andere Codes.
CrashLoopBackOff beheben: Logs, Probes, Exit-Code
CrashLoopBackOff beheben: kubectl logs --previous, Exit-Codes 1, 137 und 139, Liveness-Probes. Der Unterschied zu ImagePullBackOff in wenigen Minuten.
Pod Terminating hängt: Finalizer entfernen
Pod Terminating hängt: Finalizer finden, Grace-Period abwarten, Force-Delete nur wenn der Node weg ist. Der kubectl-Patch, und wann er ein Volume beschädigt.
kubectl connection refused 6443 beheben
kubectl connection refused auf Port 6443: der API-Server antwortet nicht. kubeconfig, Kontext, Firewall, API-Prozess. Der Pod-Status kommt erst danach.
Error from server Forbidden: RBAC-Recht
kubectl Forbidden: Error from server (Forbidden) nennt User, Verb und Ressource. kubectl auth can-i zeigt das Recht, bevor jemand cluster-admin vergibt.
CreateContainerConfigError: Secret und ConfigMap
CreateContainerConfigError: fehlendes Secret, falscher Key oder Namespace. Der Container startet nicht, logs --previous bleibt leer. Das Event nennt das Objekt.
Exit Code 143: SIGTERM und Graceful Shutdown
Exit Code 143 ist SIGTERM: 128 plus 15. Beim Rollout ist das normal. Im Loop fehlt ein Handler oder die Grace-Period ist kürzer als der Stopp der Anwendung.
ImagePullBackOff beheben: Auth, Name, Limit
ImagePullBackOff beheben: Image-Name, imagePullSecrets und Registry-Rate-Limits. Welches Event den Unterschied macht und wann es kein CrashLoopBackOff ist.