Wenn Ihre Pods in Google Kubernetes Engine (GKE) im Status Pending hängen bleiben und keine neuen Knoten hinzugefügt werden, deutet dies häufig auf ein Problem mit der Scale-up-Funktion des Cluster-Autoscalers hin. Dieses Problem kann verhindern, dass Ihre Anwendungen entsprechend der Nachfrage skaliert werden, Bereitstellungen verzögern und die Dienstverfügbarkeit beeinträchtigen.
Auf dieser Seite finden Sie Informationen zum Diagnostizieren und Beheben häufiger Probleme, die verhindern, dass Cluster Autoscaler neue Knoten hinzufügt. Wenn Sie diese Probleme beheben, kann der Kubernetes-Scheduler Ihre Arbeitslasten rechtzeitig platzieren und Ihr Cluster kann sich an eine steigende Last anpassen.
Diese Informationen sind wichtig für Anwendungsentwickler, die sicherstellen müssen, dass ihre Anwendungen und Dienste zuverlässig geplant und ausgeführt werden, sowie für Plattformadministratoren und ‑betreiber, die dafür verantwortlich sind, dass der Cluster dynamisch Ressourcen bereitstellen kann, um die Anforderungen der Arbeitslast zu erfüllen und das Serviceniveau aufrechtzuerhalten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.
Wann skaliert Cluster Autoscaler Ihre Knoten hoch?
Bevor Sie mit der Fehlerbehebung fortfahren, kann es hilfreich sein, zu verstehen, wann Cluster Autoscaler versucht, Ihre Knoten hochzuskalieren. Der Cluster-Autoscaler fügt Knoten nur hinzu, wenn die vorhandenen Ressourcen nicht ausreichen.
Cluster Autoscaler prüft alle 10 Sekunden, ob es nicht planbare Pods gibt. Ein Pod ist nicht mehr planbar, wenn der Kubernetes-Planer ihn aufgrund unzureichender Ressourcen, Knoteneinschränkungen oder nicht erfüllter Pod-Anforderungen nicht auf einem vorhandenen Knoten platzieren kann.
Wenn Cluster Autoscaler nicht planbare Pods findet, wird geprüft, ob durch das Hinzufügen eines Knotens die Planung des Pods ermöglicht werden kann. Wenn durch das Hinzufügen eines Knotens ein Pod geplant werden kann, fügt Cluster Autoscaler der verwalteten Instanzgruppe (MIG) einen neuen Knoten hinzu. Der Kubernetes-Scheduler kann den Pod dann auf dem neu bereitgestellten Knoten planen.
Prüfen, ob nicht planbare Pods vorhanden sind
Prüfen Sie, ob nicht geplante Pods vorhanden sind, um festzustellen, ob Ihr Cluster skaliert werden muss:
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Geben Sie im Feld Filter den Wert
unschedulableein und drücken Sie die Eingabetaste.Wenn Pods aufgeführt sind, haben Sie nicht planbare Pods. Informationen zur Fehlerbehebung bei nicht planbaren Pods finden Sie unter Fehler: Pod nicht planbar. Wenn Sie die zugrunde liegende Ursache für nicht planbare Pods beheben, kann Cluster Autoscaler oft hochskaliert werden. In den folgenden Abschnitten finden Sie Informationen zum Beheben von Fehlern, die spezifisch für Cluster Autoscaler sind.
Wenn keine Pods aufgeführt sind, muss Cluster Autoscaler nicht hochskalieren und funktioniert wie erwartet.
Prüfen, ob Sie zuvor nicht planbare Pods hatten
Wenn Sie untersuchen, warum Cluster Autoscaler in der Vergangenheit fehlgeschlagen ist, suchen Sie nach zuvor nicht planbaren Pods:
Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.
Geben Sie einen Zeitraum für die Logeinträge an, die Sie aufrufen möchten.
Geben Sie im Bereich „Abfrage“ die folgende Abfrage ein:
logName="projects/PROJECT_ID/logs/events" jsonPayload.source.component="default-scheduler" jsonPayload.reason="FailedScheduling"Ersetzen Sie
PROJECT_IDdurch Ihre Projekt-ID.Klicken Sie auf Abfrage ausführen.
Wenn Ergebnisse aufgeführt sind, gab es im angegebenen Zeitraum nicht planbare Pods.
Prüfen, ob das Problem durch eine Einschränkung verursacht wird
Nachdem Sie bestätigt haben, dass Sie nicht geplante Pods haben, prüfen Sie, ob Ihr Problem mit Cluster Autoscaler durch eine der Einschränkungen für Cluster Autoscaler verursacht wird.
Fehler ansehen
Die Ursache von Problemen beim Hochskalieren lässt sich oft anhand von Fehlermeldungen ermitteln:
Wenn Sie bereits eine Fehlermeldung erhalten haben, finden Sie in der Tabelle mit Fehlermeldungen Tipps zum Beheben des Fehlers.
Wenn Sie noch keine Nachricht erhalten haben, haben Sie folgende Möglichkeiten:
- Probleme, die weniger als 72 Stunden alt sind: Fehlermeldungen in der Google Cloud Console ansehen.
- Probleme, die älter als 72 Stunden sind: Fehler in Ereignissen in Cloud Logging ansehen
Fehler in Benachrichtigungen ansehen
Wenn das Problem, das Sie beobachtet haben, vor weniger als 72 Stunden aufgetreten ist, sehen Sie sich die Benachrichtigungen zu Fehlern in der Google Cloud Console an. Diese Benachrichtigungen liefern wertvolle Informationen dazu, warum Cluster Autoscaler nicht hochskaliert wurde, und bieten Ratschläge, wie Sie den Fehler beheben und relevante Logs für weitere Untersuchungen aufrufen können.
So rufen Sie die Benachrichtigungen in der Google Cloud -Console auf:
Rufen Sie in der Google Cloud Console die Seite Kubernetes-Cluster auf.
Sehen Sie sich die Spalte Benachrichtigungen an. Die folgenden Benachrichtigungen sind mit Problemen beim Hochskalieren verknüpft:
Can't scale upCan't scale up podsCan't scale up a node pool
Klicken Sie auf die entsprechende Benachrichtigung, um einen Bereich mit Details zur Ursache des Problems und Empfehlungen zur Behebung aufzurufen.
Optional: Klicken Sie auf Logs, um die Protokolle für dieses Ereignis aufzurufen. Sie werden zum Log-Explorer weitergeleitet, wo eine Abfrage vorab ausgefüllt ist, mit der Sie das Skalierungsereignis weiter untersuchen können. Weitere Informationen zur Funktionsweise von Hochskalierungsereignissen finden Sie unter Cluster-Autoscaling-Ereignisse ansehen.
Wenn Sie nach dem Lesen der Hinweise in der Benachrichtigung weiterhin Probleme haben, finden Sie weitere Informationen in den Tabellen mit Fehlermeldungen.
Fehler in Ereignissen ansehen
Wenn das Problem, das Sie beobachtet haben, vor mehr als 72 Stunden aufgetreten ist, sehen Sie sich die Ereignisse in Cloud Logging an. Wenn ein Fehler aufgetreten ist, wird er häufig in einem Ereignis aufgezeichnet.
So rufen Sie Cluster-Autoscaling-Logs in der Google Cloud -Console auf:
Rufen Sie in der Google Cloud Console die Seite Kubernetes-Cluster auf.
Wählen Sie den Namen des Clusters aus, den Sie untersuchen möchten, um die Seite Clusterdetails aufzurufen.
Klicken Sie auf der Seite Clusterdetails auf den Tab Logs.
Klicken Sie auf dem Tab Logs auf den Tab Autoscaling-Logs, um die Logs aufzurufen.
Optional: Wenn Sie erweiterte Filter anwenden möchten, um die Ergebnisse einzugrenzen, klicken Sie auf den Button mit dem Pfeil rechts auf der Seite, um die Logs im Log-Explorer aufzurufen.
Weitere Informationen zur Funktionsweise von Hochskalierungsereignissen finden Sie unter Cluster-Autoscaling-Ereignisse ansehen. Ein Beispiel für die Verwendung von Cloud Logging finden Sie im folgenden Beispiel zur Fehlerbehebung.
Beispiel: Ein Problem beheben, das vor mehr als 72 Stunden aufgetreten ist
Im folgenden Beispiel wird gezeigt, wie Sie ein Problem mit einem Cluster untersuchen und beheben können, der nicht skaliert wird.
Szenario: Ein Pod wurde in der letzten Stunde als nicht planbar markiert. Cluster Autoscaler hat keine neuen Knoten bereitgestellt, um den Pod zu planen.
Lösung:
- Da das Problem vor mehr als 72 Stunden aufgetreten ist, untersuchen Sie es mit Cloud Logging anstatt sich die Benachrichtigungen anzusehen.
- In Cloud Logging finden Sie die Logging-Details für Cluster Autoscaler-Ereignisse, wie unter Fehler in Ereignissen ansehen beschrieben.
Suchen Sie nach
scaleUp-Ereignissen, die den Pod, den Sie untersuchen, im FeldtriggeringPodsenthalten. Sie können die Logeinträge filtern, auch nach einem bestimmten JSON-Feldwert. Weitere InformationenSie finden keine Scale-up-Ereignisse. Wenn Sie das getan haben, können Sie versuchen, ein
EventResultzu finden, das dieselbeeventIdwie dasscaleUp-Ereignis enthält. Anschließend können Sie sich das FelderrorMsgansehen und die Liste der möglichen scaleUp-Fehlermeldungen aufrufen.Da Sie keine
scaleUp-Ereignisse gefunden haben, suchen Sie weiter nachnoScaleUp-Ereignissen und prüfen die folgenden Felder:unhandledPodGroups: enthält Informationen zum Pod (oder zum Controller des Pods).reason: gibt globale Gründe an, warum das Hochskalieren möglicherweise blockiert wird.skippedMigs: gibt Gründe an, warum einige MIGs möglicherweise übersprungen werden.
Sie finden ein
noScaleUp-Ereignis für Ihren Pod und alle MIGs im FeldrejectedMigshaben dieselbe Grundmeldungs-ID"no.scale.up.mig.failing.predicate"mit den zwei Parametern"NodeAffinity"und"node(s) did not match node selector".
Lösung:
Nach Durchsicht der Liste der Fehlermeldungen stellen Sie fest, dass Cluster Autoscaler einen Knotenpool aufgrund eines fehlgeschlagenen Planungsprädikats für die ausstehenden Pods nicht hochskalieren kann. Die Parameter sind der Name des fehlgeschlagenen Prädikats und der Grund für den Fehler.
Zum Beheben des Problems prüfen Sie das Manifest des Pods und stellen fest, dass es eine Knotenauswahl enthält, die keiner MIG im Cluster entspricht. Sie löschen die Auswahl aus dem Manifest des Pods und erstellen den Pod neu. Cluster Autoscaler fügt einen neuen Knoten hinzu und der Pod wird geplant.
Fehler beim Hochskalieren beheben
Wenn Sie benutzerdefinierte ComputeClasses verwenden und die Probleme beim Hochskalieren mit den spezifischen Knotenkonfigurationen zusammenhängen, die in Ihrer ComputeClass definiert sind, lesen Sie den Abschnitt Fehlerbehebung bei benutzerdefinierten ComputeClasses.
Nachdem Sie den Fehler identifiziert haben, können Sie anhand der folgenden Tabellen nachvollziehen, was den Fehler verursacht hat und wie Sie ihn beheben können.
ScaleUp-Fehler
Ereignisfehlermeldungen für scaleUp-Ereignisse finden Sie im entsprechenden eventResult-Ereignis im Feld resultInfo.results[].errorMsg.
Wenn ein Hochskalierungsvorgang fehlschlägt, weil ein Kontingent überschritten wird, handelt es sich um einen Fehler bei der Knotenerstellung, der einen System-Backoff-Zeitraum auslöst, der bis zu 30 Minuten dauern kann. Weitere Informationen finden Sie unter Backoff-Zeiträume.
| Nachricht | Details | Parameter | Risikominderung |
|---|---|---|---|
"scale.up.error.out.of.resources" |
Ressourcenfehler treten auf, wenn Sie versuchen, neue Ressourcen in einer Zone anzufordern, die aufgrund der aktuellen Nichtverfügbarkeit einer Compute Engine-Ressource (z. B. GPUs oder CPUs) Ihre Anfrage nicht bearbeiten kann. | IDs der fehlgeschlagenen MIGs. | Folgen Sie der Fehlerbehebung für die Ressourcenverfügbarkeit in der Compute Engine-Dokumentation. |
"scale.up.error.quota.exceeded" |
Das scaleUp-Ereignis ist fehlgeschlagen, da einige MIGs aufgrund eines überschrittenen Compute Engine-Kontingents nicht erhöht werden konnten. | IDs der fehlgeschlagenen MIGs. | Auf dem Tab Fehler der MIG in der Google Cloud Console können Sie sehen, welches Kontingent überschritten wird. Wenn Sie wissen, welches Kontingent überschritten wird, folgen Sie der Anleitung, um eine Kontingenterhöhung anzufordern. |
"scale.up.error.waiting.for.instances.timeout" |
Das Hochskalieren der verwalteten Instanzgruppe ist aufgrund einer Zeitüberschreitung fehlgeschlagen. | IDs der fehlgeschlagenen MIGs. | Wenn die Instanzen gestartet werden, sich aber nicht bei der Steuerungsebene registrieren, folgen Sie der Anleitung zur Fehlerbehebung bei der Instanzregistrierung. Diese Meldung sollte nur temporär sein. Wenn sie weiterhin angezeigt wird, wenden Sie sich an Cloud Customer Care, um weitere Unterstützung zu erhalten. |
"scale.up.error.ip.space.exhausted" |
Hochskalieren nicht möglich, da Instanzen in einigen der verwalteten Instanzgruppen keine IP-Adressen mehr zur Verfügung hatten. Das bedeutet, dass der Cluster nicht genügend nicht zugewiesenen IP-Adressbereich hat, um neue Knoten oder Pods hinzuzufügen. | IDs der fehlgeschlagenen MIGs. | Folgen Sie der Anleitung unter Zu wenig verfügbarer IP-Adressbereich für Pods. |
"scale.up.error.service.account.deleted" |
Hochskalieren nicht möglich, da das Dienstkonto gelöscht wurde. | IDs der fehlgeschlagenen MIGs. | Versuchen Sie, das Dienstkonto wiederherzustellen. Wenn das nicht funktioniert, wenden Sie sich an Cloud Customer Care, um das Problem weiter untersuchen zu lassen. |
Gründe für ein noScaleUp-Ereignis
Ein noScaleUp-Ereignis wird regelmäßig ausgegeben, wenn der Cluster nicht planbare Pods enthält und von Cluster Autoscaler nicht hochskaliert werden kann, um die Pods zu planen. noScaleUp-Ereignisse sind Best-Effort-Ereignisse und decken nicht alle potenziellen Fälle ab.
Gründe auf oberster Ebene für "NoScaleUp"
Meldungen mit Gründen auf oberster Ebene für noScaleUp-Ereignisse werden im Feld noDecisionStatus.noScaleUp.reason angezeigt. Die Meldung enthält einen Grund auf oberster Ebene, warum Cluster Autoscaler den Cluster nicht hochskalieren kann.
| Meldung | Details | Risikominderung |
|---|---|---|
"no.scale.up.in.backoff" |
Hochskalieren nicht möglich, da der Vorgang in einen Backoff-Zeitraum fällt (vorübergehend blockiert ist). Diese Meldung kann während einer vertikalen Skalierung mit einer großen Anzahl von Pods auftreten. | Diese Meldung sollte nur temporär sein. Prüfen Sie diesen Fehler nach einigen Minuten noch einmal. Wenn diese Meldung weiterhin angezeigt wird, wenden Sie sich an Cloud Customer Care, um das Problem untersuchen zu lassen. |
Gründe auf oberster Ebene für "noScaleUp" in Bezug auf die automatische Knotenbereitstellung
Meldungen mit Gründen auf oberster Ebene für noScaleUp-Ereignisse in Bezug auf die automatische Knotenbereitstellung werden im Feld noDecisionStatus.noScaleUp.napFailureReason angezeigt. Die Meldung enthält einen Grund auf oberster Ebene, warum Cluster Autoscaler keine neuen Knotenpools bereitstellen kann.
| Meldung | Details | Risikominderung |
|---|---|---|
"no.scale.up.nap.disabled" |
Die automatische Knotenbereitstellung konnte nicht hochskaliert werden, da sie auf Clusterebene nicht aktiviert ist. Wenn die automatische Knotenbereitstellung deaktiviert ist, werden neue Knoten nicht automatisch bereitgestellt, wenn der ausstehende Pod Anforderungen hat, die von vorhandenen Knotenpools nicht erfüllt werden können. |
Prüfen Sie die Clusterkonfiguration und lesen Sie den Abschnitt Automatische Knotenbereitstellung aktivieren. |
Gründe auf MIG-Ebene für "noScaleUp"
Meldungen mit Gründen auf MIG-Ebene für noScaleUp-Ereignisse werden in den Feldern noDecisionStatus.noScaleUp.skippedMigs[].reason und noDecisionStatus.noScaleUp.unhandledPodGroups[].rejectedMigs[].reason angezeigt.
Die Meldung enthält einen Grund, warum Cluster Autoscaler die Größe einer bestimmten MIG nicht erhöhen kann.
| Meldung | Details | Parameter | Risikominderung |
|---|---|---|---|
"no.scale.up.mig.skipped" |
Eine MIG kann nicht hochskaliert werden, da sie während der Simulation übersprungen wurde. | Gründe, warum die MIG übersprungen wurde (z. B. fehlende Pod-Anforderung). | Prüfen Sie die in der Fehlermeldung enthaltenen Parameter und geben Sie an, warum die MIG übersprungen wurde. |
"no.scale.up.mig.failing.predicate" |
Hochskalieren eines Knotenpools aufgrund eines fehlgeschlagenen Planungsprädikats für die ausstehenden Pods nicht möglich. | Name des fehlgeschlagenen Prädikats und Gründe für den Fehler. | Überprüfen Sie sowohl Pod-Anforderungen wie Affinitätsregeln, Markierungen oder Toleranzen als auch Ressourcenanforderungen. |
Gründe auf Pod-Gruppenebene für "noScaleUp" in Bezug auf die automatische Knotenbereitstellung
Meldungen mit Gründen auf Pod-Gruppenebene für noScaleUp-Ereignisse in Bezug auf die automatische Knotenbereitstellung werden im Feld noDecisionStatus.noScaleUp.unhandledPodGroups[].napFailureReasons[] angezeigt. Die Meldung enthält einen Grund, warum Cluster Autoscaler keinen neuen Knotenpool zur Planung einer bestimmten Pod-Gruppe bereitstellen kann.
| Meldung | Details | Parameter | Risikominderung |
|---|---|---|---|
"no.scale.up.nap.pod.gpu.no.limit.defined" |
Die automatische Knotenbereitstellung konnte keine Knotengruppe bereitstellen, da ein ausstehender Pod eine GPU-Anfrage hat, die GPU-Ressourcenlimits jedoch nicht auf Clusterebene definiert sind. | Angeforderter GPU-Typ. | Prüfen Sie die GPU-Anfrage des ausstehenden Pods und aktualisieren Sie die Konfiguration der automatischen Knotenbereitstellung für GPU-Limits auf Clusterebene. |
"no.scale.up.nap.pod.gpu.type.not.supported" |
Die automatische Knotenbereitstellung hat keine Knotengruppe für den Pod bereitgestellt, da sie Anfragen für einen unbekannten GPU-Typ enthält. | Angeforderter GPU-Typ. | Prüfen Sie, ob die Konfiguration des ausstehenden Pods des GPU-Typs mit einem unterstützten GPU-Typ übereinstimmt. |
"no.scale.up.nap.pod.zonal.resources.exceeded" |
Die automatische Knotenbereitstellung hat keine Knotengruppe für den Pod in dieser Zone bereitgestellt, da dies entweder gegen die maximalen Ressourcenlimits von Clustern verstoßen oder die verfügbaren Ressourcen in der Zone überschreiten würde. Oder es gibt keinen Maschinentyp, der in die Anfrage passen könnte. | Name der betreffenden Zone. | Prüfen und aktualisieren Sie clusterweite maximale Ressourcenlimits, die Pod-Ressourcenanfragen oder die verfügbaren Zonen für die automatische Knotenbereitstellung. |
"no.scale.up.nap.pod.zonal.failing.predicates" |
Die automatische Knotenbereitstellung hat aufgrund fehlgeschlagener Prädikate keine Knotengruppe für den Pod in dieser Zone bereitgestellt. | Name der betreffenden Zone und Gründe, warum Prädikate fehlgeschlagen sind. | Prüfen Sie die Anforderungen des ausstehenden Pods, z. B. Affinitätsregeln, Markierungen, Toleranzen oder Ressourcenanforderungen. |
Weitere Untersuchungen durchführen
In den folgenden Abschnitten wird beschrieben, wie Sie den Log-Explorer und gcpdiag verwenden können, um weitere Informationen zu Ihren Fehlern zu erhalten.
Fehler im Log-Explorer untersuchen
Wenn Sie die Fehlermeldung genauer untersuchen möchten, können Sie sich die Logs ansehen, die sich auf den Fehler beziehen:
Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.
Geben Sie im Bereich „Abfrage“ die folgende Abfrage ein:
resource.type="k8s_cluster" log_id("container.googleapis.com/cluster-autoscaler-visibility") jsonPayload.resultInfo.results.errorMsg.messageId="ERROR_MESSAGE"Ersetzen Sie
ERROR_MESSAGEdurch die Nachricht, die Sie untersuchen möchten. Beispiel:scale.up.error.out.of.resources.Klicken Sie auf Abfrage ausführen.
Einige Fehler mit gcpdiag beheben
gcpdiag ist ein Open-Source-Tool, das mit Unterstützung von Google Cloud-Technikern entwickelt wurde. Es ist kein offiziell unterstütztes Google Cloud -Produkt.
Wenn eine der folgenden Fehlermeldungen angezeigt wird, können Sie gcpdiag verwenden, um das Problem zu beheben:
scale.up.error.out.of.resourcesscale.up.error.quota.exceededscale.up.error.waiting.for.instances.timeoutscale.up.error.ip.space.exhaustedscale.up.error.service.account.deleted
Eine Liste und Beschreibung aller gcpdiag-Tool-Flags finden Sie in der gcpdiag-Nutzungsanleitung.
Komplexe Fehler bei der Skalierung beheben
In den folgenden Abschnitten finden Sie Informationen zur Behebung von Fehlern, die mehrere Schritte erfordern oder für die keine zugehörige Ereignismeldung vom Cluster-Autoscaler vorhanden ist.
Pod passt nicht auf den Knoten
Symptome:
Ihre Pods bleiben im Status Pending mit der Fehlermeldung PodUnschedulable oder in Ihrem Cluster wird die Fehlermeldung Pods unschedulable angezeigt und Cluster Autoscaler skaliert nicht auf, um Knoten hinzuzufügen.
Ursache:
Das Cluster-Autoscaling fügt einem Knotenpool nur Knoten hinzu, wenn der Maschinentyp genügend Ressourcen wie CPUs, GPUs, Arbeitsspeicher und Speicher für einen ausstehenden Pod bietet. Wenn die Ressourcenanfragen eines Pods die Ressourcen eines einzelnen Knotens überschreiten, wird der Cluster Autoscaler nicht hochskaliert, da der Pod immer noch nicht auf einen neuen Knoten passt.
Außerdem sind die zuweisbaren Ressourcen eines Knotens geringer als seine Gesamtresourcen, da Systemkomponenten einen Teil dieser Ressourcen reservieren. Weitere Informationen dazu, wie GKE zuweisbare Ressourcen berechnet, finden Sie unter Zuweisbare Knotenressourcen.
Lösung:
So prüfen Sie, ob die Ressourcenanfragen eines Pods die von Ihren Knoten bereitgestellten Ressourcen überschreiten, und beheben das Problem: In diesem Beispiel werden CPU-Ressourcen geprüft. Dieselben Schritte gelten jedoch auch für GPU-, Arbeitsspeicher- und Speicherressourcen:
Rufen Sie in der Google Cloud Console die Seite Arbeitslasten auf.
Klicken Sie auf die Fehlermeldung
PodUnschedulable.Klicken Sie im Bereich Details auf den Namen des Pods. Wenn es mehrere Pods gibt, beginnen Sie mit dem ersten Pod und wiederholen Sie den folgenden Vorgang für jeden Pod.
Klicken Sie auf der Seite Pod-Details auf den Tab YAML.
Notieren Sie die Ressourcenanfragen der einzelnen Container im Pod, um die gesamten Ressourcenanfragen zu ermitteln. In der folgenden Pod-Konfiguration benötigt der Pod beispielsweise 2 vCPUs:
resources: limits: cpu: "3" requests: cpu: "2"Rufen Sie die Knotenpooldetails des Clusters mit dem nicht geplanten Pod auf:
Rufen Sie in der Google Cloud Console die Seite Kubernetes-Cluster auf.
Klicken Sie auf den Namen des Clusters, für den die Fehlermeldung
Pods unschedulableangezeigt wird.Klicken Sie auf der Seite Clusterdetails auf den Tab Knoten.
Notieren Sie sich im Abschnitt Knotenpools den Wert in der Spalte Maschinentyp, z. B.
n1-standard-1.
Vergleichen Sie die Ressourcenanfrage mit den vom Maschinentyp bereitgestellten vCPUs. Wenn ein Pod beispielsweise 2 vCPUs anfordert, die verfügbaren Knoten jedoch den Maschinentyp
n1-standard-1verwenden, haben die Knoten nur 1 vCPU. Bei einer solchen Konfiguration löst Cluster Autoscaler keine Aufskalierung aus, da der Pod immer noch nicht auf einen neuen Knoten passt. Weitere Informationen zu verfügbaren Maschinentypen finden Sie in der Compute Engine-Dokumentation unter Leitfaden zu Ressourcen und Vergleichen für Maschinenfamilien.Beheben Sie die Diskrepanz entsprechend den Anforderungen Ihrer Arbeitslast:
- Wenn der Pod die angeforderten Ressourcen benötigt: Erstellen Sie einen Knotenpool mit einem Maschinentyp, der die Ressourcenanfragen des Pods unterstützen kann.
- Wenn die Ressourcenanfragen des Pods nicht korrekt sind: Aktualisieren Sie die Definition des Pods, damit er auf vorhandene Knoten passt.
Fehlerhafte Cluster verhindern das Hochskalieren
Symptome:
Das Cluster-Autoscaling beendet alle Skalierungsvorgänge und die cluster-autoscaler-status-ConfigMap enthält ein Ereignis mit dem Typ Warning und ClusterUnhealthy als Grund.
Führen Sie den folgenden Befehl aus, um die cluster-autoscaler-status-ConfigMap aufzurufen:
kubectl describe configmap cluster-autoscaler-status -n kube-system
Ursache:
Cluster Autoscaler skaliert nicht hoch, wenn ein Cluster als fehlerhaft eingestuft wird. Der Cluster Autoscaler bestimmt den Clusterstatus anhand des Verhältnisses von fehlerfreien und einsatzbereiten Knoten, nicht anhand des Status der Steuerungsebene. Wenn 45% der Knoten in einem Cluster fehlerhaft oder nicht bereit sind, hält Cluster Autoscaler alle Vorgänge an.
Cluster Autoscaler betrachtet einen bereiten Knoten auch als NotReady, wenn der Knoten eine Markierung mit dem Präfix ignore-taint.cluster-autoscaler.kubernetes.io/ hat.
Cluster Autoscaler behandelt den Knoten als NotReady, solange diese Markierung vorhanden ist.
Lösung:
Um dieses Problem zu beheben, verringern Sie die Anzahl der fehlerhaften Knoten, indem Sie eine oder beide der folgenden Aktionen ausführen:
- Untersuchen und reparieren Sie fehlerhafte oder
NotReady-Knoten, damit weniger als 45 % der Knoten im Cluster fehlerhaft sind. - Wenn für bereite Knoten ein Taint mit dem Präfix
ignore-taint.cluster-autoscaler.kubernetes.io/vorhanden ist, entfernen Sie den Taint.
Nächste Schritte
- Lesen Sie die FAQ zum Kubernetes Cluster Autoscaler.
- In diesem YouTube-Video erfahren Sie, wie Sie Fehler und Skalierungsprobleme beheben.
Probleme mit benutzerdefinierten ComputeClass-Klassen beheben
Wenn Sie in der Dokumentation keine Lösung für Ihr Problem finden, können Sie Support anfordern. Dort erhalten Sie unter anderem Hilfe zu den folgenden Themen:
- Sie können eine Supportanfrage stellen, indem Sie sich an Cloud Customer Care wenden.
- Support von der Community erhalten, indem Sie Fragen auf Stack Overflow stellen und mit dem Tag
google-kubernetes-enginenach ähnlichen Problemen suchen. Sie können auch dem#kubernetes-engine-Slack-Kanal beitreten, um weitere Unterstützung von der Community zu erhalten. - Sie können Probleme oder Feature Requests über die öffentliche Problemverfolgung melden.