Kubernetes Vertical Pod Autoscaler verwenden

Erfahren Sie, wie Sie mit Kubernetes Vertical Pod Autoscaler die Ressourcenanforderungen und Limits für Container, die in Pods auf einem Cluster ausgeführt werden, das Sie mit Kubernetes Engine (OKE) erstellt haben, automatisch anpassen.

Hinweis

Sie können Kubernetes Vertical Pod Autoscaler nicht mit virtuellen Knotenpools verwenden.
Mit Kubernetes Vertical Pod Autoscaler können Sie die Ressourcenanforderungen und -grenzwerte für Container, die in den Pods eines Deployments ausgeführt werden, automatisch anpassen. Der Vertical Pod Autoscaler kann die Auslastung der Clusterressourcen durch folgende Maßnahmen verbessern:
  • Anforderungen basierend auf der Verwendung automatisch festlegen, um sicherzustellen, dass für jeden Pod die entsprechende Ressourcenmenge verfügbar ist.
  • Verhältnissen zwischen Grenzwerten und Anforderungen verwalten, die in den anfänglichen Konfigurationen der Container angegeben wurden.
  • Pods horizontal skalieren, die zu viele Ressourcen anfordern, je nach der jeweiligen Verwendung im Zeitverlauf.
  • Pods vertikal skalieren, die zu wenig Ressourcen anfordern, je nach der jeweiligen Verwendung im Zeitverlauf.

Der Vertical Pod Autoscaler besteht aus drei Komponenten:

  • Recommender: Überwacht den aktuellen und vergangenen Ressourcenverbrauch und gibt Empfehlungen für CPU- und Speicheranforderungswerte für einen Container.
  • Updater: Sucht nach Pods mit falschen Ressourcen und löscht sie, sodass die Pods mit den aktualisierten Anforderungswerten neu erstellt werden können.
  • Zulassungs-Plug-in: Legt die korrekten Ressourcenanforderungen für neue Pods fest (d.h. Pods, die gerade vom Controller erstellt oder aufgrund von Änderungen durch den Updater neu erstellt wurden).

Weitere Informationen finden Sie unter Vertical Pod Autoscaler und Ressourcen für Container verwalten in der Kubernetes-Dokumentation.

Sie konfigurieren Vertical Pod Autoscaler mit dem benutzerdefinierten Ressourcendefinitionsobjekt VerticalPodAutoscaler. Mit dem Objekt VerticalPodAutoscaler können Sie angeben, welche Pods automatisch vertikal skaliert und welche Ressourcenempfehlungen angewendet werden sollen (falls vorhanden). Weitere Informationen finden Sie unter VerticalPodAutoscaler und Benutzerdefiniertes Ressourcendefinitionsobjekt in der Kubernetes-Dokumentation.

Für Vertical Pod Autoscaler ist die Installation einer Metrikquelle (z.B. des Kubernetes-Metrikservers) im Cluster erforderlich. Weitere Informationen finden Sie unter Kubernetes-Metrikserver auf einem Cluster bereitstellen.

Grenzwertbereiche überschreiben

Vertical Pod Autoscaler versucht, Empfehlungen innerhalb der Mindest- und Höchstwerte eines Grenzwertbereichs zu geben, sofern ein solcher Bereich definiert wurde. Wenn der anwendbare Grenzwertbereich jedoch mit den im Abschnitt resourcePolicy des VerticalPodAutoscaler-Manifests angegebenen Werten in Konflikt steht, hat die Ressourcen-Policy Priorität, und Vertical Pod Autoscaler erteilt entsprechende Empfehlungen (selbst wenn die Werte außerhalb des Grenzwertbereichs liegen). Weitere Informationen finden Sie unter Grenzwertbereiche und Ressourcen-Policy setzt Grenzwertbereich außer Kraft in der Kubernetes-Dokumentation.

Empfehlungen erstellen, ohne sie anzuwenden

