Auf dieser Seite erhalten Sie einen Überblick über die Funktion „Vertikales Pod-Autoscaling“ in Google Kubernetes Engine (GKE) und Referenzmaterial für die benutzerdefinierte VerticalPodAutoscaler
-Ressource und verwandte Typen.
Vertikales Pod-Autoscaling bietet Empfehlungen zur Ressourcennutzung in einem bestimmten Zeitraum. Für einen plötzlichen Anstieg der Ressourcennutzung verwenden Sie das horizontale Pod-Autoscaling.
Informationen zur Verwendung des vertikalen Pod-Autoscalings finden Sie unter Anfragen und Limits für Containerressourcen skalieren.
Funktionsweise von vertikalem Pod-Autoscaling
Mit vertikalem Pod-Autoscaling können Sie die für Pods erforderlichen CPU- und Arbeitsspeicherressourcen analysieren und festlegen. Anstatt aktuelle CPU-Anfragen und -Limits sowie Speicheranforderungen und -limits für die Container in Ihren Pods festzulegen, können Sie das vertikale Pod-Autoscaling so konfigurieren, dass sie empfohlene Werte für CPU- und Speicheranfragen sowie Limits bereitstellt, die Sie zur manuellen Aktualisierung Ihrer Pods verwenden können. Sie können das vertikale Pod-Autoscaling auch so konfigurieren, dass die Werte automatisch aktualisiert werden.
Vertikales Pod-Autoscaling ist in Autopilot-Clustern standardmäßig aktiviert.
Vertikales Pod-Autoscaling im automatischen Modus
Aufgrund von Kubernetes-Einschränkungen können die Ressourcenanforderungen eines aktiven Pods nur geändert werden, indem der Pod neu erstellt wird. Wenn Sie einen VerticalPodAutoscaler
-Objekt mit einem updateMode
von Auto
erstellen, bereinigt VerticalPodAutoscaler
einen Pod, wenn er die Ressourcenanforderungen des Pods ändern muss.
Sie können ein Budget für Pod-Störungen verwenden, um die Anzahl der Pod-Neustarts zu begrenzen. Mit dem Cluster Autoscaler und der automatischen Knotenbereitstellung können Sie gewährleisten, dass ein Cluster den neuen Umfang Ihrer Arbeitslasten verarbeiten kann.
Vertikales Pod-Autoscaling benachrichtigt vor dem Update den Cluster Autoscaler. Die für die geänderte Arbeitslast erforderlichen Ressourcen werden bereitgestellt, bevor sie neu erstellt wird, um die Unterbrechungszeit zu minimieren.
Vorteile
Vertikales Pod-Autoscaling bietet folgende Vorteile:
- Wenn Sie die richtigen Ressourcenanfragen und -limits für Ihre Arbeitslasten festlegen, verbessern Sie die Stabilität und Kosteneffizienz. Wenn die Pod-Ressourcengrößen kleiner sind als Ihre Arbeitslasten benötigen, kann Ihre Anwendung gedrosselt werden oder infolge von Fehlern aufgrund mangelnden Arbeitsspeichers ausfallen. Sind Ihre Ressourcen zu groß bemessen, müssen Sie Verschwendung und somit höheren Rechnungen in Kauf nehmen.
- Clusterknoten werden effizient eingesetzt, da Pods die richtigen Ressourcenmengen nutzen.
- Pods werden auf Knoten geplant, auf denen die benötigten Ressourcen verfügbar sind.
- Sie müssen kein zeitaufwändiges Benchmarking durchführen, um die richtigen Werte für CPU- und Speicheranforderungen zu ermitteln.
- Die Wartungszeit wird reduziert, da die CPU- und Speicheranforderungen jederzeit automatisch angepasst werden können, ohne dass Sie etwas tun müssen.
Vertikales Pod-Autoscaling in Google Kubernetes Engine (GKE) bietet gegenüber dem Open-Source-Autoscaler von Kubernetes folgende Vorteile:
- Bei der Bestimmung des Empfehlungsziels werden die maximalen Knotengrößen und Ressourcenkontingente berücksichtigt.
- Benachrichtigt den Cluster Autoscaler, um die Clusterkapazität anzupassen.
- Es werden Verlaufsdaten verwendet und Messwerte bereitgestellt, die vor der Aktivierung von vertikalem Pod-Autoscaling erfasst wurden.
- Führt vertikales Pod-Autoscaling-Pods als Steuerungsebenenprozesse und nicht als Deployments auf Ihren Worker-Knoten aus.
Beschränkungen
- Wenn Sie vertikales Pod-Autoscaling mit horizontalem Pod-Autoscaling verwenden möchten, verwenden Sie das multidimensionale Pod-Autoscaling. Sie können auch vertikales Pod-Autoscaling mit horizontalem Pod-Autoscaling für benutzerdefinierte und externe Messwerte verwenden.
- Vertikales Pod-Autoscaling ist aufgrund der eingeschränkten Sichtbarkeit der tatsächlichen Arbeitsspeichernutzung der Arbeitslast noch nicht bereit für die Verwendung mit JVM-Arbeitslasten.
- Vertikales Pod-Autoscaling hat eine Standardeinstellung von mindestens zwei Replikaten für Deployments, um Pods durch überarbeitete Ressourcenwerte zu ersetzen. In GKE Version 1.22 und höher können Sie diese Einstellung überschreiben. Geben Sie dazu im Feld PodUpdatePolicy einen Wert für
minReplicas
an.
Best Practices
- Um Unterbrechungen bei der Clusteraktualisierung zu vermeiden, sollten Sie die Anzahl der
VerticalPodAutoscaler
-Objekte pro Cluster unter 1.000 halten. - Vertikales Pod-Autoscaling funktioniert am besten mit homogenen Arbeitslasten mit langer Ausführungszeit.
API-Referenz
Dies ist die Referenz zur API v1
. Wir empfehlen dringend, diese Version der API zu verwenden.
VerticalPodAutoscaler v1 autoscaling.k8s.io
Felder | |
---|---|
|
API-Gruppe, Version und Art. |
metadata |
Standard-Objektmetadaten. |
spec |
Das gewünschte Verhalten von |
status |
Zuletzt beobachteter Status des |
VerticalPodAutoscalerSpec v1 autoscaling.k8s.io
Felder | |
---|---|
targetRef |
Verweist auf den Controller, der die Pods für den Autoscaler verwaltet, um beispielsweise ein Deployment oder ein StatefulSet zu steuern.
Sie können einen |
updatePolicy |
Gibt an, ob empfohlene Aktualisierungen beim Start eines Pods angewendet werden und ob empfohlene Aktualisierungen während der Lebensdauer eines Pods angewendet werden. |
resourcePolicy |
Legt Richtlinien für das Anpassen der CPU- und Speicheranforderungen für einzelne Container fest. Mit der Ressourcenrichtlinie können Sie Einschränkungen für die Empfehlungen für einzelne Container festlegen. Wenn nicht angegeben, berechnet das Autoscaling empfohlene Ressourcen für alle Container im Pod ohne zusätzliche Beschränkungen. |
recommenders |
Ist verantwortlich für das Generieren einer Empfehlung für dieses VPA-Objekt. Lassen Sie das Feld leer, um den von GKE bereitgestellten Standard-Recommender zu verwenden. Andernfalls kann die Liste genau einen Eintrag für einen vom Nutzer bereitgestellten alternativen Recommender enthalten. Unterstützt ab GKE 1.22. |
VerticalPodAutoscalerList v1 autoscaling.k8s.io
Felder | |
---|---|
|
API-Gruppe, Version und Art. |
metadata |
Standard-Objektmetadaten. |
items |
Eine Liste mit |
PodUpdatePolicy v1 autoscaling.k8s.io
Felder | |
---|---|
updateMode |
Gibt an, ob empfohlene Aktualisierungen beim Start eines Pods angewendet werden und ob empfohlene Aktualisierungen während der Lebensdauer eines Pods angewendet werden. Mögliche Werte sind "Off" (Aus), "Initial" (Anfänglich), "Recreate" (Neu erstellen) und "Auto" (Automatisch). Der Standardwert ist „Automatisch“, wenn Sie keinen Wert angeben. |
minReplicas |
Minimale Anzahl von Replikaten, die für den Updater aktiv sein müssen, um die Pod-Bereinigung auszuführen (ausstehende Prüfungen wie Budget für Pod-Störungen). Nur positive Werte sind zulässig. Die Standardeinstellung ist das globale Flag "--min-replicas", das in GKE auf 2 gesetzt ist. Unterstützt ab GKE 1.22. |
PodResourcePolicy v1 autoscaling.k8s.io
Felder | |
---|---|
containerPolicies |
Eine Reihe von Ressourcenrichtlinien für einzelne Container. Es kann höchstens einen Eintrag für jeden benannten Container und optional einen einzelnen Platzhaltereintrag mit "containerName = '*'" geben, der alle Container abdeckt, die keine spezifischen Richtlinien haben. |
ContainerResourcePolicy v1 autoscaling.k8s.io
Felder | |
---|---|
containerName |
Der Name des Containers, für den die Richtlinie gilt. Wenn keine Angabe erfolgt, dient die Richtlinie als Standardrichtlinie. |
mode |
Gibt an, ob empfohlene Aktualisierungen beim Start eines Containers angewendet werden und ob empfohlene Aktualisierungen während der Lebensdauer eines Containers angewendet werden. Mögliche Werte sind "Off" (Aus) und "Auto" (Automatisch). Der Standardwert ist „Automatisch“, wenn Sie keinen Wert angeben. |
minAllowed |
Gibt die minimalen CPU- und Speicheranforderungen an, die für den Container zulässig sind. Standardmäßig gilt kein Minimum. |
maxAllowed |
Gibt die maximalen CPU- und Speicheranforderungen an, die für den Container zulässig sind. Standardmäßig gibt es keine Obergrenze. |
ControlledResources |
Gibt den Typ der Empfehlungen an, die vom |
VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io
Felder | |
---|---|
name |
Name des Recommenders, der für die Generierung der Empfehlung für dieses Objekt verantwortlich ist. |
VerticalPodAutoscalerStatus v1 autoscaling.k8s.io
Felder | |
---|---|
recommendation |
Die zuletzt empfohlenen CPU- und Speicheranforderungen. |
conditions |
Beschreibt den aktuellen Status des |
RecommendedPodResources v1 autoscaling.k8s.io
Felder | |
---|---|
containerRecommendation |
Eine Reihe von Ressourcenempfehlungen für einzelne Container. |
RecommendedContainerResources v1 autoscaling.k8s.io
Felder | |
---|---|
containerName |
Der Name des Containers, für den die Empfehlung gilt. |
target |
Die empfohlene CPU- und Speicheranforderung für den Container. |
lowerBound |
Die empfohlenen minimalen CPU- und Speicheranforderungen für den Container. Die angegebenen Ressourcenmengen gewährleisten keine stabile Ausführung der Anwendung. Die Ausführung mit geringeren CPU- und Speicheranforderungen hat wahrscheinliche erhebliche Auswirkungen auf Leistung oder Verfügbarkeit. |
upperBound |
Die empfohlenen maximalen CPU- und Speicheranforderungen für den Container. CPU- und Speicheranforderungen, die über diesen Werten liegen, führen wahrscheinlich zu einer Verschwendung von Ressourcen. |
uncappedTarget |
Die zuletzt vom Autoscaling berechnete Ressourcenempfehlung, die auf der tatsächlichen Ressourcennutzung basiert und die ContainerResourcePolicy nicht berücksichtigt. Wenn die tatsächliche Ressourcennutzung dazu führt, dass das Ziel gegen die ContainerResourcePolicy verstößt, kann das von der begrenzten Empfehlung abweichen. Dieses Feld hat keinen Einfluss auf die tatsächliche Ressourcenzuweisung. Es wird nur als Statusangabe verwendet. |
VerticalPodAutoscalerCondition v1 autoscaling.k8s.io
Felder | |
---|---|
type |
Die Art des beschriebenen Zustands. Mögliche Werte sind "RecommendationProvided" (Empfehlung bereitgestellt), "LowConfidence" (Geringe Konfidenz), "NoPodsMatched" (Keine übereinstimmenden Pods) und "FetchingHistory" (Verlauf wird abgerufen). |
status |
Der Status des Zustands. Mögliche Werte sind "True" (Wahr), "False" (Falsch) und "Unknown" (Nicht bekannt). |
lastTransitionTime |
Die letzte Statusänderung des Zustands. |
reason |
Der Grund für die letzte Statusänderung. |
message |
Ein menschenlesbarer String mit Details zur letzten Statusänderung. |