Ein Pod hängt im `Pending`-Status fest und wird nicht geplant.
→Führen Sie `kubectl describe pod <pod-name>` aus. Überprüfen Sie den Abschnitt `Events` auf Meldungen vom Scheduler.
Warum: Der `describe`-Befehl ist das primäre Werkzeug dafür. Er zeigt Gründe wie "Insufficient cpu/memory", "node(s) had taints the pod didn't tolerate" oder "didn't match node selector".
Ein Pod startet und schlägt wiederholt fehl, mit dem Status `CrashLoopBackOff`.
→1. `kubectl logs <pod-name> --previous`, um die Logs des abgestürzten Containers zu sehen. 2. `kubectl describe pod <pod-name>`, um den Exit-Code und den Grund zu überprüfen.
Warum: `CrashLoopBackOff` bedeutet, dass die Anwendung im Container beendet wird. Die Logs der vorherigen Instanz (`--previous`) sind entscheidend, da der aktuelle Container möglicherweise noch nichts Nützliches protokolliert hat. Der Exit-Code kann auch die Art des Fehlers anzeigen.
Ein Pod startet nicht mit dem Status `ImagePullBackOff` oder `ErrImagePull`.
→`kubectl describe pod <pod-name>`, um die Ereignismeldung zu sehen. Überprüfen Sie, ob der Image-Name und das Tag korrekt sind. Bei privaten Registries stellen Sie sicher, dass ein `imagePullSecrets` konfiguriert und das Secret gültig ist.
Warum: Dies ist ein Problem mit der Registry oder dem Image-Namen, nicht ein Anwendungsproblem. Häufige Ursachen sind Tippfehler, falsche Tags oder Authentifizierungsfehler bei einer privaten Registry.
Ein Node hat den Status `NotReady`.
→Stellen Sie eine SSH-Verbindung zum betroffenen Node her. Überprüfen Sie den kubelet-Dienststatus mit `systemctl status kubelet`. Zeigen Sie dessen Logs mit `journalctl -u kubelet` an.
Warum: Der `kubelet` ist der Agent, der für die Meldung des Node-Zustands verantwortlich ist. Wenn er ausgefallen ist oder nicht mit dem API server kommunizieren kann, wird der Node als NotReady markiert. Seine Logs sind der erste Ort, an dem nachgesehen werden sollte.
Ein Service existiert, aber der Traffic erreicht die Backend-Pods nicht.
→1. `kubectl describe svc <service-name>` und überprüfen Sie, ob der `Selector` mit den Pod-Labels übereinstimmt. 2. `kubectl get endpoints <service-name>` und stellen Sie sicher, dass die korrekten Pod-IPs aufgeführt sind. Falls nicht, sind die Labels falsch zugeordnet.
Warum: Die Verbindung zwischen einem Service und seinen Pods ist der Label-Selektor. Wenn der Selektor falsch ist oder die Pods nicht die richtigen Labels haben, ist das Endpoints-Objekt leer, und der Service hat keinen Ort, an den er Traffic routen kann.
Pods können Dienstnamen oder externe Hostnamen nicht auflösen.
→1. Überprüfen Sie, ob CoreDNS-Pods in `kube-system` laufen. 2. Überprüfen Sie die CoreDNS-Logs. 3. Führen Sie einen Debug-Pod (z. B. `busybox`) aus und verwenden Sie `nslookup`, um die Auflösung innerhalb des Clusters zu testen.
Warum: DNS ist eine kritische Cluster-Abhängigkeit. Fehler gehen normalerweise auf die CoreDNS-Bereitstellung selbst, ihre Konfiguration (in einer ConfigMap) oder Netzwerk-Policies zurück, die DNS-Traffic auf UDP/TCP Port 53 blockieren.
Ein Node muss für Wartungsarbeiten offline genommen werden.
→Zuerst `kubectl cordon <node-name>`, um ihn als nicht planbar zu markieren. Dann `kubectl drain <node-name> --ignore-daemonsets`, um alle Benutzer-Pods sicher zu entfernen.
Warum: `cordon` verhindert, dass neue Pods geplant werden. `drain` respektiert PodDisruptionBudgets und entfernt Pods graceful. `--ignore-daemonsets` wird benötigt, weil DaemonSet-Pods nicht entfernt werden können.
Identifizieren, welche Pods oder Nodes die meiste CPU oder den meisten Speicher verbrauchen.
→Verwenden Sie `kubectl top pods` und `kubectl top nodes`. Dies erfordert, dass der `metrics-server` im Cluster bereitgestellt ist.
Warum: `kubectl top` bietet eine schnelle Echtzeitansicht des Ressourcenverbrauchs, unerlässlich zur Identifizierung ressourcenhungriger Anwendungen oder Node-Ressourcenengpässe.
Ein Pod befindet sich seit langem im `Terminating`-Status und wird nicht entfernt.
→Löschen Sie den Pod zwangsweise mit `kubectl delete pod <pod-name> --grace-period=0 --force`.
Warum: Dies kann passieren, wenn ein Finalizer festhängt oder der kubelet Ressourcen nicht bereinigen kann. Das erzwungene Löschen entfernt den Pod sofort vom API server, sollte aber als letztes Mittel eingesetzt werden, da es verwaiste Ressourcen auf dem Node hinterlassen kann.