Freigeben über


Vertikale automatische Podskalierung in Azure Kubernetes Service (AKS)

Dieser Artikel enthält eine Übersicht über die Verwendung des Vertical Pod Autoscalers (VPA) in Azure Kubernetes Service (AKS), der auf der Open Source-Version für Kubernetes basiert.

Bei der Konfiguration legt der VPA automatisch Ressourcenanforderungen und Grenzwerte für Container pro Workload basierend auf der bisherigen Verwendung fest. Der VPA gibt CPU und Arbeitsspeicher für die anderen Pods frei und trägt dazu bei, Ihren AKS-Cluster effektiv zu nutzen. Der Vertical Pod Autoscaler bietet Empfehlungen für die Ressourcennutzung im Zeitverlauf. Um plötzliche Zunahmen der Ressourcennutzung zu verwalten, verwenden Sie die automatische horizontale Podskalierung, mit der die Anzahl der Podreplikate nach Bedarf skaliert wird.

Vorteile

Der Vertical Pod Autoscaler bietet die folgenden Vorteile:

  • Analysiert Prozessor- und Arbeitsspeicherressourcen und passt sie an, damit Ihre Anwendungen weder zu viel noch zu wenig davon erhalten. VPA ist nicht nur für die Hochskalierung verantwortlich, sondern auch für das Herunterskalieren basierend auf der Ressourcennutzung im Laufe der Zeit.
  • Wenn der Skalierungsmodus eines Pods auf Automatisch oder Neu erstellen festgelegt ist, wird er gelöscht, falls Ressourcenanforderungen geändert werden müssen.
  • Sie können CPU- und Arbeitsspeichereinschränkungen für einzelne Container durch Angabe einer Ressourcenrichtlinie festlegen.
  • Stellt sicher, dass Knoten die richtigen Ressourcen für die Podplanung haben.
  • Bietet eine konfigurierbare Protokollierung aller Anpassungen an Prozessor- oder Arbeitsspeicherressourcen.
  • Verbessert die Auslastung der Clusterressourcen und gibt CPU und Arbeitsspeicher für andere Pods frei.

Einschränkungen und Aspekte

Berücksichtigen Sie bei der Verwendung des Vertical Pod Autoscalers die folgenden Einschränkungen und Überlegungen:

  • VPA unterstützt pro Cluster maximal 1.000 Pods, die VerticalPodAutoscaler-Objekten zugeordnet sind.
  • VPA empfiehlt möglicherweise mehr Ressourcen, als im Cluster verfügbar sind. Dadurch wird aufgrund unzureichender Ressourcen verhindert, dass der Pod einem Knoten zugewiesen und ausgeführt wird. Sie können diese Einschränkung umgehen, indem Sie LimitRange auf die maximal verfügbaren Ressourcen pro Namespace festlegen, wodurch sichergestellt wird, dass Pods nicht mehr Ressourcen als angegeben anfordern. Darüber hinaus können Sie maximal zulässige Ressourcenempfehlungen pro Pod in einem VerticalPodAutoscaler-Objekt festlegen. VPA kann das Problem mit unzureichenden Knotenressourcen nicht vollständig beheben. Der Grenzwertbereich ist festgelegt, aber die Ressourcennutzung des Knotens wird dynamisch geändert.
  • Es wird nicht empfohlen, VPA mit dem Horizontal Pod Autoscaler (HPA) zu verwenden, der basierend auf denselben CPU- und Speicherauslastungsmetriken skaliert wird.
  • Der VPA Recommender speichert historische Daten nur von bis zu acht Tagen.
  • VPA unterstützt keine JVM-basierten Workloads, da die Sichtbarkeit der tatsächlichen Speicherauslastung der Workload eingeschränkt ist.
  • VPA unterstützt das gleichzeitige Ausführen Ihrer eigenen Implementierung von VPA nicht. Eine zusätzliche oder angepasste Empfehlung wird unterstützt.
  • AKS-Windows-Container werden derzeit nicht unterstützt.

Übersicht über MPA

Das VPA-Objekt besteht aus drei Komponenten:

  • Recommender: Der Recommender überwacht den aktuellen und den vergangenen Ressourcenverbrauch, einschließlich Metrikverlauf, OOM-Ereignisse (Out of Memory, nicht genügend Arbeitsspeicher) und VPA-Bereitstellungsspezifikationen, und verwendet die gesammelten Informationen, um empfohlene Werte für CPU- und Speicheranforderungen/-grenzwerte des Containers bereitzustellen.
  • Updater: Der Updater überwacht verwaltete Pods, um sicherzustellen, dass ihre Ressourcenanforderungen korrekt festgelegt sind. Wenn nicht, werden diese Pods entfernt, damit ihre Controller sie mit den aktualisierten Anforderungen neu erstellen können.
  • VPA Admission Controller: Der VPA Admission Controller legt die richtigen Ressourcenanforderungen für neue Pods fest (erstellt oder neu erstellt durch den Controller aufgrund der Aktivität des Updaters).

