Häufige Probleme mit Knoten und Pods

Erfahren Sie, wie Sie häufige Probleme mit Knoten und Pods auf Clustern identifizieren und beheben können, die Sie mit der Kubernetes Engine (OKE) erstellt haben.

Diese Probleme können bei Knoten und Pods auf Clustern auftreten, die Sie mit der Kubernetes-Engine erstellt haben.

Nicht reagierende Worker-Knoten und/oder Pods hängen aufgrund unzureichender Ressourcen im Status "Ausstehend" fest

Möglicherweise werden die folgenden Probleme mit Knoten und Pods auf Clustern angezeigt, die Sie mit der Kubernetes-Engine erstellt haben:

  • Nicht reagierende Worker-Knoten.
  • Worker-Knoten mit einem Status, der als Antwort auf den Befehl kubectl get node als NotReady angezeigt wird.
  • Pods mit dem Status "Ausstehend" hängen mit Nachrichten wie FailedScheduling due to Insufficient cpu oder FailedScheduling due to Insufficient memory.

Eine wahrscheinliche Ursache für diese Probleme sind unzureichende Systemressourcen für die Kubernetes- und BS-System-Daemons.

Wir empfehlen, die Kubelet-Flags --kube-reserved und --system-reserved zu verwenden, um CPU- und Speicherressourcen für Kubernetes-System-Daemons (wie kubelet und container runtime) bzw. BS-System-Daemons (wie sshd und systemd) zu reservieren. Beispiel:

  • --kube-reserved=cpu=500m,memory=1Gi
  • --system-reserved=cpu=100m,memory=100Mi

Pods, die auf einem Worker-Knoten ausgeführt werden, können alle verfügbaren CPU- und Speicherressourcen belegen und so verhindern, dass andere wichtige Prozesse (wie die Kubernetes- und BS-System-Daemons) auf dem Knoten ausgeführt werden. Wenn Kubernetes- und BS-System-Daemons nicht ausgeführt werden können, kann der Worker-Knoten unter hoher Last nicht mehr reagieren, instabil werden und unerwartet abstürzen.

Um zu verhindern, dass Pods Ressourcen anfordern, die für die Kubernetes- und BS-System-Daemons erforderlich sind, nehmen Sie die Kubelet-Flags --kube-reserved und --system-reserved als kubelet-extra-args-Optionen in ein benutzerdefiniertes Cloud-Init-Skript auf. Weitere Informationen und ein Beispiel finden Sie unter Beispiel 4: Ressourcen für Kubernetes- und BS-System-Daemons mit einem benutzerdefinierten Cloud-init-Skript reservieren.

Wenn Sie das Kennzeichen --kube-reserved kubelet verwenden, um einen Teil der CPU- und Speicherressourcen eines Worker-Knotens für die Verwendung durch Kubernetes-System-Daemons zu reservieren, sollten Sie die folgenden Empfehlungen berücksichtigen:

  • Die Menge der CPU-Ressource, die Sie für Kubernetes-System-Daemons reservieren, hängt von der Anzahl der CPU-Cores auf dem Worker-Knoten ab, wie in der folgenden Tabelle dargestellt:
    Anzahl CPU-Cores auf Worker-Knoten 1 2 3 4 5 Mehr als 5
    Empfohlene CPU zu reservieren, in Millicore (m) 60 M 70 M 80 M 85 M 90 M Zusätzliche 2,5 m für jeden zusätzlichen Core auf Worker-Knoten
  • Die Speicherressource, die Sie für Kubernetes-System-Daemons reservieren, hängt von der Arbeitsspeichermenge auf dem Worker-Knoten ab, wie in der folgenden Tabelle dargestellt:
    Arbeitsspeicher auf Worker-Knoten in GiB 4 GiB 8 GiB 16 GiB 128 GiB Mehr als 128 GiB
    Empfohlener Speicher zum Reservieren, in GiB 1 GiB 1 GiB 2 GiB 9 GiB Eine zusätzliche 20 MiB für jede zusätzliche GiB des Worker-Knotenspeichers

