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.
Sie können Kubernetes Vertical Pod Autoscaler nicht mit virtuellen Knotenpools verwenden.
- 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
-
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.
-
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
- 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
-
Wechseln Sie in das Verzeichnis
vertical-pod-autoscaler
:cd autoscaler/vertical-pod-autoscaler
-
Wenn Sie Vertical Pod Autoscaler bereits bereitgestellt haben, löschen Sie ihn, indem Sie Folgendes eingeben:
./hack/vpa-down.sh
-
Stellen Sie den Vertical Pod Autoscaler bereit, indem Sie Folgendes eingeben:
./hack/vpa-up.sh
-
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
- 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.
- 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.
- 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.
-
Ü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
-
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
- Entfernen Sie die Beispielanwendung, indem Sie Folgendes eingeben:
kubectl delete -f examples/hamster.yaml
-
Löschen Sie im Verzeichnis
vertical-pod-autoscaler
das Vertical Pod Autoscaler-Deployment, indem Sie Folgendes eingeben:./hack/vpa-down.sh