Fehlerbehebung bei Problemen mit dem Metrik-Server in Kubernetes-Clustern

Erfahren Sie, wie Sie häufige Probleme mit dem Metrics-Server in Ihrem Kubernetes-Cluster beheben können, einschließlich Symptomen, Ursachen und einer Schritt-für-Schritt-Anleitung.

Virtuelle Private Cloud Klassische Infrastruktur

Die folgenden Symptome können darauf hindeuten, dass die metrics-server-Ressourcen angepasst werden sollten:

  • metrics-server wird häufig neu gestartet.

  • Das Löschen eines Namensbereichs führt dazu, dass der Namensbereich in einem Terminating-Status blockiert wird und kubectl describe namespace eine Bedingung enthält, die einen Fehler bei der Metrik-API-Erkennung meldet.

  • kubectl top pods, kubectl top nodes, andere Befehle kubectl oder Anwendungen, die mithilfe der Kubernetes-API Kubernetes-Fehler wie die folgenden protokollieren:

    The server is currently unable to handle the request (get pods.metrics.k8s.io)
    
    Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request
    
  • Horizontal Pod Autoscalers (HPAs) skalieren keine Bereitstellungen.

  • Die Ausführung von kubectl get apiservices v1beta1.metrics.k8s.io führt zu einem Status wie dem folgenden:

    NAME                     SERVICE                      AVAILABLE                      AGE
    v1beta1.metrics.k8s.io   kube-system/metrics-server   False (FailedDiscoveryCheck)   139d
    

Ihr Cluster verfügt über einen Metrikservice, der von der metrics-server-Bereitstellung im Namensbereich kube-system bereitgestellt wird. Die metrics-server-Ressourcenanforderungen und -Grenzwerte basieren auf der Anzahl der Knoten im Cluster und sind für Cluster mit maximal 30 Pods pro Workerknoten optimiert. Wenn die Speicheranforderungen zu niedrig sind, kann dies mit Fehlern aufgrund abnormaler Speicherbedingungen fehlschlagen und sehr langsam reagieren. Wenn die CPU-Anforderungen zu niedrig sind, können Aktivitäts-und Bereitschaftsprüfungen aufgrund der CPU-Regulierung fehlschlagen.

Probleme mit metrics-server können auch Probleme in anderen Bereichen verursachen. Die Metrik-APIs sind nicht verfügbar, wenn die Steuerungsebene nicht in der Lage ist, über Konnectivity mit dem Metrik-Server zu kommunizieren. Webhooks für Zugangssteuerung können verhindern, dass die Steuerebene Pods erstellt, einschließlich des Pods metrics-server.

Führen Sie die folgenden Schritte aus, um Fehler zu beheben.

  1. Stellen Sie sicher, dass Metrik-Server-Pods vorhanden sind.

    kubectl get pod -n kube-system -l k8s-app=metrics-server
    

    Wenn keine Pods aufgelistet werden, liegt wahrscheinlich ein Problem mit einem admission-control-Webhook vor. Siehe Warum schlagen Clusteroperationen aufgrund eines fehlerhaften Webhooks fehl?.

  2. Überprüfen Sie, ob der API-Server eine Verbindung mit metrics-server herstellen kann.

    kubectl logs POD -n kube-system -c metrics-server --tail 5
    

    Ersetzen Sie POD durch den zuvor angezeigten Podnamen. Der Inhalt der zurückgegebenen Protokolle spielt keine Rolle.

    Wenn Sie eine Fehlernachricht erhalten, die Text wie <workerIP>:10250: getsockopt: connection timed out enthält, lesen Sie den Abschnitt Zeitlimitüberschreitung bei kubectl-Befehlen.

  3. Wenn die vorherigen Schritte kein Problem anzeigen, passen Sie die Ressourcen für metrics-server an. Siehe Providerressourcen für Clustermetriken anpassen.