Mit Vertical Pod Autoscaler können Sie Empfehlungen erstellen und anwenden oder nur Empfehlungen erstellen (ohne die Pods zu aktualisieren). Um Empfehlungen nur zu erstellen, ohne sie anzuwenden, verwenden Sie updateMode: "Off" im Abschnitt updatePolicy des VerticalPodAutoscaler-Manifests.

Beim Erstellen von Pods analysiert Vertical Pod Autoscaler die CPU- und Speicheranforderungen der Container und erfasst diese Empfehlungen im Feld Status. Vertical Pod Autoscaler ergreift keine Maßnahmen, um die Ressourcenanforderungen für die ausgeführten Container zu aktualisieren.

Bestimmte Container ausschließen

Mit Vertical Pod Autoscaler können Sie Empfehlungen für alle Container in einem Pod erstellen und anwenden oder bestimmte Container selektiv ausschließen. Um Empfehlungen für einen bestimmten Container auszuschalten, geben Sie im Abschnitt resourcePolicy des VerticalPodAutoscaler-Manifests unter containerName einen Containernamen ein und verwenden mode: "Off" im Abschnitt containerPolicies.

Hinweise zu Vertical Pod Autoscaler

Beachten Sie Folgendes:

  • Derzeit ist es nicht empfehlenswert, Vertical Pod Autoscaler zusammen mit Horizontal Pod Autoscaler für CPU- oder Speicherauslastungsmetriken zu verwenden. Sie können Vertical Pod Autoscaler jedoch mit Horizontal Pod Autoscaler für benutzerdefinierte und externe Metriken verwenden. Informationen hierzu finden Sie unter Unterstützung für benutzerdefinierte Metriken in der Kubernetes-Dokumentation.
  • Die Empfehlungen von Vertical Pod Autoscaler überschreiten möglicherweise die verfügbaren Ressourcen (z.B. Knotengröße, verfügbare Größe, verfügbare Quota). Beachten Sie, dass die Anwendung der Empfehlungen dazu führen kann, dass Pods in den Status "Ausstehend" übergehen.
  • Wenn Vertical Pod Autoscaler Podressourcen aktualisiert, wird der Pod neu erstellt. Dadurch werden alle ausgeführten Container neu gestartet. Beachten Sie, dass der Pod möglicherweise auf einem anderen Knoten neu erstellt wird.
  • Sie können Kubernetes Vertical Pod Autoscaler mit verwalteten Knotenpools verwenden, jedoch nicht mit virtuellen Knotenpools.

Mit Vertical Pod Autoscaler arbeiten

Die folgenden Anweisungen führen Sie durch das Deployment von Vertical Pod Autoscaler auf einem Cluster. Sie beschreiben folgende Aufgaben:

  • Prüfen, ob der Kubernetes-Metrikserver auf einem Cluster installiert wurde.
  • Vertical Pod Autoscaler herunterladen und bereitstellen.
  • Beispielanwendung bereitstellen.
  • Skalierungsvorgang in Aktion anzeigen.
  • Empfehlung anzeigen.
  • Bereinigung durchführen, indem Sie die Beispielanwendung und den Vertical Pod Autoscaler entfernen.

Schritt 1: Installation des Kubernetes-Metrikservers prüfen

  1. Falls noch nicht geschehen, führen Sie die Schritte zum Einrichten der kubeconfig-Konfigurationsdatei des Clusters aus, und legen Sie (gegebenenfalls) die Umgebungsvariable KUBECONFIG so fest, dass sie auf die Datei verweist. Beachten Sie, dass Sie Ihre eigene kubeconfig-Datei einrichten müssen. Sie können nicht mit einer kubeconfig-Datei, die von einem anderen Benutzer eingerichtet wurde, auf ein Cluster zugreifen. Siehe Clusterzugriff einrichten.
  2. Stellen Sie sicher, dass der Kubernetes-Metrikserver erfolgreich auf dem Cluster bereitgestellt wurde und verfügbar ist, indem Sie Folgendes eingeben:

    kubectl -n kube-system get deployment/metrics-server

    Wenn der Befehl einen Fehler "Nicht gefunden" zurückgibt, müssen Sie den Kubernetes-Metrikserver auf dem Cluster bereitstellen, bevor Sie fortfahren. Siehe Kubernetes-Metrikserver auf einem Cluster bereitstellen.

