Horizontales Pod-Autoscaling


Auf dieser Seite erhalten Sie einen Überblick über die Funktion „Horizontales Pod-Autoscaling“ und darüber, wie sie in der Google Kubernetes Engine (GKE) eingesetzt wird. Außerdem erfahren Sie, wie Sie auf Ihren Clustern horizontales Pod-Autoscaling konfigurieren und verwenden.

Horizontales Pod-Autoscaling ändert die Form Ihrer Kubernetes-Arbeitslast, indem die Anzahl der Pods in Abhängigkeit von der CPU- oder Speicherauslastung der Arbeitslast automatisch erhöht oder verringert wird. Dies kann auch als Reaktion auf benutzerdefinierte Messwerte erfolgen, die innerhalb von Kubernetes gemeldet werden, oder in Reaktion auf externe Messwerte aus Quellen außerhalb Ihres Clusters.

GKE-Cluster mit automatischer Knotenbereitstellung skalieren die Anzahl der Knoten im Cluster automatisch basierend auf Änderungen der Anzahl der Pods. Aus diesem Grund empfehlen wir, für alle Cluster horizontales Pod-Autoscaling zu verwenden.

Vorteile des horizontalen Pod-Autoscaling

Wenn Sie Ihre Arbeitslast zum ersten Mal auf einem Kubernetes-Cluster bereitstellen, sind Sie vielleicht nicht sicher, welche Ressourcenanforderungen erforderlich sind und wie sich diese Anforderungen je nach Nutzungsverhalten, externen Abhängigkeiten oder anderen Faktoren ändern können. Horizontales Pod-Autoscaling sorgt dafür, dass Ihre Arbeitslast in verschiedenen Situationen konsistent funktioniert. Außerdem können Sie die Kosten kontrollieren, indem Sie nur für zusätzliche Kapazität bezahlen, wenn Sie sie benötigen.

Es ist nicht immer einfach, die Indikatoren vorherzusagen, die Aufschluss darüber geben, ob Ihre Arbeitslast unzureichend ist oder nicht ausgeschöpft wird. Das horizontale Pod-Autoscaling kann die Anzahl der Pods in Ihrer Arbeitslast basierend auf einem oder mehreren Messwerten der folgenden Typen automatisch skalieren:

  • Tatsächliche Ressourcennutzung: Wenn die CPU- oder Speichernutzung eines bestimmten Pods einen Schwellenwert überschreitet. Das kann als Rohwert oder als Prozentsatz des Betrags ausgedrückt werden, den der Pod für diese Ressource anfordert.

  • Benutzerdefinierte Messwerte: Basierend auf einem Messwert, der von einem Kubernetes-Objekt in einem Cluster gemeldet wird, z. B. die Rate von Clientanfragen pro Sekunde oder E/A-Schreibvorgänge pro Sekunde.

    Das kann hilfreich sein, wenn Ihre Anwendung eher zu Netzwerkengpässen als zu CPU- oder Speicherengpässen neigt.

  • Externe Messwerte: Basierend auf einem Messwert aus einer Anwendung oder einem Dienst außerhalb Ihres Clusters.

    Zum Beispiel benötigt Ihre Arbeitslast unter Umständen mehr CPU, wenn eine große Anzahl von Anfragen von einer Pipeline wie Pub/Sub aufgenommen wird. Sie können einen externen Messwert für die Warteschlangengröße erstellen und das horizontale Pod-Autoscaling so konfigurieren, dass die Anzahl der Pods automatisch erhöht wird, wenn die Warteschlangengröße einen bestimmten Grenzwert erreicht, und dass die Anzahl der Pods verringert wird, wenn die Warteschlangengröße abnimmt.

Sie können ein horizontales Pod-Autoscaling mit einem vertikalen Pod-Autoscaling kombinieren, mit einigen Einschränkungen.

Funktionsweise des horizontalen Pod-Autoscaling

Jedes konfigurierte horizontale Pod-Autoscaling verwendet eine Kontrollschleife. Für jeden Workflow gibt es ein separates horizontales Pod-Autoscaling. Jedes horizontale Pod-Autoscaling prüft regelmäßig die Messwerte einer bestimmten Arbeitslast mit den von Ihnen konfigurierten Zielgrenzwerten und ändert die Form der Arbeitslast automatisch.

Ressourcen pro Pod

Für Ressourcen, die pro Pod zugewiesen werden, z. B. die CPU, fragt der Controller die Resource Metrics API für jeden Container ab, der im Pod ausgeführt wird.

  • Wenn Sie einen Rohwert für die CPU oder den Arbeitsspeicher angeben, wird der Wert verwendet.
  • Wenn Sie einen Prozentwert für die CPU oder den Arbeitsspeicher angeben, berechnet das horizontale Pod-Autoscaling den durchschnittlichen Nutzungswert als Prozentsatz der CPU- oder Speicheranfragen des Pods.
  • Benutzerdefinierte und externe Messwerte werden als Rohwerte oder Durchschnittswerte ausgedrückt.