VPA-Zulassungscontroller

Der VPA Admission Controller ist eine Binärdatei, die sich selbst als Mutating Admission Webhook registriert. Wenn ein neuer Pod erstellt wird, ruft der VPA Admission Controller eine Anforderung vom API-Server ab und wertet aus, ob eine entsprechende VPA-Konfiguration vorhanden ist, oder sucht eine entsprechende Konfiguration und verwendet die aktuelle Empfehlung zum Festlegen von Ressourcenanforderungen im Pod.

Der eigenständige Auftrag overlay-vpa-cert-webhook-check wird außerhalb des VPA Admission Controllers ausgeführt. Der Auftrag overlay-vpa-cert-webhook-check erstellt und erneuert die Zertifikate und registriert den VPA Admission Controller als MutatingWebhookConfiguration.

Vorgangsmodi für VPA-Objekte

Eine Vertical Pod Autoscaler-Ressource (meist eine Bereitstellung) wird für jeden Controller eingefügt, für den die Ressourcenanforderungen automatisch berechnet werden sollen.

Es gibt vier Modi, in denen der VPA betrieben wird:

  • Auto: VPA weist Ressourcenanforderungen während der Poderstellung zu und aktualisiert vorhandene Pods mithilfe des bevorzugten Updatemechanismus. Auto entspricht Recreate und ist der Standardmodus. Sobald Updates ohne Neustart oder direkte Updates von Podanforderungen verfügbar sind, kann dies vom Auto-Modus als bevorzugter Updatemechanismus verwendet werden. Mit dem Auto-Modus entfernt VPA einen Pod, wenn er seine Ressourcenanforderungen ändern muss. Dies kann dazu führen, dass alle Pods auf einmal neu gestartet werden, was zu Anwendungsinkonsistenzen führen kann. Sie können Neustarts einschränken und in dieser Situation die Konsistenz wahren, indem Sie PodDisruptionBudget verwenden.
  • Recreate: VPA weist Ressourcenanforderungen während der Poderstellung zu und aktualisiert vorhandene Pods, indem sie entfernt werden, wenn sich die angeforderten Ressourcen erheblich von den neuen Empfehlungen unterscheiden (unter Berücksichtigung von „PodDisruptionBudget“, sofern definiert). Sie sollten diesen Modus nur verwenden, wenn Sie sicherstellen müssen, dass die Pods neu gestartet werden, wenn sich die Ressourcenanforderung ändert. Andernfalls wird empfohlen, den Auto-Modus zu verwenden, der die Vorteile von Updates ohne Neustart nutzt, sobald verfügbar.
  • Initial: VPA weist Ressourcenanforderungen nur während der Poderstellung zu. Vorhandene Pods werden nicht aktualisiert. Dieser Modus ist nützlich, um das VPA-Verhalten zu testen und zu verstehen, ohne dass sich dies auf die ausgeführten Pods auswirkt.
  • Off: VPA ändert nicht automatisch die Ressourcenanforderungen der Pods. Die Empfehlungen werden berechnet und können im VPA-Objekt überprüft werden.

Bereitstellungsmuster während für die Anwendungsentwicklung

Wenn Sie mit VPA nicht vertraut sind, empfehlen wir das folgende Bereitstellungsmuster während der Anwendungsentwicklung, um die eindeutigen Eigenschaften der Ressourcennutzung zu identifizieren, VPA zu testen, um zu überprüfen, ob er ordnungsgemäß funktioniert, und zusammen mit anderen Kubernetes-Komponenten zu testen, um die Ressourcennutzung des Clusters zu optimieren:

  1. Legen Sie UpdateMode = "Off" in Ihrem Produktionscluster fest, und führen Sie VPA im Empfehlungsmodus aus, damit Sie VPA testen und sich mit VPA vertraut machen können. UpdateMode = "Off" kann eine Fehlkonfiguration vermeiden, die zu einem Ausfall führen kann.
  2. Legen Sie zunächst Einblicke fest, indem Sie die Telemetrie der tatsächlichen Ressourcennutzung über einen bestimmten Zeitraum erfassen. Dies hilft Ihnen, das Verhalten und alle Anzeichen von Problemen aus Container- und Podressourcen zu verstehen, die von den auf ihnen ausgeführten Workloads beeinflusst werden.
  3. Machen Sie sich mit den Überwachungsdaten vertraut, um die Leistungsmerkmale zu verstehen. Legen Sie basierend auf dieser Erkenntnis die gewünschten Anforderungen/Grenzwerte dann in der nächsten Bereitstellung oder beim nächsten Upgrade entsprechend fest.
  4. Legen Sie den Wert abhängig von Ihren Anforderungen auf updateMode, Autooder Recreate festInitial.

Nächste Schritte

Informationen zum Einrichten des Vertical Pod Autoscalers in Ihrem AKS-Cluster finden Sie unter Verwenden des Vertical Pod Autoscalers in AKS.