Beim vertikalen Pod-Autoscaling werden CPU- und Arbeitsspeicherressourcenanforderungen und ‑limits für Container in Kubernetes-Pods automatisch festgelegt. Beim vertikalen Pod-Autoscaling wird die bisherige und aktuelle Ressourcennutzung analysiert, um Empfehlungen zu geben, die entweder angezeigt oder automatisch angewendet werden können, indem Pods aktualisiert werden. Dieses Feature verbessert die Stabilität und Kosteneffizienz, indem es die Ressourcenzuweisungen richtig dimensioniert.
Hinweise
Bevor Sie das Vertikales Pod-Autoscaling konfigurieren, müssen Sie die folgenden Voraussetzungen erfüllen:
- Sie haben einen Bare-Metal-Cluster, der ausgeführt wird.
- Sie haben
kubectl-Zugriff auf den Cluster. - Metrics Server ist im Cluster verfügbar. Bare-Metal-Cluster enthalten standardmäßig Metrics Server.
Vertikales Pod-Autoscaling aktivieren
Aktivieren Sie das vertikale Pod-Autoscaling in Ihrem Bare-Metal-Cluster, indem Sie eine Preview-Annotation festlegen und die Clusterspezifikation konfigurieren:
Fügen Sie der benutzerdefinierten Clusterressource die Vorschau-Annotation hinzu oder aktualisieren Sie sie.
Bearbeiten Sie die benutzerdefinierte Clusterressource direkt oder ändern Sie die Clusterkonfigurationsdatei und verwenden Sie
bmctl update.metadata: annotations: preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enableÄndern Sie die
specder benutzerdefinierten Clusterressource, um das FeldverticalPodAutoscalingeinzuschließen und die ModienableUpdaterundenableMemorySaveranzugeben:apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: cluster1 namespace: cluster-cluster1 annotations: preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable spec: # ... other cluster spec fields verticalPodAutoscaling: enableUpdater: true # Set to true for automated updates enableMemorySaver: true # Set to true to reduce recommender memory usageWenn Sie die Clusterkonfigurationsdatei geändert haben, wenden Sie die Änderungen mit dem folgenden Befehl an:
bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIGErsetzen Sie Folgendes:
CLUSTER_NAME: Der Name Ihres Clusters.KUBECONFIG: der Pfad der kubeconfig-Datei des Clusters.
Benutzerdefinierte VerticalPodAutoscaler-Ressource erstellen
Nachdem Sie das vertikale Pod-Autoscaling für Ihren Cluster aktiviert haben, definieren Sie eine benutzerdefinierte Ressource vom Typ VerticalPodAutoscaler, um bestimmte Arbeitslasten anzusprechen:
Definieren Sie eine
VerticalPodAutoscaler-Ressource im selben Namespace wie die Zielarbeitslast.Mit dieser benutzerdefinierten Ressource wird angegeben, auf welche Pods sie mit
targetRefund allen Ressourcenrichtlinien ausgerichtet ist.apiVersion: "autoscaling.k8s.io/v1" kind: VerticalPodAutoscaler metadata: name: hamster-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: hamster resourcePolicy: containerPolicies: - containerName: '*' minAllowed: cpu: 100m memory: 50Mi maxAllowed: cpu: 1 memory: 500Mi controlledResources: ["cpu", "memory"]Führen Sie den folgenden Befehl aus, um das Manifest
VerticalPodAutoscaleranzuwenden:kubectl apply -f VPA_MANIFEST \ --kubeconfig KUBECONFIGErsetzen Sie Folgendes:
VPA_MANIFEST: der Pfad der ManifestdateiVerticalPodAutoscaler.KUBECONFIG: Der Pfad der kubeconfig-Datei des Clusters.
Modi für vertikales Pod-Autoscaling
Vertikales Pod-Autoscaling funktioniert in verschiedenen Modi, die steuern, wie Ressourcenempfehlungen angewendet werden.
Empfehlungsmodus
Im Empfehlungsmodus wird durch das vertikale Pod-Autoscaling die Empfehlungskomponente installiert. Diese Komponente analysiert die Ressourcennutzung und veröffentlicht empfohlene Werte für CPU- und Speicheranforderungen und ‑limits im Statusbereich der benutzerdefinierten VerticalPodAutoscaler-Ressourcen, die Sie erstellen.
Verwenden Sie den folgenden Befehl, um Empfehlungen für Ressourcenanfragen und ‑limits aufzurufen:
kubectl describe vpa VPA_NAME \
--kubeconfig KUBECONFIG \
-n CLUSTER_NAMESPACE
Replace the following:
* `VPA_NAME`: the name of the `VerticalPodAutoscaler`
that's targeting the workloads for which you are considering resource
adjustments.
* `KUBECONFIG`: the path of the cluster kubeconfig
file.
* `CLUSTER_NAMESPACE`: the name of the cluster that's
running vertical Pod autoscaling.
Die Antwort sollte einen Status-Abschnitt enthalten, der dem folgenden Beispiel ähnelt:
Status:
Conditions:
Last Transition Time: 2025-08-04T23:53:32Z
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: hamster
Lower Bound:
Cpu: 100m
Memory: 262144k
Target:
Cpu: 587m
Memory: 262144k
Uncapped Target:
Cpu: 587m
Memory: 262144k
Upper Bound:
Cpu: 1
Memory: 500Mi
Pods werden in diesem Modus nicht automatisch aktualisiert. Anhand dieser Empfehlungen können Sie Ihre Pod-Konfigurationen manuell aktualisieren. Dies ist das Standardverhalten, wenn enableUpdater nicht festgelegt oder false ist.
Automatisierter Aktualisierungsmodus
Wenn Sie enableUpdater
enableUpdater auf true festlegen, stellen Bare Metal-Lifecycle-Controller zusätzlich zum Empfehlungsmodul die Komponenten für das vertikale Pod-Autoscaling-Updater- und Zulassungssteuerfeld bereit. Der Updater überwacht Pods, deren aktuelle Ressourcenanforderungen erheblich von den Empfehlungen abweichen.
Die Aktualisierungsrichtlinie in der VerticalPodAutoscaler-Ressource gibt an, wie der Updater die Empfehlungen anwendet. Der Standardaktualisierungsmodus ist Auto. Das bedeutet, dass der Updater beim Erstellen von Pods aktualisierte Ressourceneinstellungen zuweist. Im folgenden VerticalPodAutoscaler-Beispiel wird gezeigt, wie Sie den Aktualisierungsmodus auf Initial festlegen:
apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
name: hamster-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: hamster
resourcePolicy:
updatePolicy:
updateMode: "Initial"
...
Das Updater-Tool unterstützt die folgenden fünf Modi:
Auto: Der Updater entfernt den Pod. Der Admission-Controller fängt die Erstellungsanfrage für den neuen Pod ab und ändert sie so, dass die vom Recommender empfohlenen CPU- und Speicherwerte verwendet werden. Zum Aktualisieren von Ressourcen muss der Pod neu erstellt werden, was zu Unterbrechungen führen kann. Verwenden Sie Budgets für Pod-Störungen, die vom Updater berücksichtigt werden, um den Bereinigungsprozess zu verwalten. Dieser Modus entsprichtRecreate.Recreate: Der Updater bereinigt Pods und weist empfohlene Ressourcenanfragen und ‑limits zu, wenn der Pod neu erstellt wird.InPlaceOrRecreate(Alpha): Der Updater versucht, In-Place-Updates nach bestem Wissen und Gewissen durchzuführen, kann aber auf das Neuerstellen des Pods zurückgreifen, wenn In-Place-Updates nicht möglich sind. Weitere Informationen finden Sie in der Dokumentation zum Anpassen der Größe von Pods am selben Ort.Initial: Der Updater weist Ressourcenanfragen nur bei der Pod-Erstellung zu und ändert sie später nie mehr.Off: Der Updater ändert die Ressourcenanforderungen der Pods nicht automatisch. Die Empfehlungen werden ermittelt und können imVerticalPodAutoscaler-Objekt untersucht werden.
Weitere Informationen zur benutzerdefinierten Ressource VerticalPodAutoscaler erhalten Sie mit kubectl. Damit wird die benutzerdefinierte Ressourcendefinition verticalpodautoscalercheckpoints.autoscaling.k8s.io abgerufen, die auf dem Cluster mit Version 1.33.0 oder höher installiert ist.
Das folgende Beispiel zeigt, wie Ressourcenempfehlungen im Abschnitt Status für den Container hamster angezeigt werden können. Das Beispiel zeigt auch ein Beispiel für ein Pod-Entfernungsereignis, das auftritt, wenn der Updater einen Pod entfernt, bevor er dem neu erstellten Pod automatisch die empfohlene Ressourcenkonfiguration zuweist:
Spec:
Resource Policy:
Container Policies:
Container Name: *
Controlled Resources:
cpu
memory
Max Allowed:
Cpu: 1
Memory: 500Mi
Min Allowed:
Cpu: 100m
Memory: 50Mi
Target Ref:
API Version: apps/v1
Kind: Deployment
Name: hamster
Update Policy:
Update Mode: Auto
Status:
Conditions:
Last Transition Time: 2025-08-04T23:53:32Z
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: hamster
Lower Bound:
Cpu: 100m
Memory: 262144k
Target:
Cpu: 587m
Memory: 262144k
Uncapped Target:
Cpu: 587m
Memory: 262144k
Upper Bound:
Cpu: 1
Memory: 500Mi
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EvictedPod 49s vpa-updater VPA Updater evicted Pod hamster-7cb59fb657-lkrk4 to apply resource recommendation.
Arbeitsspeicher-Sparmodus
Im Speichersparmodus wird der Speicherbedarf der Empfehlungskomponente für vertikales Pod-Autoscaling reduziert. Wenn Sie enableMemorySaver auf true festlegen, werden vom Recommender nur Aggregationen für Pods mit einer entsprechenden benutzerdefinierten VerticalPodAutoscaler-Ressource erfasst und berechnet.
Der Nachteil ist, dass es einige Zeit (bis zu 24 Stunden) dauert, bis der Recommender genügend Daten für genaue Empfehlungen gesammelt hat, wenn Sie eine neue benutzerdefinierte VerticalPodAutoscaler-Ressource für eine vorhandene Arbeitslast erstellen. Dieser Modus ist für die meisten Clustertypen standardmäßig false, für Edge-Cluster jedoch true.
Vertikales Pod-Autoscaling deaktivieren
Deaktivieren Sie das vertikale Pod-Autoscaling, indem Sie die benutzerdefinierten Ressourcen und die Konfiguration aus Ihrem Cluster entfernen:
Löschen Sie alle benutzerdefinierten
VerticalPodAutoscaler-Ressourcen, die Sie erstellt haben.Ändern Sie die benutzerdefinierte Clusterressource und entfernen Sie den gesamten Abschnitt
verticalPodAutoscalingausspec.Sie können die benutzerdefinierte Clusterressource direkt bearbeiten oder die Clusterkonfigurationsdatei ändern und
bmctl updateverwenden.Entfernen Sie die Annotation
preview.baremetal.cluster.gke.io/vertical-pod-autoscaleraus der benutzerdefinierten Clusterressource.
Beschränkungen
Beachten Sie die folgenden Einschränkungen, wenn Sie vertikales Pod-Autoscaling 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.
- Für den Updater sind mindestens zwei Pod-Replikate für Deployments erforderlich, um Pods durch überarbeitete Ressourcenwerte zu ersetzen.
- Der Updater aktualisiert Pods, die aufgrund von Out-Of-Memory-Fehlern (OOM) in einer Absturzschleife hängen, nicht schnell.
- Die
InPlaceOrRecreate-Aktualisierungsrichtlinie für Pods ist eine Alphafunktion im vertikalen Pod-Autoscaling. Es wird versucht, die Pods direkt zu aktualisieren. Wenn das nicht möglich ist, werden sie neu erstellt.