Wenn das vertikale Pod-Autoscaling in der Google Kubernetes Engine (GKE) nicht wie erwartet funktioniert, werden Ihre Arbeitslasten möglicherweise nicht richtig skaliert. Diese Probleme können verhindern, dass Anwendungen die Last bewältigen, was zu Leistungsproblemen oder Ausfällen führen kann. Möglicherweise werden Pods nicht mit neuen Ressourcenempfehlungen neu gestartet oder Empfehlungen stimmen nicht mit der tatsächlichen Nutzung überein.
In diesem Dokument finden Sie Informationen zur Behebung häufiger Probleme mit der VerticalPodAutoscaler-Konfiguration oder unerwarteten Empfehlungen. Wenn Sie diese Schritte zur Fehlerbehebung befolgen, können Sie Ihre Anwendungen effizient und zuverlässig entsprechend der Nachfrage skalieren.
Diese Informationen sind wichtig für Anwendungsentwickler, die VerticalPodAutoscaler-Ressourcen konfigurieren und dafür sorgen müssen, dass ihre Anwendungen korrekt skaliert werden. Außerdem können Plattformadministratoren und ‑operatoren damit Probleme mit der Clusterkonfiguration beheben, die sich auf automatisch skalierte Arbeitslasten auswirken. Weitere Informationen zu den gängigen Rollen und Beispielaufgaben, auf die wir in Cloud de Confiance by S3NS -Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.
VerticalPodAutoscaler-Probleme diagnostizieren
Wenn Sie Probleme mit einem VerticalPodAutoscaler diagnostizieren möchten, prüfen Sie den Status und die Konfiguration mit kubectl oder der Cloud de Confiance Console.
VerticalPodAutoscaler beschreiben
Verwenden Sie den Befehl kubectl describe vpa, um Echtzeitberechnungen und aktuelle Skalierungsentscheidungen aufzurufen:
kubectl describe vpa VPA_NAME -n NAMESPACE_NAME
Ersetzen Sie Folgendes:
VPA_NAME: Der Name Ihres VerticalPodAutoscaler.NAMESPACE_NAME: der Namespace Ihres VerticalPodAutoscalers.
Die Ausgabe sieht etwa so aus:
Name: sample-deployment-vpa
Namespace: default
API Version: autoscaling.k8s.io/v1
Kind: VerticalPodAutoscaler
# Multiple lines are omitted here
Spec:
Target Ref:
API Version: apps/v1
Kind: Deployment
Name: sample-deployment
Update Policy:
Update Mode: Auto
Status:
Conditions:
Last Transition Time: 2025-10-09T10:00:00Z
Message: VPA is fetching history in order to provide recommendation
Reason: FetchingHistory
Status: True
Type: FetchingHistory
Last Transition Time: 2025-10-09T10:05:00Z
Message: VPA pod metrics aren't available yet
Reason: NoMetrics
Status: True
Type: LowConfidence
Last Transition Time: 2025-10-09T10:10:00Z
Message: VPA is able to provide a recommendation
Reason: RecommendationProvided
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: sample-container
Lower Bound:
Cpu: 100m
Memory: 128Mi
Target:
Cpu: 200m
Memory: 256Mi
Upper Bound:
Cpu: 500m
Memory: 512Mi
Events: <none>
Sehen Sie sich in der Ausgabe die folgenden Hauptabschnitte an:
Spec: Hier werden Konfigurationsdetails angezeigt, einschließlich des FeldstargetRef(die Zielarbeitslast) und des FeldsupdatePolicy(wie Updates angewendet werden).Status: Zeigt den AbschnittConditions(Betriebszustand) und den AbschnittRecommendation(CPU- und Arbeitsspeicherressourcenwerte, die für jeden Container generiert wurden) an.Events: Listet die letzten Aktionen oder Fehler im Zusammenhang mit dem VerticalPodAutoscaler-Objekt auf.
Manifest für VerticalPodAutoscaler ansehen
Wenn Sie die vollständige Konfiguration und den Status eines VerticalPodAutoscaler ansehen möchten, prüfen Sie das YAML-Manifest mit kubectl oder der Cloud de Confiance -Konsole:
Console
Rufen Sie in der Cloud de Confiance Console die Seite Objektbrowser auf.
Klicken Sie auf die Filterliste Objekttyp.
Heben Sie alle vorhandenen Auswahlen auf.
Wählen Sie VerticalPodAutoscaler aus und klicken Sie auf OK.
Wählen Sie in der gefilterten Liste die API-Gruppe autoscaling.k8s.io aus.
Wählen Sie die Objektart VerticalPodAutoscaler aus.
Klicken Sie auf den Namen des VerticalPodAutoscalers, den Sie prüfen möchten.
kubectl
kubectl get vpa VPA_NAME \
-n NAMESPACE_NAME \
-o yaml
Ersetzen Sie Folgendes:
VPA_NAME: Der Name Ihres VerticalPodAutoscaler.NAMESPACE_NAME: der Namespace Ihres VerticalPodAutoscalers.
Status von VerticalPodAutoscaler in der Cloud de Confiance -Konsole prüfen
So prüfen Sie den VerticalPodAutoscaler-Status für Ihre Arbeitslasten in der Cloud de Confiance -Konsole:
Zur Seite „Arbeitslasten“
Klicken Sie auf den Namen Ihrer Arbeitslast.
Rufen Sie den Tab Details auf und suchen Sie den Bereich Autoscaling.
In der Zeile Vertikales Pod-Autoscaling finden Sie Statusmeldungen zur Messwerterfassung und zum Konfigurationszustand.
Entscheidungsprotokolle erfassen
Wenn Sie detaillierte Informationen zu den Berechnungen und Entscheidungen von VerticalPodAutoscaler erhalten möchten, aktivieren Sie Entscheidungslogs für vertikales Pod-Autoscaling (Vorabversion) in Cloud Logging.
In diesen Logs werden Ereignisse wie UPDATE_RECOMMENDATION, EVICT_POD, APPLY_RECOMMENDATION_IN_PLACE und APPLY_RECOMMENDATION_ON_EVICTION erfasst.
Informationen zum Aktivieren und Prüfen von Entscheidungslogs finden Sie unter Ereignisprotokolle für vertikales Pod-Autoscaling erfassen.
Fehlerbehebung bei VerticalPodAutoscaler-Empfehlungen
In den folgenden Abschnitten werden Probleme behandelt, bei denen ein VerticalPodAutoscaler keine Empfehlungen generiert oder Empfehlungen generiert, die von den Erwartungen abweichen.
Ein VerticalPodAutoscaler liefert keine Empfehlungen
Symptome:
- Das Feld
Status.Recommendationim VerticalPodAutoscaler-Manifest ist leer. - In den Bedingungen im VerticalPodAutoscaler-Manifest werden die Statusbedingungen
NoPodsMatched,FetchingHistoryoderLowConfidenceangezeigt.
Ursache:
- Falsches Ziel: Das Feld
spec.targetRefim VerticalPodAutoscaler-Manifest verweist nicht auf eine vorhandene Arbeitslast im selben Namespace. - Erste Messwerterfassung: Der VerticalPodAutoscaler wurde vor Kurzem erstellt und erfasst noch Verlaufsdaten zur Ressourcennutzung.
- Probleme mit der
metrics-server-Komponente: Der VerticalPodAutoscaler basiert auf Messwerten dermetrics-server-Komponente. Wenn diemetrics-server-Komponente nicht richtig funktioniert, kann der VerticalPodAutoscaler keine Nutzungsdaten abrufen. - Keine ausgeführten Pods: Die Zielarbeitslast hat keine ausgeführten oder bereiten Pods, die vom VerticalPodAutoscaler beobachtet werden können.
Lösung:
Feld
targetRefprüfen: Prüfen Sie die Werte für die Felderkind,nameundapiVersionim Bereichspec.targetRef. Achten Sie darauf, dass alle Werte mit der Zielarbeitslast übereinstimmen. Führen Sie folgenden Befehl aus, um zu prüfen, ob die Arbeitslast vorhanden ist:kubectl get KIND WORKLOAD_NAME \ -n NAMESPACE_NAMEErsetzen Sie Folgendes:
KIND: der Arbeitslasttyp, z. B.deploymentoderstatefulset.WORKLOAD_NAME: Der Name Ihrer Arbeitslast.NAMESPACE_NAME: Namespace Ihrer Arbeitslast.
Zeit für die Erfassung von Messwerten einplanen: Für neue VerticalPodAutoscaler-Ressourcen ist Zeit erforderlich, um Daten zu erfassen. Behalten Sie das Feld
Status.Conditionsim Blick, um zu sehen, wann der Status zuRecommendationProvidedwechselt.metrics-server-Komponente prüfen:Prüfen Sie, ob der Pod für die Komponente
metrics-serverausgeführt wird:kubectl get pods -n kube-system | grep metrics-serverWenn der Pod nicht ausgeführt wird oder eine hohe Anzahl von Neustarts aufweist, prüfen Sie die Logs:
kubectl logs -n kube-system -l k8s-app=metrics-serverLogeinträge, die Wörter wie
error,failedoderunable to fetchenthalten, weisen auf Probleme bei der Erfassung von Messwerten hin.
Prüfen, ob Pods ausgeführt werden: Prüfen Sie, ob die Zielarbeitslast mindestens einen ausgeführten und bereiten Pod hat.
Empfehlungen für VerticalPodAutoscaler sind unerwartet
Symptome:
- Die CPU- oder Arbeitsspeicherwerte im Abschnitt
Status.Recommendationsind höher oder niedriger als erwartet. - Die Empfehlungen stimmen nicht mit dem beobachteten Ressourcenverbrauch der Arbeitslast überein.
Ursache:
- Änderungen am Arbeitslastverhalten: VerticalPodAutoscaler-Empfehlungen basieren auf der bisherigen Nutzung. Aktuelle Änderungen bei den Nutzungsmustern von Anwendungen werden möglicherweise noch nicht berücksichtigt.
- Arbeitslastmerkmale: Für kurzlebige Jobs oder Arbeitslasten mit sehr unregelmäßigen Nutzungsmustern werden möglicherweise keine optimalen Empfehlungen ausgegeben.
- In Konflikt stehende VerticalPodAutoscaler-Ressourcen: Möglicherweise sind mehrere VerticalPodAutoscaler-Ressourcen für dieselbe Arbeitslast konfiguriert.
Lösung:
- Anpassungszeit einplanen: Geben Sie dem VerticalPodAutoscaler Zeit, nach Anwendungsänderungen neue Nutzungsmuster zu lernen.
- Eignung bewerten: Prüfen Sie, ob ein VerticalPodAutoscaler oder ein horizontaler Pod-Autoscaler für den Arbeitslasttyp am besten geeignet ist.
Nach in Konflikt stehenden VerticalPodAutoscaler-Ressourcen suchen:
Alle VerticalPodAutoscaler-Ressourcen in Ihrem Cluster auflisten:
kubectl get vpa --all-namespacesSehen Sie sich das Feld
spec.targetReffür jede Ressource an. Wenn mehrere VerticalPodAutoscaler-Ressourcen auf dieselbe Arbeitslast ausgerichtet sind, entfernen oder passen Sie die in Konflikt stehenden Ressourcen an, sodass nur ein VerticalPodAutoscaler auf eine bestimmte Arbeitslast ausgerichtet ist.
Fehlerbehebung bei Pod-Ressourcenaktualisierungen
In den folgenden Abschnitten werden Probleme behandelt, bei denen Empfehlungen vorhanden sind, aber nicht auf Ziel-Pods angewendet werden.
Pod-Ressourcenanfragen werden nicht aktualisiert
Symptome:
- Das VerticalPodAutoscaler-Manifest zeigt Empfehlungen im Abschnitt
Statusan, aber das Feldresources.requestsim Pod-Manifest wird nicht aktualisiert. - Pods werden nicht neu gestartet, um Empfehlungen anzuwenden, wenn der Aktualisierungsmodus
AutooderRecreateverwendet wird.
Ursache:
- Das Feld
updateModeistOff: Wenn das Feldspec.updatePolicy.updateModeaufOffgesetzt ist, generiert der VerticalPodAutoscaler Empfehlungen, wendet sie aber nicht an. - Arbeitslast hat nur ein Replikat: Im Aktualisierungsmodus
AutooderRecreatevermeidet der VerticalPodAutoscaler das Entfernen von Arbeitslasten mit einem einzelnen Replikat, um Ausfallzeiten zu verhindern.
Lösung:
updateMode-Feld prüfen: Ändern Sie das VerticalPodAutoscaler-Manifest, um das Feldspec.updatePolicy.updateModeaufAuto,RecreateoderInPlaceOrRecreatefestzulegen.- Replikatanzahl erhöhen: Achten Sie bei Arbeitslasten, die den Aktualisierungsmodus
AutooderRecreateverwenden, darauf, dass das Deployment oder StatefulSet mehr als ein Replikat hat.
Direkte Updates schlagen fehl oder bleiben zurückgestellt
Symptome:
- Die direkte Größenanpassung des Containers kann nicht abgeschlossen werden oder wird aufgeschoben.
Ursache:
- Unzureichende Knotenkapazität: Wenn der Knoten nicht genügend Kapazität für die aktualisierten Ressourcenanfragen hat, wird der In-Place-Vorgang zur Größenänderung aufgeschoben.
Lösung:
Status der verzögerten Größenänderung und Knotenkapazität prüfen:
Wenn die Größenänderung länger als fünf Minuten aufgeschoben wird, wird der Pod vom VerticalPodAutoscaler entfernt und neu erstellt, um die Empfehlung anzuwenden. So prüfen Sie den Status des verzögerten Updates:
Prüfen Sie die Pod-Annotationen, um festzustellen, ob die Annotation
vpaInPlaceUpdatedauf"true"gesetzt ist:metadata: annotations: vpaInPlaceUpdated: "true" vpaUpdates: 'Pod resources updated by sample-deployment-vpa: container 0: cpu request, memory request'Prüfen Sie den aufgeschobenen Status, indem Sie das Feld
status.conditionsnach Ereignissen für aufgeschobene Größenänderungen durchsuchen:status: conditions: - type: PodResizePending status: "True" reason: Deferred message: "Node didn't have enough resource: ..."Prüfen Sie die Kubernetes-Ereignisse für den Pod:
kubectl get events -n NAMESPACE_NAME --field-selector involvedObject.kind=Pod,involvedObject.name=POD_NAMEErsetzen Sie Folgendes:
NAMESPACE_NAME: Der Namespace Ihres Pods.POD_NAME: der Name Ihres Pods.
Suchen Sie nach Ereignissen mit einem der folgenden Gründe:
ResizedPod(erfolgreiches In-Place-Update) oderEvictedByVPA(Fallback auf Neuerstellung).
Nächste Schritte
Wenn Sie in der Dokumentation keine Lösung für Ihr Problem finden, finden Sie unter Support erhalten weitere Hilfe, einschließlich Ratschlägen 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 StackOverflow stellen und das Tag
google-kubernetes-engineverwenden, um nach ähnlichen Problemen zu suchen. Sie können auch dem#kubernetes-engine-Slack-Kanal beitreten, um weiteren Community-Support zu erhalten. - Sie können Probleme oder Feature Requests über die öffentliche Problemverfolgung melden.