Schritt 2: Vertical Pod Autoscaler herunterladen und bereitstellen

  1. Laden Sie den Vertical Pod Autoscaler-Quellcode von GitHub herunter. Beispiel: Geben Sie Folgendes ein:
    git clone -b vpa-release-0.8 https://github.com/kubernetes/autoscaler.git
  2. Wechseln Sie in das Verzeichnis vertical-pod-autoscaler:

    cd autoscaler/vertical-pod-autoscaler
  3. Wenn Sie Vertical Pod Autoscaler bereits bereitgestellt haben, löschen Sie ihn, indem Sie Folgendes eingeben:
    ./hack/vpa-down.sh
  4. Stellen Sie den Vertical Pod Autoscaler bereit, indem Sie Folgendes eingeben:

    ./hack/vpa-up.sh
  5. Prüfen Sie, ob die Vertical Pod Autoscaler-Pods erfolgreich erstellt wurden, indem Sie Folgendes eingeben:

    kubectl get pods -n kube-system

    Die Ausgabe des obigen Befehls zeigt die Pods an:

    vpa-admission-controller-59d9965cfb-bzs8l 1/1 Running 0 6m34s
    vpa-recommender-5bcb58569-mqdds 1/1 Running 0 6m43s
    vpa-updater-5979cbf757-scw2d 1/1 Running 0 6m46s

    Beachten Sie, dass bei Ihnen wahrscheinlich andere Namen und Zahlen angezeigt werden.

Schritt 3: Beispielanwendung bereitstellen

  1. Stellen Sie die Beispielanwendung "hamster" bereit, um ein Deployment und einen entsprechenden Vertical Pod Autoscaler zu erstellen, indem Sie Folgendes eingeben:
    kubectl apply -f examples/hamster.yaml

    Die Ausgabe des obigen Befehls bestätigt das Deployment und die Erstellung:

    verticalpodautoscaler.autoscaling.k8s.io/hamster-vpa created
    deployment.apps/hamster created

    Bei der Bereitstellung der hamster-Anwendung wird ein Deployment mit zwei Pods und einem Vertical Pod Autoscaler erstellt, der auf das Deployment zeigt.

  2. Prüfen Sie, ob die hamster-Pods erfolgreich erstellt wurden, indem Sie Folgendes eingeben:
    kubectl get pods -l app=hamster

    In der Ausgabe des obigen Befehls wird die Erstellung bestätigt:

    NAME                     READY STATUS  RESTARTS AGE
    hamster-7cbfd64f57-mqqnk 1/1   Running 0        54s
    hamster-7cbfd64f57-rq6wv 1/1   Running 0        55s

    Beachten Sie, dass bei Ihnen wahrscheinlich andere Namen für die hamster-Pods angezeigt werden.

  3. Zeigen Sie CPU- und Speicherreservierungen mit dem Befehl kubectl describe pod und einem der hamster-Podnamen an, die im vorherigen Schritt zurückgegeben wurden. Beispiel:
    kubectl describe pod hamster-7cbfd64f57-rq6wv

    Beachten Sie, dass der obige Befehl nur ein Beispiel ist. Sie müssen einen der hamster-Podnamen verwenden, die zurückgegeben wurden, als Sie den Befehl kubectl get pods -l app=hamster im vorherigen Schritt ausgeführt haben.

    Im Anforderungsabschnitt der Ausgabe können Sie die aktuellen CPU- und Speicherreservierungen des Pods anzeigen. Beispiel:

    Requests:
          cpu:        100m
          memory:     50Mi

    Der Vertical Pod Autoscaler (insbesondere der Recommender) analysiert die Pods und beobachtet ihr Verhalten, um zu bestimmen, ob diese CPU- und Speicherreservierungen angemessen sind. Beachten Sie, dass bei Ihnen möglicherweise andere CPU- und Speicherreservierungen angezeigt werden.

    Die Reservierungen sind nicht ausreichend, weil der hamster-Beispielanwendung absichtlich zu wenig Ressourcen zugewiesen wurden. Jeder Pod führt einen einzigen Container aus, der:

    • 100 Millicore anfordert, der jedoch versucht, mehr als 500 Millicore zu nutzen
    • viel weniger Speicher reserviert, als er für die Ausführung benötigt

