Auf dieser Seite wird beschrieben, wie Sie Probleme im Zusammenhang mit Systemmesswerten in Ihren Google Kubernetes Engine-Clustern (GKE) beheben.
Messwerte aus Ihrem Cluster werden nicht in Cloud Monitoring angezeigt
Achten Sie darauf, dass Sie die Monitoring API und die Logging API in Ihrem Projekt aktiviert haben. Prüfen Sie außerdem, ob Sie Ihr Projekt in der Cloud Monitoring-Übersicht in der Google Cloud Console aufrufen können.
Wenn das Problem weiterhin besteht, prüfen Sie folgende mögliche Ursachen:
Haben Sie die Überwachung für Ihr Cluster aktiviert?
Das Monitoring ist standardmäßig für Cluster aktiviert, die über die Google Cloud Console und das Google Cloud CLI erstellt wurden. Zur Prüfung können Sie den folgenden Befehl ausführen oder in der Google Cloud Console auf die Clusterdetails klicken:
gcloud container clusters describe CLUSTER_NAMEDie Ausgabe dieses Befehls sollte
SYSTEM_COMPONENTSin der Liste vonenableComponentsim AbschnittmonitoringConfigenthalten, ähnlich dem folgenden Beispiel:monitoringConfig: componentConfig: enableComponents: - SYSTEM_COMPONENTSWenn das Monitoring nicht aktiviert ist, führen Sie den folgenden Befehl aus, um es zu aktivieren:
gcloud container clusters update CLUSTER_NAME --monitoring=SYSTEMWie lange ist es her, dass Ihr Cluster erstellt oder das Monitoring aktiviert wurde?
Es kann bis zu einer Stunde dauern, bis die Messwerte eines neuen Clusters in Cloud Monitoring angezeigt werden.
Wird in Ihrem Cluster im Namespace
kube-systemeinheapsterodergke-metrics-agent(der OpenTelemetry Collector) ausgeführt ?Unter Umständen kann der Pod keine Arbeitslasten planen, weil die Ressourcen im Cluster zur Neige gehen. Prüfen Sie, ob Heapster oder OpenTelemetry ausgeführt wird. Rufen Sie dazu
kubectl get pods --namespace=kube-systemauf und suchen Sie nach Pods mitheapsterodergke-metrics-agentim Namen.Kann Ihre Cluster-Steuerungsebene mit den Knoten kommunizieren?
Dies ist entscheidend für die Funktion von Cloud Monitoring. Mit dem folgenden Befehl können Sie prüfen, ob die Steuerungsebene mit den Knoten kommuniziert:
kubectl logs POD_NAMEWenn dieser Befehl einen Fehler zurückgibt, wird das Problem möglicherweise von den SSH-Tunnels verursacht. Informationen zur Fehlerbehebung finden Sie unter Fehlerbehebung bei SSH-Problemen.
Berechtigungsprobleme beim Schreiben von Messwerten identifizieren und beheben
GKE verwendet IAM-Dienstkonten, die an Ihre Knoten angehängt sind, um
Systemaufgaben wie Logging und Monitoring auszuführen. Diese Knotendienstkonten
müssen in Ihrem Projekt mindestens die
Kubernetes Engine Default Node Service Account
(roles/container.defaultNodeServiceAccount) Rolle haben. Standardmäßig verwendet GKE das Compute Engine-Standarddienstkonto, das automatisch in Ihrem Projekt erstellt wird, als Knotendienstkonto.
Wenn Ihre Organisation die
iam.automaticIamGrantsForDefaultServiceAccounts Einschränkung der Organisationsrichtlinie erzwingt, erhält das Compute Engine-Standarddienstkonto in Ihrem Projekt möglicherweise
nicht automatisch die erforderlichen Berechtigungen für GKE.
Prüfen Sie in der Systemmonitoring-Arbeitslast in Ihrem Cluster auf
401-Fehler, um das Problem zu identifizieren:[[ $(kubectl logs -l k8s-app=gke-metrics-agent -n kube-system -c gke-metrics-agent | grep -cw "Received 401") -gt 0 ]] && echo "true" || echo "false"Wenn die Ausgabe
trueist, treten in der Systemarbeitslast 401-Fehler auf, die auf fehlende Berechtigungen hinweisen. Wenn die Ausgabefalseist, überspringen Sie die restlichen Schritte und versuchen Sie eine andere Methode zur Fehlerbehebung.
Führen Sie die folgenden Schritte aus, um dem
Compute Engine-Standarddienstkonto die Rolle roles/container.defaultNodeServiceAccount zuzuweisen:
Console
- Rufen Sie die Seite Willkommen auf:
- Klicken Sie im Feld Projektnummer auf In die Zwischenablage kopieren.
- Rufen Sie die Seite IAM auf:
- Klicken Sie auf Zugriffsrechte erteilen.
- Geben Sie im Feld Neue Hauptkonten den folgenden Wert an:
Ersetzen SiePROJECT_NUMBER-compute@developer.gserviceaccount.comPROJECT_NUMBERdurch die kopierte Projektnummer. - Wählen Sie im Menü Rolle auswählen die Kubernetes Engine Default Node Service Account Rolle aus.
- Klicken Sie auf Speichern.
gcloud
- Suchen Sie Ihre Google Cloud Projektnummer:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Ersetzen Sie
PROJECT_IDdurch Ihre Projekt-ID.Die Ausgabe sieht etwa so aus:
12345678901
- Weisen Sie dem
Compute Engine-Standarddienstkonto die
roles/container.defaultNodeServiceAccountRolle zu:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Ersetzen Sie
PROJECT_NUMBERdurch die Projektnummer aus dem vorherigen Schritt.
Prüfen, ob der Messwert-Agent über genügend Arbeitsspeicher verfügt
Wenn Sie die vorherigen Schritte zur Fehlerbehebung ausgeführt haben und die Messwerte immer noch nicht angezeigt werden, hat der Messwert-Agent möglicherweise nicht genügend Arbeitsspeicher.
In den meisten Fällen ist die Standardzuweisung von Ressourcen an den GKE-Messwert-Agent ausreichend. Wenn das DaemonSet jedoch wiederholt abstürzt, können Sie den Grund für die Beendigung mit den folgenden Anweisungen prüfen:
Rufen Sie die Namen der GKE-Messwert-Agent-Pods ab:
kubectl get pods -n kube-system -l component=gke-metrics-agentSuchen Sie den Pod mit dem Status
CrashLoopBackOff.Die Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE gke-metrics-agent-5857x 0/1 CrashLoopBackOff 6 12mBeschreiben Sie den Pod mit dem Status
CrashLoopBackOff:kubectl describe pod POD_NAME -n kube-systemErsetzen Sie
POD_NAMEdurch den Namen des Pods aus dem vorherigen Schritt.Wenn der Beendigungsgrund des Pods
OOMKilledlautet, benötigt der Agent zusätzlichen Speicher.Die Ausgabe sieht in etwa so aus:
containerStatuses: ... lastState: terminated: ... exitCode: 1 finishedAt: "2021-11-22T23:36:32Z" reason: OOMKilled startedAt: "2021-11-22T23:35:54Z"Fügen Sie dem Knoten mit dem fehlerhaften Messwert-Agent ein Knotenlabel hinzu. Sie können entweder ein persistentes oder ein temporäres Knotenlabel verwenden. Wir empfehlen, 20 MB zusätzlichen Arbeitsspeicher hinzuzufügen. Wenn der Agent weiterhin abstürzt, können Sie diesen Befehl noch einmal ausführen. Ersetzen Sie dabei das Knotenlabel durch einen Knoten, der eine größere Menge an zusätzlichen Arbeitsspeicher anfordert.
Führen Sie den folgenden Befehl aus, um einen Knotenpool mit einem nichtflüchtigen Label zu aktualisieren:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --node-labels=ADDITIONAL_MEMORY_NODE_LABEL \ --location=COMPUTE_LOCATIONErsetzen Sie dabei Folgendes:
NODEPOOL_NAMEist der Name des Knotenpools.CLUSTER_NAMEden Namen des vorhandenen Clusters.ADDITIONAL_MEMORY_NODE_LABEList eines der zusätzlichen Speicherknotenlabels. Verwenden Sie einen der folgenden Werte:- So fügen Sie 10 MB hinzu:
cloud.google.com/gke-metrics-agent-scaling-level=10 - So fügen Sie 20 MB hinzu:
cloud.google.com/gke-metrics-agent-scaling-level=20 - So fügen Sie 50 MB hinzu:
cloud.google.com/gke-metrics-agent-scaling-level=50 - So fügen Sie 100 MB hinzu:
cloud.google.com/gke-metrics-agent-scaling-level=100 - So fügen Sie 200 MB hinzu:
cloud.google.com/gke-metrics-agent-scaling-level=200 - So fügen Sie 500 MB hinzu:
cloud.google.com/gke-metrics-agent-scaling-level=500
- So fügen Sie 10 MB hinzu:
COMPUTE_LOCATION: der Compute Engine-Standort des Clusters.
Alternativ können Sie mit dem folgenden Befehl ein temporäres Knotenlabel hinzufügen, das nach einem Upgrade nicht beibehalten wird:
kubectl label node/NODE_NAME \ ADDITIONAL_MEMORY_NODE_LABEL --overwriteErsetzen Sie dabei Folgendes:
NODE_NAME: der Name des Knotens des betroffenen Messwert-Agents.ADDITIONAL_MEMORY_NODE_LABEL: eines der zusätzlichen Speicherknotenlabels. Verwenden Sie einen der Werte aus dem vorherigen Beispiel.
Nächste Schritte
Wenn ein Problem mit dem Cloud Logging-Agent besteht, lesen Sie die Dokumentation zur Fehlerbehebung.
Wenn Sie in der Dokumentation keine Lösung für Ihr Problem finden, erhalten Sie unter Support weitere Hilfe, einschließlich Ratschlägen zu den folgenden Themen:
- Supportanfrage erstellen, indem Sie sich an den Cloud Customer Care wenden.
- Support von der Community erhalten, indem Sie
Fragen auf Stack Overflow stellen
und mit dem
google-kubernetes-engineTag nach ähnlichen Problemen suchen. Sie können auch dem#kubernetes-engineSlack-Kanal beitreten, um weitere Unterstützung von der Community zu erhalten. - Probleme melden oder Featureanfragen stellen, indem Sie die öffentliche Problemverfolgung verwenden.