Troubleshooting Kubernetes Cluster - Befehle

In diesem Blogbeitrag finden Sie eine Reihe von Befehlen, mit denen Sie den Zustand Ihres Kubernetes-Clusters überprüfen können. Diese Seite ist eine persönliche Notiz und erhebt keinen Anspruch auf Vollständigkeit.

 

Bewertung des Gesamtzustands des Clusters

Version des Clusters anzeigen:

kubectl version

Als nächstes können wir uns die wichtigsten Ressourcen des Clusters ansehen:

kubectl cluster-info

und auch:

kubectl get cs

"cs" steht für "componentstatuses"

Überprüfen, ob alle Nodes korrekt registriert sind:

kubectl get nodes -o wide 

-o (kurz für --output)

wide - zeigt zusätzliche Informationen

Allgemeine Informationen zum Cluster anzeigen:

kubectl config view 

Die untere Befehlskette zeigt die die Abschnitte über die zugewiesenen Ressourcen (CPU, Memory, Storage usw.) für jeden Knoten im Cluster.

kubectl describe nodes | grep "Allocated resources" -A6

Die Option -A6 (die Zahl kann variieren) bedeutet, dass die nächsten sechs Zeilen der Ausgabe angezeigt werden.

 

Worker Nodes – Troubleshooting

Hardware-Ressourcen und Netzwerkkonfiguration überprüfen:

top oder htop - zeigt in Echtzeitansicht die aktuelle CPU- und RAM-Auslastung an, sowie andere Informationen wie Prozess-ID (PID) des Benutzers, CPU-Zeit usw.

kubectl top node <node-name> -n <namespca-name>

So sieht die Ausgabenstruktur aus.

 NAMESPACE   NAME   CPU(cores)   MEMORY(bytes) 

Die Ausgabe lässt sich mit dem Befehl "sort" sortieren:

kubectl top pod -A | sort -k 3 -nr

sort - Sortierbefehl.
-k 3 - sortiert nach der dritten Spalte (CPU-Auslastung).
-nr - sortiert numerisch (n) in umgekehrter Reihenfolge (r) (hoch nach niedrig). 

df -h - zeigt die Festplatten-Belegung an.

free -m - zeigt die Nutzung des Arbeitsspeichers (RAM) und des Swap-Speichers an. -m – steht für Megabyte (MB)

ip addr - zeigt die Netzwerkkonfiguration. Weitere Informationen zu den IP-Befehlen finden Sie hier.

netstat -tulnp - listet alle offenen Ports auf inkl. Anwendungen die diese Ports verwenden.

 

Die folgenden Befehle müssen auf dem lokalen System ausgeführt werden:

Status des Kubelet-Dienstes anzeigen:

systemctl status kubelet.service 

Die Systemprotokolle für den kubelet-Dienst abrufen:

journalctl -u kubelet.service

Die Systemprotokolle des Kubelet-Dienstes nach Fehlern filtern:

journalctl -u kubelet.service | grep -i ERROR

 

Die folgenden Befehlsketten werden auf der Admin-VM und nicht auf den Worker-Nodes ausgeführt.

kubectl describe node  [nodename]  - zeigt detaillierte Informationen über den Node an: Zustand, Kapazitäten, zugewiesene Ressourcen, Auslastung der laufenden Pods, Labels, Taints usw.

kubectl get node [node-name] -o yaml - zeigt detaillierte Informationen über den eingegebenen Node.

 

Pods – Troubleshooting

Die folgenden Befehle bilden die Grundlage für das Troubleshooting von Pods im Kubernetes Cluster. Sie können helfen, Probleme zu identifizieren und zu beheben.

Anzeigen der Pod-Informationen. Die folgenden Befehle geben einen schnellen Überblick über den Status der Pods.

kubectl get pods - listet alle Pods im aktuellen Namespace auf.

kubectl get pods -A - listet alle Pods in allen Namespaces des gesamten Kubernetes-Clusters auf. (-A ist die Kurzform für --all-namespaces)

kubectl get pods [-n namespace] - zeigt eine Liste aller Pods in einem bestimmten Namespace

kubectl get pods -o wide [-n namespace] - zeigt zusätzliche Informationen wie IP-Adresse, den Namen des Nodes

Wichtig bei der Auswertung der obigen Befehle ist der Statuswert. Hier eine Übersicht über die Statuswerte:

Statuswert   Beschreibung
 Running  Der Pod wurde erfolgreich gestartet und alle darin enthaltenen Container laufen. 
 Pending  Der Pod befindet sich in der Warteschleife befindet. Die Ursachen dafür können z.B. fehlende Ressourcen auf den Nodes sein. 
 Succeeded  Succeeded bedeutet, dass der Container im Pod erfolgreich ausgeführt und anschließend ordnungsgemäß beendet wurde. 
 Failed  Failed bedeutet, dass mindestens ein Container im Pod mit einen Fehlerstatus (Exit-Code != 0) beendet wurde.
 Error  Der Status “Error” ist dem Status „Failed“ ähnlich. Der Unterschied besteht häufig darin, dass der Status “Error” für spezifischere Fehlerbedingungen verwendet wird. Dies deutet oft auf einen Fehler in der Anwendung hin.
 Unknown  Dieser Status weist auf Kommunikationsprobleme oder ein internes Clusterproblem hin. Der Pod-Status konnte nicht ermittelt werden.
 Terminating

 Wenn der Finalisierungsprozess nicht abgeschlossen werden kann, bleibt der Pod im Terminating Status, bis der Finalizer abgeschlossen ist.

