Auf dieser Seite wird beschrieben, wie Sie Fehler bei Ihren bereitgestellten Arbeitslasten in der Google Kubernetes Engine (GKE) beheben.
Allgemeinere Tipps zur Fehlerbehebung bei Anwendungen finden Sie in der Kubernetes-Dokumentation unter Fehlerbehebung bei Anwendungen.
Alle Fehler: Pod-Status prüfen
Bei Problemen mit den Pods einer Arbeitslast aktualisiert Kubernetes den Pod-Status mit einer Fehlermeldung. Sie können diese Fehler prüfen, indem Sie den Status eines Pods in der Google Cloud -Konsole oder mit dem kubectl
-Befehlszeilentool prüfen.
Console
Führen Sie diese Schritte aus:
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Wählen Sie die Arbeitslast aus, die Sie prüfen möchten. Auf dem Tab Übersicht wird der Status der Arbeitslast angezeigt.
Klicken Sie im Abschnitt Verwaltete Pods auf eine Fehlerstatusmeldung.
kubectl
Führen Sie den folgenden Befehl aus, um alle in Ihrem Cluster ausgeführten Pods anzusehen:
kubectl get pods
Die Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE
POD_NAME 0/1 CrashLoopBackOff 23 8d
Potenzielle Fehler sind in der Spalte Status
aufgeführt.
Führen Sie den folgenden Befehl aus, um weitere Details zu einem bestimmten Pod abzurufen:
kubectl describe pod POD_NAME
Ersetzen Sie POD_NAME
durch den Namen des Pods, den Sie
sich prüfen möchten.
In der Ausgabe enthält das Feld Events
weitere Informationen zu Fehlern.
Weitere Informationen finden Sie in den Container-Logs:
kubectl logs POD_NAME
Anhand dieser Logs können Sie feststellen, ob ein Befehl oder Code im Container den Absturz des Pods verursacht hat.
Nachdem Sie den Fehler identifiziert haben, können Sie in den folgenden Abschnitten versuchen, das Problem zu beheben.
Fehler: CrashLoopBackOff
Ein Status von CrashLoopBackOff
bedeutet nicht, dass ein bestimmter Fehler vorliegt. Stattdessen gibt er an, dass ein Container nach dem Neustart wiederholt abstürzt.
Wenn ein Container kurz nach dem Start abstürzt oder beendet wird (CrashLoop
), versucht Kubernetes, den Container neu zu starten. Mit jedem fehlgeschlagenen Neustart erhöht sich die Verzögerung (BackOff
) vor dem nächsten Versuch exponentiell (10 Sekunden, 20 Sekunden, 40 Sekunden usw.) bis zu einem Maximum von fünf Minuten.
In den folgenden Abschnitten erfahren Sie, warum Ihr Container möglicherweise abstürzt.
Interaktives Playbook für Pods in Absturzschleifen verwenden
Beginnen Sie mit der Fehlerbehebung, um die Ursache für den Status CrashLoopBackOff
zu ermitteln. Verwenden Sie dazu das interaktive Playbook in der Google Cloud Console:
Rufen Sie das Interaktive Playbook für Pods in Absturzschleifen auf:
Wählen Sie in der Drop-down-Liste Cluster den Cluster aus, für den Sie die Fehlerbehebung durchführen möchten. Wenn Sie Ihren Cluster nicht finden, geben Sie den Namen des Clusters in das Feld
Filter ein.Wählen Sie in der Drop-down-Liste Namespace den Namespace aus, für den Sie Fehler beheben möchten. Wenn Sie Ihren Namespace nicht finden, geben Sie ihn in das Feld
Filter ein.Gehen Sie die einzelnen Abschnitte durch, um die Ursache zu ermitteln:
- Anwendungsfehler ermitteln
- Probleme durch unzureichenden Arbeitsspeicher untersuchen
- Knotenstörungen untersuchen
- Fehlgeschlagene Aktivitätsprüfungen untersuchen
- Änderungsereignisse korrelieren
Optional: Wenn Sie über zukünftige
CrashLoopBackOff
-Fehler benachrichtigt werden möchten, wählen Sie im Abschnitt Tipps zur zukünftigen Behebung die Option Benachrichtigung erstellen aus.
Logs prüfen
Ein Container kann aus verschiedenen Gründen abstürzen. Hier kann ein Blick in die Logs eines Pods helfen, die Ursache zu beheben.
Sie können die Protokolle in der Google Cloud -Konsole oder mit dem kubectl
-Befehlszeilentool prüfen.
Console
Führen Sie diese Schritte aus:
Rufen Sie in der Google Cloud -Konsole die Seite Arbeitslasten auf.
Wählen Sie die Arbeitslast aus, die Sie prüfen möchten. Auf dem Tab Übersicht wird der Status der Arbeitslast angezeigt.
Klicken Sie im Abschnitt Verwaltete Pods auf den problematischen Pod.
Klicken Sie im Menü des Pods auf den Tab Logs.
kubectl
So rufen Sie alle in Ihrem Cluster ausgeführten Pods auf:
kubectl get pods
Suchen Sie in der Ausgabe des vorherigen Befehls in der Spalte
Status
nach einem Pod mit dem FehlerCrashLoopBackOff
.Rufen Sie die Logs des Pods ab:
kubectl logs POD_NAME
Ersetzen Sie
POD_NAME
durch den Namen des problematischen Pods.Wenn Sie das Flag
-p
übergeben, können Sie außerdem die Logs der vorherigen Instanz des Containers eines Pods abrufen, falls vorhanden.
Exit-Code des abgestürzten Containers überprüfen
Um besser nachvollziehen zu können, warum Ihr Container abgestürzt ist, ermitteln Sie den Exit-Code:
Beschreiben Sie den Pod:
kubectl describe pod POD_NAME
Ersetzen Sie
POD_NAME
durch den Namen des problematischen Pods.Prüfen Sie den Wert im Feld
containers: CONTAINER_NAME: last state: exit code
:- Lautet der Exit-Code 1, ist ein Absturz der Anwendung der Grund dafür, dass der Container abgestürzt ist.
- Wenn der Exit-Code 0 ist, prüfen Sie, wie lange die Anwendung ausgeführt wurde. Container werden beendet, wenn der Hauptprozess der Anwendung beendet wird. Wird die Ausführung einer Anwendung sehr schnell beendet, ist es möglich, dass der Container weiter neu gestartet wird. Wenn dieser Fehler auftritt, können Sie das Feld
restartPolicy
aufOnFailure
festlegen. Nach dieser Änderung wird die App nur dann neu gestartet, wenn der Beendigungscode nicht 0 ist.
Verbindung zu einem ausgeführten Container herstellen
Wenn Sie Bash-Befehle aus dem Container ausführen möchten, um das Netzwerk zu testen oder zu prüfen, ob Sie Zugriff auf Dateien oder Datenbanken haben, die von Ihrer Anwendung verwendet werden, öffnen Sie eine Shell für den Pod:
kubectl exec -it POD_NAME -- /bin/bash
Wenn sich in Ihrem Pod mehrere Container befinden, fügen Sie -c CONTAINER_NAME
hinzu.
Fehler: ImagePullBackOff und ErrImagePull
Ein Status von ImagePullBackOff
oder ErrImagePull
gibt an, dass das von einem Container verwendete Image nicht aus der Image-Registry geladen werden kann.
Sie können dieses Problem mithilfe der Google Cloud -Konsole oder des kubectl
-Befehlszeilentools prüfen.
Console
Führen Sie diese Schritte aus:
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Wählen Sie die Arbeitslast aus, die Sie prüfen möchten. Auf dem Tab Übersicht wird der Status der Arbeitslast angezeigt.
Klicken Sie im Abschnitt Verwaltete Pods auf den problematischen Pod.
Klicken Sie im Menü des Pods auf den Tab Ereignisse.
kubectl
Führen Sie den folgenden Befehl aus, um weitere Informationen zum Container-Image eines Pods zu erhalten:
kubectl describe pod POD_NAME
Problem: Das Image wird nicht gefunden
Wenn Ihr Image nicht gefunden wird, führen Sie die folgenden Schritte aus:
- Prüfen Sie, ob der Name des Image korrekt ist.
- Prüfen Sie, ob das Tag für das Image korrekt ist. Versuchen Sie es mit
:latest
oder keinem Tag, um das neueste Image per Pull abzurufen. - Wenn das Image einen vollständigen Registry-Pfad hat, schauen Sie nach, ob es in der von Ihnen verwendeten Docker-Registry vorhanden ist. Falls Sie nur den Image-Namen angegeben haben, prüfen Sie die Docker Hub-Registry.
Versuchen Sie, das Docker-Image in GKE Standard-Clustern manuell herunterzuladen:
Stellen Sie über SSH eine Verbindung zum Knoten her.
Wenn Sie beispielsweise eine SSH-Verbindung zu einer VM herstellen möchten, führen Sie den folgenden Befehl aus:
gcloud compute ssh VM_NAME --zone=ZONE_NAME
Ersetzen Sie Folgendes:
VM_NAME
: der Name der VM.ZONE_NAME
: Eine Compute Engine-Zone.
Generieren Sie eine Konfigurationsdatei unter
/home/[USER]/.docker/config.json
:docker-credential-gcr configure-docker
Die Konfigurationsdatei unter
/home/[USER]/.docker/config.json
muss die Registry des Images im FeldcredHelpers
enthalten. Die folgende Datei enthält beispielsweise Authentifizierungsinformationen für Images, die unterasia.gcr.io
,eu.gcr.io
,gcr.io
,marketplace.gcr.io
undus.gcr.io
gehostet werden:{ "auths": {}, "credHelpers": { "asia.gcr.io": "gcr", "eu.gcr.io": "gcr", "gcr.io": "gcr", "marketplace.gcr.io": "gcr", "us.gcr.io": "gcr" } }
Versuchen Sie, das Image herunterzuladen:
docker pull IMAGE_NAME
Wenn das Abrufen des Bilds manuell funktioniert, müssen Sie wahrscheinlich
ImagePullSecrets
für einen Pod angeben. Pods können nur auf Image-Pull-Secrets in ihrem eigenen Namespace verweisen. Daher muss dieser Prozess pro Namespace einmal ausgeführt werden.
Fehler: Berechtigung verweigert
Wenn ein Fehler des Typs "Berechtigung verweigert" oder "Kein Pull-Zugriff" auftritt, überprüfen Sie, ob Sie angemeldet sind und/oder Zugriff auf das Image haben. Probieren Sie je nach Registry, in der Sie Ihre Images hosten, eine der folgenden Methoden aus.
Artifact Registry
Wenn sich Ihr Image in Artifact Registry befindet, benötigt das Dienstkonto Ihres Knotenpools Lesezugriff auf das Repository, das das Image enthält.
Weisen Sie dem Dienstkonto die Rolle artifactregistry.reader
zu.
gcloud artifacts repositories add-iam-policy-binding REPOSITORY_NAME \
--location=REPOSITORY_LOCATION \
--member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
--role="roles/artifactregistry.reader"
Ersetzen Sie Folgendes:
REPOSITORY_NAME
: der Name Ihres Artifact Registry-RepositorysREPOSITORY_LOCATION
: die Region Ihres Artifact Registry-RepositorysSERVICE_ACCOUNT_EMAIL
: die E-Mail-Adresse des IAM-Dienstkontos, das Ihrem Knotenpool zugeordnet ist.
Container Registry
Wenn sich Ihr Image in Container Registry befindet, benötigt das Dienstkonto Ihres Knotenpools Lesezugriff auf den Cloud Storage-Bucket, der das Image enthält.
Weisen Sie dem Dienstkonto die Rolle roles/storage.objectViewer
zu, damit es aus dem Bucket lesen kann:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
--role=roles/storage.objectViewer
Ersetzen Sie Folgendes:
SERVICE_ACCOUNT_EMAIL
: die E-Mail-Adresse des Dienstkontos, das Ihrem Knotenpool zugeordnet ist. Mitgcloud iam service-accounts list
können Sie alle Dienstkonten in Ihrem Projekt auflisten.BUCKET_NAME
: Der Name des Cloud Storage-Buckets, der Ihre Images enthält. Mitgcloud storage ls
können Sie alle Buckets in Ihrem Projekt auflisten.
Wenn Ihr Registry-Administrator gcr.io-Repositories in Artifact Registry eingerichtet hat, um Images für die Domain gcr.io
anstelle von Container Registry zu speichern, müssen Sie Artifact Registry anstelle von Container Registry Lesezugriff gewähren.
Private Registry
Wenn sich Ihr Image in einer Private Registry befindet, benötigen Sie möglicherweise Schlüssel für den Zugriff auf die Images. Weitere Informationen finden Sie in der Kubernetes-Dokumentation unter Private Repositories verwenden.
Fehler 401 Unauthorized: Images können nicht aus dem Repository der privaten Container Registry abgerufen werden
Wenn Sie ein Image aus einem privaten Container Registry-Repository abrufen, kann ein Fehler ähnlich dem folgenden auftreten:
gcr.io/PROJECT_ID/IMAGE:TAG: rpc error: code = Unknown desc = failed to pull and
unpack image gcr.io/PROJECT_ID/IMAGE:TAG: failed to resolve reference
gcr.io/PROJECT_ID/IMAGE]:TAG: unexpected status code [manifests 1.0]: 401 Unauthorized
Warning Failed 3m39s (x4 over 5m12s) kubelet Error: ErrImagePull
Warning Failed 3m9s (x6 over 5m12s) kubelet Error: ImagePullBackOff
Normal BackOff 2s (x18 over 5m12s) kubelet Back-off pulling image
Führen Sie folgende Schritte aus, um den Fehler zu beheben:
Identifizieren Sie den Knoten, auf dem der Pod ausgeführt wird:
kubectl describe pod POD_NAME | grep "Node:"
Prüfen Sie, ob der im vorherigen Schritt identifizierte Knoten den Speicherbereich hat:
gcloud compute instances describe NODE_NAME \ --zone=COMPUTE_ZONE --format="flattened(serviceAccounts[].scopes)"
Der Zugriffsbereich des Knotens muss mindestens einen der folgenden Bereiche enthalten:
serviceAccounts[0].scopes[0]: https://www.googleapis.com/auth/devstorage.read_only serviceAccounts[0].scopes[0]: https://www.googleapis.com/auth/cloud-platform
Wenn der Knoten keinen dieser Bereiche enthält, erstellen Sie den Knotenpool neu.
Erstellen Sie den Knotenpool, zu dem der Knoten gehört, mit ausreichendem Umfang neu. Vorhandene Knoten können nicht geändert werden. Sie müssen den Knoten mit dem richtigen Umfang neu erstellen.
Empfohlen: Erstellen Sie einen neuen Knotenpool mit dem Bereich
gke-default
:gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --zone=COMPUTE_ZONE \ --scopes="gke-default"
Neuen Knotenpool mit nur Speicherbereich erstellen:
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --zone=COMPUTE_ZONE \ --scopes="https://www.googleapis.com/auth/devstorage.read_only"
Fehler: Pod nicht planbar
Der Status PodUnschedulable
gibt an, dass Ihr Pod aufgrund unzureichender Ressourcen oder eines Konfigurationsfehlers nicht geplant werden kann.
Wenn Sie Messwerte der Steuerungsebene konfiguriert haben, finden Sie weitere Informationen zu diesen Fehlern unter Planermesswerte und API-Servermesswerte.
Interaktives Playbook für nicht planbare Pods verwenden
Sie können PodUnschedulable
-Fehler mithilfe des interaktiven Playbooks in der Google Cloud -Konsole beheben:
Rufen Sie das Interaktive Playbook für nicht planbare Pods auf:
Wählen Sie in der Drop-down-Liste Cluster den Cluster aus, für den Sie die Fehlerbehebung durchführen möchten. Wenn Sie Ihren Cluster nicht finden, geben Sie seinen Namen in das Feld
Filter ein.Wählen Sie in der Drop-down-Liste Namespace den Namespace aus, für den Sie Fehler beheben möchten. Wenn Sie Ihren Namespace nicht finden, geben Sie ihn in das Feld
Filter ein.Gehen Sie die einzelnen Abschnitte im Playbook durch, um die Ursache zu ermitteln:
- CPU und Arbeitsspeicher untersuchen
- Maximale Anzahl von Pods pro Knoten untersuchen
- Autoscaling-Verhalten untersuchen
- Andere Fehlermodi untersuchen
- Änderungsereignisse korrelieren
Optional: Wenn Sie über zukünftige
PodUnschedulable
-Fehler benachrichtigt werden möchten, wählen Sie im Abschnitt Tipps zur zukünftigen Behebung die Option Benachrichtigung erstellen aus .
Fehler: Unzureichende Ressourcen
Möglicherweise stoßen Sie auf einen Fehler, der auf zu wenig CPU-Kapazität, Arbeitsspeicher oder andere Ressourcen hinweist. Beispiel: No nodes are available that match all of the predicates:
Insufficient cpu (2)
. Dies weist darauf hin, dass auf zwei Knoten nicht genügend CPU-Kapazität verfügbar ist, um die Anfragen eines Pods zu erfüllen.
Wenn die Ressourcenanfragen Ihres Pods die eines einzelnen Knotens aus allen infrage kommenden Knotenpools überschreiten, wird der Pod von GKE nicht geplant und es wird auch kein vertikales Skalieren ausgelöst, um einen neuen Knoten hinzuzufügen. Damit GKE den Pod planen kann, müssen Sie entweder weniger Ressourcen für den Pod anfordern oder einen neuen Knotenpool mit ausreichenden Ressourcen erstellen.
Sie können auch die automatische Knotenbereitstellung aktivieren, damit GKE automatisch Knotenpools mit Knoten erstellen kann, auf denen die nicht geplanten Pods ausgeführt werden können.
Die Standard-CPU-Anfrage beträgt 100 MB oder 10 % einer CPU bzw. eines Kerns.
Wenn Sie mehr oder weniger Ressourcen anfordern möchten, geben Sie den Wert in der Pod-Spezifikation unter spec: containers: resources: requests
an.
Fehler: MatchNodeSelector
Der Fehler MatchNodeSelector
gibt an, dass keine Knoten vorhanden sind, die mit der Labelauswahl des Pods übereinstimmen.
Sehen Sie sich in der Pod-Spezifikation unter spec: nodeSelector
die im Feld nodeSelector
angegebenen Labels an, um das zu prüfen.
Führen Sie den folgenden Befehl aus, um sich die Labels von Knoten in Ihrem Cluster anzusehen:
kubectl get nodes --show-labels
Führen Sie den folgenden Befehl aus, um einem Knoten ein Label hinzuzufügen:
kubectl label nodes NODE_NAME LABEL_KEY=LABEL_VALUE
Ersetzen Sie Folgendes:
NODE_NAME
: Der Knoten, dem Sie ein Label hinzufügen möchten.LABEL_KEY
: der Schlüssel des LabelsLABEL_VALUE
: der Wert des Labels
Weitere Informationen finden Sie in der Kubernetes-Dokumentation unter Pods zu Knoten zuweisen.
Fehler: PodToleratesNodeTaints
Der Fehler PodToleratesNodeTaints
gibt an, dass der Pod für keinen Knoten geplant werden kann, da der Pod keine Toleranzen hat, die den vorhandenen Knotenmarkierungen entsprechen.
Führen Sie den folgenden Befehl aus, um dies zu ermitteln:
kubectl describe nodes NODE_NAME
Prüfen Sie in der Ausgabe das Feld Taints
. Darin sind Schlüssel/Wert-Paare und Planungseffekte aufgeführt.
Lautet der aufgeführte Effekt NoSchedule
, können Pods auf diesem Knoten nur geplant werden, wenn sie eine übereinstimmende Toleranz haben.
Eine Möglichkeit zur Behebung dieses Problems ist, die Markierung zu entfernen. Führen Sie beispielsweise den folgenden Befehl aus, um eine NoSchedule-Markierung zu entfernen:
kubectl taint nodes NODE_NAME key:NoSchedule-
Fehler: PodFitsHostPorts
Der Fehler PodFitsHostPorts
gibt an, dass ein Knoten versucht, einen Port zu verwenden, der bereits belegt ist.
Um das Problem zu beheben, können Sie die Best Practices für Kubernetes befolgen und statt eines hostPort
ein NodePort
verwenden.
Wenn Sie eine hostPort
verwenden müssen, prüfen Sie die Manifeste der Pods und achten Sie darauf, dass für alle Pods auf demselben Knoten eindeutige Werte für hostPort
definiert sind.
Fehler: Keine Mindestverfügbarkeit vorhanden
Wenn für einen Knoten genügend Ressourcen vorhanden sind, die Meldung Does not have minimum availability
jedoch immer noch angezeigt wird, prüfen Sie den Status des Pods. Wenn er SchedulingDisabled
oder Cordoned
lautet, kann der Knoten keine neuen Pods planen. Sie können den Status eines Knotens in der Google Cloud -Konsole oder dem kubectl
-Befehlszeilentool prüfen.
Console
Führen Sie diese Schritte aus:
Rufen Sie in der Google Cloud -Konsole die Seite Google Kubernetes Engine auf.
Wählen Sie den gewünschten zu prüfenden Cluster aus. Auf dem Tab Knoten werden die Knoten und ihr Status angezeigt.
Führen Sie die folgenden Schritte aus, um die Planung auf dem Knoten zu aktivieren:
Klicken Sie in der Liste auf den Knoten, den Sie untersuchen möchten.
Klicken Sie im Bereich Knotendetails auf Entsperren.
kubectl
Führen Sie den folgenden Befehl aus, um die Status der Knoten abzurufen:
kubectl get nodes
Die Planung auf dem Knoten aktivieren Sie mit folgendem Befehl:
kubectl uncordon NODE_NAME
Fehler: Maximale Anzahl von Pods pro Knoten erreicht
Wenn das Limit für die maximale Anzahl von Pods pro Knoten von allen Knoten im Cluster erreicht wird, befinden sich die Pods im Status „Nicht planbar“. Auf dem Tab Ereignisse des Pods sehen Sie eine Nachricht mit dem Begriff Too many pods
.
Führen Sie folgende Schritte aus, um diesen Fehler zu beheben:
Prüfen Sie die
Maximum pods per node
-Konfiguration auf dem Tab „Knoten“ in den GKE-Clusterdetails in der Google Cloud -Konsole.Rufen Sie eine Liste der Knoten ab:
kubectl get nodes
Prüfen Sie für jeden Knoten die Anzahl der Pods, die auf dem Knoten ausgeführt werden:
kubectl get pods -o wide | grep NODE_NAME | wc -l
Wenn das Limit erreicht ist, fügen Sie einen neuen Knotenpool oder dem vorhandenen Knotenpool zusätzliche Knoten hinzu.
Problem: Maximale Knotenpoolgröße erreicht, wenn Cluster Autoscaler aktiviert ist
Wenn der Knotenpool seine Maximalgröße gemäß der Cluster-Autoscaling-Konfiguration erreicht hat, löst GKE keine vertikale Skalierung für den Pod aus, der andernfalls mit diesem Knotenpool geplant wäre. Wenn der Pod mit diesem Knotenpool geplant werden soll, ändern Sie die Cluster-Autoscaling-Konfiguration.
Problem: Maximale Knotenpoolgröße erreicht, Cluster Autoscaler deaktiviert
Wenn der Knotenpool seine maximale Anzahl von Knoten erreicht hat und der Cluster Autoscaler deaktiviert ist, kann GKE den Pod nicht mit dem Knotenpool planen. Erhöhen Sie die Größe Ihres Knotenpools oder aktivieren Sie den Cluster Autoscaler, damit GKE die Größe Ihres Clusters automatisch anpasst.
Fehler: Ungebundene PersistentVolumeClaims
Der Fehler Unbound PersistentVolumeClaims
gibt an, dass der Pod auf einen nicht gebundenen PersistentVolumeClaim verweist. Dieser Fehler kann auftreten, wenn das PersistentVolume nicht bereitgestellt werden konnte. Sie können prüfen, ob die Bereitstellung fehlgeschlagen ist. Dazu rufen Sie die Ereignisse für den PersistentVolumeClaim ab und untersuchen sie auf Fehler.
Führen Sie den folgenden Befehl aus, um Ereignisse abzurufen:
kubectl describe pvc STATEFULSET_NAME-PVC_NAME-0
Dabei gilt:
STATEFULSET_NAME
: Name des StatefulSet-Objekts.PVC_NAME
: Name des PersistentVolumeClaim-Objekts.
Dies kann auch passieren, wenn während der manuellen Vorabbereitstellung eines PersistentVolume und der Bindung an einen PersistentVolumeClaim ein Konfigurationsfehler aufgetreten ist.
Versuchen Sie, das Volume noch einmal vorab bereitzustellen, um diesen Fehler zu beheben.
Fehler: Unzureichendes Kontingent
Prüfen Sie, ob Ihr Projekt ein ausreichendes Compute Engine-Kontingent für GKE hat, um Ihren Cluster zu skalieren. Wenn GKE versucht, Ihrem Cluster einen Knoten hinzuzufügen, um den Pod zu planen, und die Skalierung das verfügbare Kontingent Ihres Projekts überschreiten würde, erhalten Sie die Fehlermeldung scale.up.error.quota.exceeded
.
Weitere Informationen finden Sie unter ScaleUp-Fehler.
Problem: Eingestellte APIs
Achten Sie darauf, dass Sie keine veralteten APIs verwenden, die mit der Nebenversion Ihres Clusters entfernt werden. Weitere Informationen finden Sie unter Verworfene Komponenten von GKE.
Fehler: Es sind keine freien Ports für die angeforderten Pod-Ports verfügbar.
Wenn Sie einen ähnlichen Fehler wie den folgenden sehen, haben Sie wahrscheinlich mehrere Pods auf demselben Knoten mit demselben Wert im Feld hostPort
definiert:
0/1 nodes are available: 1 node(s) didn't have free ports for the requested pod ports. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.
Wenn Sie einen Pod an eine hostPort
binden, schränkt das ein, wo GKE den Pod planen kann, da jede Kombination aus hostIP
, hostPort
und protocol
eindeutig sein muss.
Um das Problem zu beheben, können Sie die Best Practices für Kubernetes befolgen und statt eines hostPort
ein NodePort
verwenden.
Wenn Sie eine hostPort
verwenden müssen, prüfen Sie die Manifeste der Pods und achten Sie darauf, dass für alle Pods auf demselben Knoten eindeutige Werte für hostPort
definiert sind.
Nächste Schritte
Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.