Schritt 4: Skalierungsvorgang anzeigen

Nachdem Sie die ursprünglichen Pods in der hamster-Beispielanwendung analysiert haben und festgestellt wurde, dass die CPU- und Speicherreservierungen unzureichend sind, startet der Vertical Pod Autoscaler (insbesondere der Updater) die Pods mit anderen Werten neu, wie vom Recommender vorgeschlagen. Beachten Sie, dass der Vertical Pod Autoscaler die Vorlage im Deployment nicht ändert, sondern die tatsächlichen Anforderungen der Pods aktualisiert.

  1. Überwachen Sie die Pods in der hamster-Beispielanwendung, und warten Sie, bis der Updater einen neuen hamster-Pod mit einem neuen Namen startet, indem Sie Folgendes eingeben:
    kubectl get --watch pods -l app=hamster
  2. Wenn Sie sehen, dass ein neuer hamster-Pod gestartet wurde, zeigen Sie die CPU- und Speicherreservierungen mit dem Befehl kubectl describe pod und dem Namen des Pods an. Beispiel:
    kubectl describe pod hamster-7cbfd64f57-wmg4

    Im Anforderungsabschnitt der Ausgabe werden die CPU- und Speicherreservierungen des neuen Pods angezeigt:

        Requests:
          cpu:        587m
          memory:     262144k

    Beachten Sie im obigen Beispiel, dass die CPU-Reservierung auf 587 Millicore und die Speicherreservierung auf 262.144 Kilobyte erhöht wurde. Dem ursprünglichen Pod waren zu wenig Ressourcen zugewiesen, und der Vertical Pod Autoscaler hat die ursprünglichen Reservierungen mit geeigneteren Werten korrigiert. Beachten Sie, dass bei Ihnen möglicherweise andere CPU- und Speicherreservierungen angezeigt werden.

Schritt 5: Empfehlung anzeigen

Zeigen Sie die Empfehlungen des Vertical Pod Autoscalers (insbesondere des Recommenders) an, indem Sie Folgendes eingeben:

kubectl describe vpa/hamster-vpa

Die Ausgabe des obigen Befehls zeigt die Empfehlungen an:

Name:         hamster-vpa
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d...
API Version:  autoscaling.k8s.io/v1
Kind:         VerticalPodAutoscaler
Metadata:
  Creation Timestamp:  2020-09-22T18:08:09Z
  Generation:          27
  Resource Version:    19466955
  Self Link:           /apis/autoscaling.k8s.io/v1/namespaces/default/verticalpodautoscalers/hamster-vpa
  UID:                 689cee90-6fed-404d-adf9-b6fa8c1da660
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:  2020-09-22T18:10:10Z
    Status:                True
    Type:                  RecommendationProvided
  Recommendation:
    Container Recommendations:
      Container Name:  hamster
      Lower Bound:
        Cpu:     519m
        Memory:  262144k
      Target:
        Cpu:     587m
        Memory:  262144k
      Uncapped Target:
        Cpu:     587m
        Memory:  262144k
      Upper Bound:
        Cpu:     1
        Memory:  500Mi
Events:          <none>

Beachten Sie, dass bei Ihnen möglicherweise andere Empfehlungen angezeigt werden.

Schritt 6: Bereinigung durchführen

  1. Entfernen Sie die Beispielanwendung, indem Sie Folgendes eingeben:
    kubectl delete -f examples/hamster.yaml
  2. Löschen Sie im Verzeichnis vertical-pod-autoscaler das Vertical Pod Autoscaler-Deployment, indem Sie Folgendes eingeben:

    ./hack/vpa-down.sh