Folgende Befehlskette kann genutzt werden, um den Pod erzwungenermaßen zu löschen:
kubectl delete pod [pod-name] -n [namespace] --grace-period=0 --force

 ImagePullBackOff  Der Status ImagePullBackOff bedeutet, dass ein Pod nicht gestartet werden konnte, weil das Container-Image nicht heruntergeladen werden konnte. Der Teil "BackOff" heißt, dass Kubernetes weiterhin versuchen wird, das Image herunterzuladen.
 CrashLoopBackOff   CrashLoopBackOff beschreibt den Zustand in Kubernetes, in dem ein Container im Pod gestartet wird, abstürzt und dann immer wieder neu gestartet wird.
 Evicted  Der Evicted-Status bedeutet, dass der Pod von dem Node, auf dem er lief, entfernt wurde. Eviction ist ein Prozess, bei dem ein Pod hauptsächlich aufgrund von Ressourcenmangel von einem Node zum Beenden aufgefordert wird.
 Completed  Dies bedeutet, dass der Prozess im Container des Pods erfolgreich abgeschlossen wurde und keine weiteren Prozesse vorhanden sind.

 

kubectl get pods [-n namespace] | grep -v Running - zeigt eine Liste von Pods, die sich nicht im laufenden Zustand befinden.

kubectl describe pod [pod-name] [-n namespace] - diese Befehlskette zeigt detaillierte Informationen zu einem bestimmten Pod in einem bestimmten Namespace.

kubectl logs [pod-name] [-n namespace] - zeigt die Logs eines Pods. Wenn der Pod mehr als einen Container hat, können Sie mit dem Parameter -c den spezifischen Container angeben.  

kubectl describe pod [pod-name] [-n namespace] -o yaml - gibt die Konfiguration und den Status des Pods im YAML-Format aus. Sie konnen diese Konfiguration direkt in einer YAML-Datei umleiten (-o yaml > pod.yaml). Manchmal lohnt es sich, die YAML-Datei auf Konfigurationsfehler zu überprüfen.

Sie können die yaml-Datei auch direkt anpassen. Dazu verwenden Sie den Befehl:

kubectl edit

kubectl exec -it [pod-name] [-n namespace] [-c container] -- /bin/bash  - wenn diese Option in Ihrer Umgebung nicht gesperrt ist, können Sie eine interaktive Shell im angegebenen Container des Pods starten. (/bin/bash oder /bin/sh)

kubectl get networkpolicy [-n namespace] - listet die Netzwerk-Policies auf, die auf die Pods in einem Namespace angewendet werden.

 

Kubernetes Events

Kubernetes Events bietet eine detaillierte Übersicht über die Ereignisse innerhalb des Kubernetes-Clusters. Die Verwendung des Befehls „kubectl get events“ mit verschiedenen Parametern und Sortieroptionen hilft schnell relevante Informationen zu finden.

kubectl get events - zeigt eine Liste aller Events im aktuellen Namespace.

kubectl get events -n [namespace] - zeigt eine Liste aller Events in einem bestimmten Namespace oder --all-namespaces in allen Namespaces.

kubectl get events --watch - zeigt fortlaufend neue Ereignisse an, sobald dies in dem Cluster auftreten.

kubectl get events --sort-by='.metadata.creationTimestamp'  - listet die Events sortiert nach Erstellungsdatum auf. Die neuesten Ereignisse erscheinen zuletzt.

kubectl get events --field-selector type=Warning - zeigt nur Ereignisse vom Typ "Warnung" Erfolgreiche Ereignisse werden mit dem Typ "normal" gekennzeichnet.

kubectl get events --field-selector type=Warning,reason=Rebooted - filtert Warning-Events nach ihrem Grund (Reason), z.B. „Rebooted“. Von Interesse sind kritische Ereignisse wie z.B. "Failed

kubectl get events --field-selector involvedObject.name=<z.B. pod-name>  - sortiert die Ereignisse nach den vorher festgelegten Namen.

 

Die Kombination von kubectl get events mit dem grep Befehl ist eine sehr effektive Methode, um spezifische Informationen zu filtern.

Hier sind einige Beispiele:

kubectl get events | grep [pod-name]
kubectl get events | grep Warning
kubectl get events | grep [node-name]
kubectl get events | grep Warning | grep [pod-name]
kubectl get events | grep 'Failed'

 

Weitere Informationen

Diese Seite bietet eine Reihe von nützlichen Befehlen: kubectl Spickzettel | Kubernetes

 

 

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.