Vertikales Pod-Autoscaling


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.

Best Practices für Autoscaling finden Sie unter Best Practices zum Ausführen kostenoptimierter Kubernetes-Anwendungen in GKE.

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

  • 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

TypeMeta

API-Gruppe, Version und Art.

metadata

ObjectMeta

Standard-Objektmetadaten.

spec

VerticalPodAutoscalerSpec

Das gewünschte Verhalten von VerticalPodAutoscaler.

status

VerticalPodAutoscalerStatus

Zuletzt beobachteter Status des VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1 autoscaling.k8s.io

Felder
targetRef

CrossVersionObjectReference

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 VerticalPodAutoscaler auf jeden Controller mit einer Unterressource vom Typ Scale verweisen. Normalerweise ruft der VerticalPodAutoscaler den Pod-Satz vom ScaleStatus des Controllers ab. Bei einigen bekannten Controllern, zum Beispiel DaemonSet, ruft der VerticalPodAutoscaler den Pod-Satz von der Controller-Spezifikation ab.

updatePolicy

PodUpdatePolicy

Gibt an, ob empfohlene Aktualisierungen beim Start eines Pods angewendet werden und ob empfohlene Aktualisierungen während der Lebensdauer eines Pods angewendet werden.

resourcePolicy

PodResourcePolicy

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

VerticalPodAutoscalerRecommenderSelector array

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

TypeMeta

API-Gruppe, Version und Art.

metadata

ObjectMeta

Standard-Objektmetadaten.

items

VerticalPodAutoscaler array

Eine Liste mit VerticalPodAutoscaler-Objekten.

PodUpdatePolicy v1 autoscaling.k8s.io

Felder
updateMode

string

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

int32

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

ContainerResourcePolicy array

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

string

Der Name des Containers, für den die Richtlinie gilt. Wenn keine Angabe erfolgt, dient die Richtlinie als Standardrichtlinie.

mode

ContainerScalingMode

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

ResourceList

Gibt die minimalen CPU- und Speicheranforderungen an, die für den Container zulässig sind. Standardmäßig gilt kein Minimum.

maxAllowed

ResourceList

Gibt die maximalen CPU- und Speicheranforderungen an, die für den Container zulässig sind. Standardmäßig gibt es keine Obergrenze.

ControlledResources

[]ResourceName

Gibt den Typ der Empfehlungen an, die vom VerticalPodAutoscaler berechnet und gegebenenfalls angewendet werden. Wenn leer, wird der Standardwert [ResourceCPU, ResourceMemory] verwendet.

VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io

Felder
name

string

Name des Recommenders, der für die Generierung der Empfehlung für dieses Objekt verantwortlich ist.

VerticalPodAutoscalerStatus v1 autoscaling.k8s.io

Felder
recommendation

RecommendedPodResources

Die zuletzt empfohlenen CPU- und Speicheranforderungen.

conditions

VerticalPodAutoscalerCondition array

Beschreibt den aktuellen Status des VerticalPodAutoscaler.

RecommendedPodResources v1 autoscaling.k8s.io

Felder
containerRecommendation

RecommendedContainerResources array

Eine Reihe von Ressourcenempfehlungen für einzelne Container.

RecommendedContainerResources v1 autoscaling.k8s.io

Felder
containerName

string

Der Name des Containers, für den die Empfehlung gilt.

target

ResourceList

Die empfohlene CPU- und Speicheranforderung für den Container.

lowerBound

ResourceList

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

ResourceList

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

ResourceList

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

VerticalPodAutoscalerConditionType

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

ConditionStatus

Der Status des Zustands. Mögliche Werte sind "True" (Wahr), "False" (Falsch) und "Unknown" (Nicht bekannt).

lastTransitionTime

Time

Die letzte Statusänderung des Zustands.

reason

string

Der Grund für die letzte Statusänderung.

message

string

Ein menschenlesbarer String mit Details zur letzten Statusänderung.

Nächste Schritte