4 Minuten Lesezeit
Der vertikale Pod-Autoscaler (VPA) ist eine Erweiterung der Kubernetes-API, die eine vertikale Skalierung für Kubernetes-Controller wie Deployments und ihre Pods ermöglicht. Seine Funktionsweise ist komplexer als die des horizontalen Pod-Autoscalers (HPA), da er die Ressourcenanforderungsparameter von Pods auf der Grundlage von Metriken optimiert, die von Arbeitslasten gesammelt wurden. “Anforderungen” sind deklarative Angaben zu den minimal erforderlichen Ressourcen für einen oder mehrere Container innerhalb eines Pods. Höhere Werte gewähren dem geplanten Pod mehr Zugriff auf CPU oder RAM. Wenn festgestellt wird, dass eine Arbeitslast mehr Ressourcen verbraucht als in ihrer Spezifikation angegeben, berechnet der VPA einen neuen Satz geeigneter Werte innerhalb seiner vorgegebenen Grenzen.
Der VPA lässt zwei verschiedene Arten von Ressourcen zu, die für jeden Container innerhalb eines Pods angegeben werden können: Anforderungen und Grenzwerte.
Requests / Limits:
Der VPA fragt die Kubernetes-API regelmäßig nach der Ressourcennutzung eines Pods ab und passt die Anzahl der Replikate nach Bedarf an, um einen Zielwert für die Ressourcenauslastung zu erreichen. Im Einzelnen:
UpdateMode: Je nachdem, wie der VPA konfiguriert ist, kann er die folgenden Modi haben:
Hier ist ein Beispiel für die Verwendung von VPA in einer YAML-Konfiguration:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-deployment-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: my-deployment
resourcePolicy:
containerPolicies:
- containerName: '*'
controlledResources:
- cpu
- memory
maxAllowed:
cpu: 1
memory: 500Mi
minAllowed:
cpu: 100m
memory: 50Mi
updatePolicy:
updateMode: "Auto"
Wie HPA ist auch VPA ein leistungsstarkes Werkzeug, das jedoch einige Einschränkungen aufweist und nicht für jeden Anwendungsfall ideal ist. Es kann nicht jedes Problem mit Cluster-Ressourcen lösen, und einige Überlegungen umfassen:
Es gibt mehrere Möglichkeiten, den Kubernetes Vertical Pod Autoscaler (VPA) zu testen:
Verwendung eines Lasttest-Tools: Eine Möglichkeit, VPA zu testen, besteht darin, ein Lasttest-Tool wie Apache JMeter oder Gatling zu verwenden, um eine Anwendung zu belasten. Sie können beobachten, wie VPA reagiert, indem Sie die Anzahl der Replikate basierend auf dem Ressourcenverbrauch des Pods erhöhen oder verringern.
Verwenden Sie den Befehl “kubectl”: Sie können die Anzahl der Pod-Replikate manuell mit “kubectl” erhöhen oder verringern und beobachten, wie VPA reagiert. Zum Beispiel kann “kubectl scale” verwendet werden, um die Anzahl der Replikate eines Deployments oder RCs anzupassen.
VPA und HPA können zu Konflikten führen, insbesondere wenn beide für die Skalierung auf der Grundlage derselben Ressource (z. B. RAM) konfiguriert sind. Dies kann dazu führen, dass beide versuchen, Workloads gleichzeitig vertikal und horizontal zu skalieren, was zu unvorhersehbaren Ergebnissen führt. Um solche Konflikte zu vermeiden, ist es am besten, HPA auf andere Metriken als VPA auszurichten, z. B. durch die Verwendung benutzerdefinierter Metriken für HPA, während VPA auf der Grundlage von CPU oder RAM skaliert.
Sobald VPA eingerichtet ist, können Sie es über die Kubernetes-API oder mit Überwachungstools wie Prometheus, Grafana oder Kubernetes Dashboard überwachen.