Auf dieser Seite erfahren Sie, wie Sie Probleme mit GKE-Logging untersuchen und beheben.
Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.Fehlende Cluster-Logs in Cloud Logging
Prüfen, ob das Logging im Projekt aktiviert ist
Aktivierte Dienste auflisten:
gcloud services list --enabled --filter="NAME=logging.googleapis.com"
Die folgende Ausgabe zeigt an, dass das Logging für das Projekt aktiviert ist:
NAME TITLE logging.googleapis.com Cloud Logging API
Optional: Prüfen Sie die Logs in der Loganzeige, um festzustellen, wer die API deaktiviert hat und wann sie deaktiviert wurde:
protoPayload.methodName="google.api.serviceusage.v1.ServiceUsage.DisableService" protoPayload.response.services="logging.googleapis.com"
Wenn das Logging deaktiviert ist, aktivieren Sie das Logging:
gcloud services enable logging.googleapis.com
Prüfen, ob das Logging für den Cluster aktiviert ist
Listen Sie die Cluster auf:
gcloud container clusters list \ --project=PROJECT_ID \ '--format=value(name,loggingConfig.componentConfig.enableComponents)' \ --sort-by=name | column -t
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID Ihres Google Cloud -Projekts.
Die Ausgabe sieht in etwa so aus:
cluster-1 SYSTEM_COMPONENTS cluster-2 SYSTEM_COMPONENTS;WORKLOADS cluster-3
Wenn der Wert für Ihren Cluster leer ist, ist das Logging deaktiviert. Beispiel: In dieser Ausgabe ist für
cluster-3
das Logging deaktiviert.Aktivieren Sie das Cluster-Logging, wenn Sie auf
NONE
gesetzt sind:gcloud container clusters update CLUSTER_NAME \ --logging=SYSTEM,WORKLOAD \ --location=COMPUTE_LOCATION
Dabei gilt:
CLUSTER_NAME
: Der Name Ihres Clusters.COMPUTE_LOCATION
: der Compute Engine-Standort für Ihren Cluster.
Prüfen, ob Knoten in den Knotenpools den Cloud Logging-Zugriffsbereich haben
Einer der folgenden Bereiche ist erforderlich, damit Knoten Logs in Cloud Logging schreiben können:
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/logging.admin
Prüfen Sie die Bereiche, die in jedem Knotenpool im Cluster konfiguriert sind:
gcloud container node-pools list --cluster=CLUSTER_NAME \ --format="table(name,config.oauthScopes)" \ --location COMPUTE_LOCATION
Dabei gilt:
CLUSTER_NAME
: Der Name Ihres Clusters.COMPUTE_LOCATION
: der Compute Engine-Standort für Ihren Cluster.
Migrieren Sie Ihre Arbeitslasten vom alten Knotenpool zum neu erstellten Knotenpool und überwachen Sie den Fortschritt.
Erstellen Sie neue Knotenpools mit dem richtigen Logging-Bereich:
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=COMPUTE_LOCATION \ --scopes="gke-default"
Dabei gilt:
CLUSTER_NAME
: Der Name Ihres Clusters.COMPUTE_LOCATION
: der Compute Engine-Standort für Ihren Cluster.
Berechtigungsprobleme beim Schreiben von Protokollen 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 Rolle Kubernetes Engine Default Node Service Account (roles/container.defaultNodeServiceAccount
) haben. Standardmäßig verwendet GKE das Compute Engine-Standarddienstkonto, das automatisch in Ihrem Projekt erstellt wird, als Knotendienstkonto.
Wenn Ihre Organisation die Einschränkung der Organisationsrichtlinie iam.automaticIamGrantsForDefaultServiceAccounts
erzwingt, erhält das Compute Engine-Standarddienstkonto in Ihrem Projekt möglicherweise nicht automatisch die erforderlichen Berechtigungen für GKE.
Prüfen Sie zur Identifizierung des Problems, ob in Ihrem Cluster in der Systemprotokollierungslast
401
-Fehler auftreten:[[ $(kubectl logs -l k8s-app=fluentbit-gke -n kube-system -c fluentbit-gke | grep -cw "Received 401") -gt 0 ]] && echo "true" || echo "false"
Wenn die Ausgabe
true
ist, treten bei der Systemauslastung 401-Fehler auf, was auf fehlende Berechtigungen hinweist. Wenn die Ausgabefalse
ist, überspringen Sie die restlichen Schritte und versuchen Sie es mit einer anderen Fehlerbehebung.
-
So finden Sie den Namen des Dienstkontos, das Ihre Knoten verwenden:
Console
- Rufen Sie die Seite Kubernetes-Cluster auf:
- Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie prüfen möchten.
- Führen Sie je nach Betriebsmodus des Clusters einen der folgenden Schritte aus:
- Suchen Sie bei Clustern im Autopilot-Modus im Abschnitt Sicherheit nach dem Feld Dienstkonto.
- Führen Sie für Cluster im Standardmodus die folgenden Schritte aus:
- Klicken Sie auf den Tab Knoten.
- Klicken Sie in der Tabelle Knotenpools auf den Namen eines Knotenpools. Die Seite Knotenpooldetails wird geöffnet.
- Suchen Sie im Abschnitt Sicherheit nach dem Feld Dienstkonto.
Wenn der Wert im Feld Dienstkonto
default
ist, verwenden Ihre Knoten das Compute Engine-Standarddienstkonto. Wenn der Wert in diesem Felddefault
nicht ist, verwenden Ihre Knoten ein benutzerdefiniertes Dienstkonto. Eine Anleitung zum Zuweisen der erforderlichen Rolle zu einem benutzerdefinierten Dienstkonto finden Sie unter IAM-Dienstkonten mit geringsten Berechtigungen verwenden.gcloud
Führen Sie für Cluster im Autopilot-Modus den folgenden Befehl aus:
gcloud container clusters describe
CLUSTER_NAME
\ --location=LOCATION
\ --flatten=autoscaling.autoprovisioningNodePoolDefaults.serviceAccountFühren Sie für Cluster im Standardmodus den folgenden Befehl aus:
gcloud container clusters describe
CLUSTER_NAME
\ --location=LOCATION
\ --format="table(nodePools.name,nodePools.config.serviceAccount)"Wenn die Ausgabe
default
ist, verwenden Ihre Knoten das Compute Engine-Standarddienstkonto. Wenn die Ausgabedefault
nicht ist, verwenden Ihre Knoten ein benutzerdefiniertes Dienstkonto. Eine Anleitung zum Zuweisen der erforderlichen Rolle zu einem benutzerdefinierten Dienstkonto finden Sie unter IAM-Dienstkonten mit geringsten Berechtigungen verwenden. -
So weisen Sie dem Compute Engine-Standarddienstkonto die Rolle
roles/container.defaultNodeServiceAccount
zu:Console
- Rufen Sie die Begrüßungsseite auf:
- Klicken Sie im Feld Projektnummer auf In Zwischenablage kopieren.
- Rufen Sie die IAM-Seite auf.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie im Feld Neue Hauptkonten den folgenden Wert an:
Ersetzen SiePROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
durch die kopierte Projektnummer. - Wählen Sie im Menü Rolle auswählen die Rolle Kubernetes Engine Default Node Service Account aus.
- Klicken Sie auf Speichern.
gcloud
- So finden Sie Ihre Google Cloud -Projektnummer:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID.Die Ausgabe sieht in etwa so aus:
12345678901
- Weisen Sie dem Compute Engine-Standarddienstkonto die Rolle
roles/container.defaultNodeServiceAccount
zu:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Ersetzen Sie
PROJECT_NUMBER
durch die Projektnummer aus dem vorherigen Schritt.
Prüfen, dass die Cloud Logging Write-API-Kontingente nicht erreicht wurden
Überzeugen Sie sich, dass Sie die API-Write-kontingente für Cloud Logging nicht erreicht haben.
Rufen Sie in der Google Cloud -Konsole die Seite Kontingente auf.
Filtern Sie die Tabelle nach "Cloud Logging API".
Schauen Sie nach, dass Sie keines der Kontingente erreicht haben.
GKE-Logging-Probleme mit gcpdiag beheben
Wenn Sie unvollständige Logs in Ihrem GKE-Cluster fehlen oder diese abrufen, verwenden Sie dasgcpdiag
-Tool zur Fehlerbehebung.
gcpdiag
ist ein Open-Source-Tool. Es ist kein offiziell unterstütztes Google Cloud -Produkt.
Mit dem Tool gcpdiag
können Sie Probleme mit Google Cloud-Projekten identifizieren und beheben. Weitere Informationen finden Sie im gcpdiag-Projekt auf GitHub.
- Logging auf Projektebene: Sorgt dafür, dass im Google Cloud-Projekt, in dem sich der GKE-Cluster befindet, die Cloud Logging API aktiviert ist.
- Logging auf Clusterebene: Überprüft, ob das Logging explizit in der Konfiguration des GKE-Clusters aktiviert ist.
- Knotenpoolberechtigungen: Bestätigt, dass für die Knoten in den Knotenpools des Clusters der Bereich "Cloud Logging-Schreibvorgänge" aktiviert ist, sodass sie Logdaten senden können.
- Dienstkontoberechtigungen: Prüft, ob das von den Knotenpools verwendete Dienstkonto die erforderlichen IAM-Berechtigungen für die Interaktion mit Cloud Logging hat. Insbesondere ist die Rolle "roles/logging.logWriter" normalerweise erforderlich.
- Schreibkontingente für die Cloud Logging API: Verifiziert, dass die Schreibkontingente für die Cloud Logging API im angegebenen Zeitraum nicht überschritten wurden.
Google Cloud Console
- Führen Sie den folgenden Befehl aus und kopieren Sie ihn.
- Öffnen Sie die Google Cloud -Konsole und aktivieren Sie Cloud Shell. Cloud Console öffnen
- Fügen Sie den kopierten Befehl ein.
- Führen Sie den Befehl
gcpdiag
aus, um das Docker-Imagegcpdiag
herunterzuladen und dann Diagnoseprüfungen durchzuführen. Folgen Sie gegebenenfalls der Anleitung für die Ausgabe, um fehlgeschlagene Prüfungen zu beheben.
gcpdiag runbook gke/logs \
--parameter project_id=PROJECT_ID \
--parameter name=GKE_NAME \
--parameter location=LOCATION
Docker
Sie können
gcpdiag
mit einem Wrapper ausführen, der gcpdiag
in einem Docker-Container startet. Docker oder Podman muss installiert sein.
- Kopieren Sie den folgenden Befehl und führen Sie ihn auf Ihrer lokalen Workstation aus.
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Führen Sie den Befehl
gcpdiag
aus../gcpdiag runbook gke/logs \ --parameter project_id=PROJECT_ID \ --parameter name=GKE_NAME \ --parameter location=LOCATION
Verfügbare Parameter für dieses Runbook ansehen
Ersetzen Sie Folgendes:
- PROJECT_ID: Die ID des Projekts, das die Ressource enthält.
- GKE_NAME ist der Name des GKE-Clusters.
- LOCATION: Die Zone oder Region des GKE-Clusters.
Nützliche Flags:
--universe-domain
: Die Domain Trusted Partner Sovereign Cloud, auf der die Ressource gehostet wird--parameter
oder-p
: Runbook-Parameter
Eine Liste und Beschreibung aller gcpdiag
-Tool-Flags finden Sie in der gcpdiag
-Nutzungsanleitung.