Der Controller verwendet den Durchschnittswert oder Rohwert für einen gemeldeten Messwert, mit dem ein Verhältnis erstellt wird. Mit diesem Verhältnis wird die Arbeitslast automatisch skaliert. Der Algorithmus des horizontalen Pod-Autoscaling wird in der Dokumentation zu Kubernetes-Projekten beschrieben.

Auf mehrere Messwerte reagieren

Wenn Sie eine Arbeitslast für die automatische Skalierung basierend auf mehreren Messwerten konfigurieren, wertet das horizontale Pod-Autoscaling jeden Messwert separat aus und verwendet den Skalierungsalgorithmus, um die neue Arbeitslastskalierung basierend auf jedem einzelnen zu bestimmen. Für die automatische Skalierungsaktion wird die größte Skalierung ausgewählt.

Wenn einer oder mehrere der Messwerte aus irgendeinem Grund nicht verfügbar sind, skaliert das horizontale Pod-Autoscaling auf der Grundlage der größten berechneten Größe nach oben, jedoch nicht mehr nach unten.

Seitenflattern verhindern

Seitenflattern bezieht sich auf eine Situation, in der das horizontale Pod-Autoscaling versucht, nachfolgende Autoscaling-Aktionen auszuführen, bevor die Arbeitslast auf vorherige Autoscaling-Aktionen reagiert. Das horizontale Pod-Autoscaling wählt die größte Empfehlung basierend auf den letzten fünf Minuten aus, um Seitenflattern zu verhindern.

Beschränkungen

  • Verwenden Sie das horizontale Pod-Autoscaling nicht in Kombination mit dem vertikalen Pod-Autoscaling für CPU oder Speicher. Für andere Messwerte können Sie das horizontale Pod-Autoscaling und das vertikale Pod-Autoscaling gemeinsam verwenden.
  • Wenn Sie ein Deployment haben, konfigurieren Sie das horizontale Pod-Autoscaling nicht auf dem ReplicaSet- oder Replikations-Controller, der das Deployment unterstützt. Wenn Sie ein Rolling Update für den Deployment- oder Replikations-Controller ausführen, wird er durch einen neuen Replikations-Controller ersetzt. Konfigurieren Sie stattdessen das horizontale Pod-Autoscaling im Deployment selbst.
  • Sie können horizontales Pod-Autoscaling nicht für Arbeitslasten verwenden, die nicht skaliert werden können, z. B. DaemonSets.
  • Sie können keine benutzerdefinierten oder externen Messwerte mit horizontalem Pod-Autoscaling verwenden, um auf null Pods herunter- und dann wieder hochzu skalieren.
  • Beim horizontalen Pod-Autoscaling werden Messwerte als Kubernetes-Ressourcen freigegeben. Das schränkt die Namen von Messwerten ein, z. B. dürfen sie keine Großbuchstaben oder Schrägstriche enthalten. Ihr Messwertadapter lässt möglicherweise ein Umbenennen zu. Weitere Informationen finden Sie unter prometheus-adapter as-Operator.

Skalierbarkeit

Für das horizontale Pod-Autoscaling gibt es kein festes Limit für die unterstützte Anzahl von HPA-Objekten. Ab einer bestimmten Anzahl von HPA-Objekten kann der Zeitraum zwischen HPA-Neuberechnungen jedoch länger als die standardmäßigen 15 Sekunden sein.

  • GKE-Nebenversion 1.21 oder früher: Neuberechnungszeitraum sollte innerhalb von 15 Sekunden mit bis zu 100 HPA-Objekten liegen.
  • GKE-Nebenversion 1.22 oder höher: Der Neuberechnungszeitraum sollte innerhalb von 15 Sekunden mit bis zu 300 HPA-Objekten liegen.

Die folgenden Faktoren können sich ebenfalls auf die Leistung auswirken:

  • Skalierung auf mehrere Messwerte: Für jeden Messwert wird ein Abrufaufruf für die Berechnung von Empfehlungen hinzugefügt, was sich auf den Zeitraum für die Neuberechnung auswirkt.
  • Die Latenz des benutzerdefinierten Messwert-Stacks: Die Antwortzeiten über etwa 50 Millisekunden würden mehr als gewöhnlich mit den Kubernetes-Standardmesswerten beobachtet, was sich auf den Neuberechnungszeitraum auswirkt.

Mit HorizontalPodAutoscaler-Objekten interagieren

Sie können ein horizontales Pod-Autoscaling für eine Arbeitslast konfigurieren und Informationen zu Autoscaling-Ereignissen und den Ursachen dafür abrufen. Rufen Sie dazu in der Google Cloud Console die Seite Arbeitslasten auf.

Jedes horizontale Pod-Autoscaling ist im Cluster als HorizontalPodAutoscaler-Objekt vorhanden. Sie können Befehle wie kubectl get hpa oder kubectl describe hpa HPA_NAME verwenden, um mit diesen Objekten zu interagieren.

Sie können HorizontalPodAutoscaler-Objekte auch mit dem Befehl kubectl autoscale erstellen.

Nächste Schritte