Vertikales Pod-Autoscaling konfigurieren

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:

  1. 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
    
  2. Ändern Sie die spec der benutzerdefinierten Clusterressource, um das Feld verticalPodAutoscaling einzuschließen und die Modi enableUpdater und enableMemorySaver anzugeben:

    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 usage
    
  3. Wenn Sie die Clusterkonfigurationsdatei geändert haben, wenden Sie die Änderungen mit dem folgenden Befehl an:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG
    

    Ersetzen 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:

  1. Definieren Sie eine VerticalPodAutoscaler-Ressource im selben Namespace wie die Zielarbeitslast.

    Mit dieser benutzerdefinierten Ressource wird angegeben, auf welche Pods sie mit targetRef und 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"]
    
  2. Führen Sie den folgenden Befehl aus, um das Manifest VerticalPodAutoscaler anzuwenden:

    kubectl apply -f VPA_MANIFEST \
        --kubeconfig KUBECONFIG
    

    Ersetzen Sie Folgendes:

    • VPA_MANIFEST: der Pfad der Manifestdatei VerticalPodAutoscaler.

    • 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 entspricht Recreate.

  • 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 im VerticalPodAutoscaler-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:

  1. Löschen Sie alle benutzerdefinierten VerticalPodAutoscaler-Ressourcen, die Sie erstellt haben.

  2. Ändern Sie die benutzerdefinierte Clusterressource und entfernen Sie den gesamten Abschnitt verticalPodAutoscaling aus spec.

    Sie können die benutzerdefinierte Clusterressource direkt bearbeiten oder die Clusterkonfigurationsdatei ändern und bmctl update verwenden.

  3. Entfernen Sie die Annotation preview.baremetal.cluster.gke.io/vertical-pod-autoscaler aus 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.

Nächste Schritte