Wenn Sie das --system-reserved kubelet-Flag verwenden, um einen Teil der CPU- und Speicherressourcen eines Knotens für die Verwendung durch Betriebssystem-Daemons zu reservieren, sollten Sie die folgenden Empfehlungen berücksichtigen:

  • Die CPU-Ressource, die Sie für BS-System-Daemons reservieren sollten (unabhängig von der Knotenausprägung), beträgt 100 m (Millicore).
  • Die Speicherressource, die Sie für BS-System-Daemons reservieren sollten (unabhängig von der Knotenausprägung), beträgt 100 Mi (Mebibyte).

Beachten Sie, dass unsere CPU- und Speicherempfehlungen für die Kubelet-Flags --kube-reserved und --system-reserved für die Workloads, die Sie ausführen möchten, möglicherweise nicht optimal sind. Daher müssen Sie die Werte möglicherweise entsprechend ändern. Möglicherweise müssen Sie die Werte auch im Laufe der Zeit anpassen.

Um den Unterschied zwischen den Gesamtressourcen auf einem Worker-Knoten und den Ressourcen auf dem Knoten anzuzeigen, die Workloads verwenden können, führen Sie den folgenden Befehl aus:

kubectl get node <NODE_NAME> -o=yaml | grep -A 6 -B 7 capacity

Beispielausgabe:

  allocatable:
    cpu: 15743m
    ephemeral-storage: "34262890849"
    hugepages-1Gi: "0"
    hugepages-2Mi: "0"
    memory: 234972476Ki
    pods: "110"
  capacity:
    cpu: "16"
    ephemeral-storage: 37177616Ki
    hugepages-1Gi: "0"
    hugepages-2Mi: "0"
    memory: 257197372Ki
    pods: "110"

Der Unterschied zwischen der "Kapazität" und der "zuweisbaren" CPU und dem Arbeitsspeicher in der Beispielausgabe umfasst die CPU- und Arbeitsspeicherreservierungen für die Kubernetes- und Betriebssystem-Daemons.

Hinweis

Ab Juni 2024 werden die in diesem Abschnitt beschriebenen Empfehlungen für die CPU- und Speicherressourcenreservierungen für Kubernetes- und BS-System-Daemons als Standardwerte für alle OKE-Images für alle unterstützten Kubernetes-Versionen verwendet. Die Empfehlungen werden auch als Standardwerte für alle Plattformimages für Kubernetes-Version 1.30 und höher verwendet. Die Standardwerte gelten sowohl, wenn Sie ein OKE-Image angeben, das im Juni 2024 (oder höher) veröffentlicht wurde, als auch wenn Sie die auf einem Cluster ausgeführte Kubernetes-Version auf Version 1.30 (oder höher) upgraden. Wenn Sie ein OKE-Image angeben, das im Juni 2024 (oder höher) veröffentlicht wurde, oder wenn Sie ein Cluster auf Kubernetes-Version 1.30 upgraden, wird empfohlen, die Standardreservierungen für die Workloads zu prüfen, die Sie ausführen möchten.

Beim Erstellen von virtuellen Knotenpools wird die Meldung "API-Server nicht erreichbar" angezeigt

Wenn Sie einen virtuellen Knotenpool in einem Cluster erstellen, das Sie mit Kubernetes Engine erstellt haben, wird möglicherweise die folgende Meldung angezeigt, wenn Sie die Arbeitsanforderungslogs oder Arbeitsanforderungsfehler für die Arbeitsanforderungs-ID des Vorgangs anzeigen:

API Server Unreachable, Check network configuration and ensure network path between Virtual Node and API Server exist

Diese Meldung weist auf ein Netzwerkkonfigurationsproblem hin. Prüfen Sie, ob das Netzwerk korrekt konfiguriert ist, damit virtuelle Knoten im virtuellen Knotenpool mit dem Kubernetes-API-Server kommunizieren können. Eine geeignete Netzwerkkonfiguration finden Sie unter Beispielkonfiguration einer Netzwerkressource für Cluster mit virtuellen Knoten.