Cluster Autoscaler

Auf dieser Seite wird erläutert, wie Sie die Knotenpools von Google Kubernetes Engine-Clustern (GKE) automatisch an die Anforderungen Ihrer Arbeitslasten anpassen können. Bei hoher Nachfrage fügt Cluster Autoscaler Knoten zum Knotenpool hinzu. Wenn die Nachfrage gering ist, skaliert Cluster Autoscaler wieder auf eine von Ihnen festgelegte Mindestgröße herunter. Dadurch können Sie die Verfügbarkeit Ihrer Arbeitslasten bei Bedarf erhöhen und haben gleichzeitig eine Kontrolle über die Kosten. Außerdem können Sie Cluster Autoscaler auf einem Cluster konfigurieren.

Übersicht

Cluster Autoscaler von GKE passt die Anzahl der Knoten in einem bestimmten Knotenpool automatisch an die Anforderungen Ihrer Arbeitslasten an. Sie müssen weder Knoten manuell hinzufügen oder entfernen noch sicherheitshalber zu viele Ressourcen in Knotenpools bereitstellen. Stattdessen geben Sie eine Mindest- und eine maximale Größe für den Knotenpool an. Alles andere erfolgt automatisch.

Falls Ressourcen beim Autoscaling des Clusters gelöscht oder verschoben werden, kann es bei den Arbeitslasten zu vorübergehenden Unterbrechungen kommen. Umfasst eine Arbeitslast beispielsweise einen Controller mit einem einzelnen Replikat, kann der Pod dieses Replikats auf einen anderen Knoten verschoben werden, wenn der aktuelle Knoten gelöscht wird. Bevor Sie Cluster Autoscaler aktivieren, sollten Sie daher Ihre Arbeitslasten so gestalten, dass mögliche Unterbrechungen toleriert werden bzw. dass wichtige Pods nicht unterbrochen werden.

So funktioniert Cluster Autoscaler

Cluster Autoscaler funktioniert knotenpoolspezifisch. Wenn Sie einen Knotenpool mit Cluster Autoscaler konfigurieren, geben Sie eine Mindest- und eine maximale Größe für den Knotenpool an.

Cluster Autoscaler vergrößert bzw. verkleinert den Knotenpool automatisch entsprechend den Ressourcenanforderungen (statt der tatsächlichen Ressourcennutzung) der Pods, die auf den Knoten des Knotenpools ausgeführt werden. Das Tool überprüft regelmäßig den Status von Pods und Knoten und ergreift folgende Maßnahmen:

  • Wenn Pods nicht planbar sind, weil nicht genügend Knoten im Knotenpool vorhanden sind, fügt Cluster Autoscaler Knoten hinzu, bis die maximale Größe des Knotenpools erreicht ist.
  • Wenn Knoten nicht ausgelastet sind und alle Pods auch mit weniger Knoten im Knotenpool geplant werden können, entfernt Cluster Autoscaler Knoten bis zur Mindestgröße des Knotenpools. Wenn der Knoten nach Ablauf eines Zeitlimits (derzeit zehn Minuten) nicht ordnungsgemäß beendet werden kann, wird er zwangsweise beendet. Der Kulanzzeitraum lässt sich für GKE-Cluster nicht konfigurieren.

Wenn Ihre Pods zu wenige Ressourcen angefordert haben oder möglicherweise unzureichende Standardwerte nicht geändert wurden und Ihren Knoten Ressourcen fehlen, wird dies von Cluster Autoscaler nicht korrigiert. Sie können dafür sorgen, dass Cluster Autoscaler so präzise wie möglich funktioniert, wenn Sie explizite Ressourcenanforderungen für Ihre Arbeitslasten stellen.

Einsatzkriterien

Cluster Autoscaler geht bei der Änderung der Größe eines Knotenpools von folgenden Annahmen aus:

  • Alle replizierten Pods auf einem anderen Knoten können neu gestartet werden. Dies führt unter Umständen zu einer kurzen Störung. Wenn Ihre Dienste nicht für Unterbrechungen geeignet sind, wird von der Verwendung von Cluster Autoscaler abgeraten.
  • Nutzer oder Administratoren verwalten Knoten nicht manuell. Cluster Autoscaler kann von Ihnen durchgeführte Maßnahmen zur manuellen Knotenverwaltung außer Kraft setzen.
  • Alle Knoten in einem einzelnen Knotenpool haben dieselben Labels.
  • Cluster Autoscaler berücksichtigt die relativen Kosten jedes Instanztyps in den verschiedenen Pools und versucht, den kostengünstigsten Knotenpool zu erweitern. Die geringeren Kosten für Knotenpools mit virtuellen Maschinen auf Abruf werden berücksichtigt.
  • Nach der Erstellung des Clusters oder Knotenpools hinzugefügte Labels werden nicht verfolgt. Von Cluster Autoscaler erstellte Knoten erhalten Labels, die zum Zeitpunkt der Knotenpoolerstellung mithilfe von --node-labels definiert wurden.

Zonenübergreifender Ausgleich

Wenn Ihr Knotenpool mehrere verwaltete Instanzgruppen mit demselben Instanztyp enthält, versucht Cluster Autoscaler, diese Größen der verwalteten Instanzgruppen beim Hochskalieren im Gleichgewicht zu halten. Dies kann eine ungleichmäßige Verteilung von Knoten zwischen verwalteten Instanzgruppen in mehreren Zonen eines Knotenpools verhindern.

Weitere Informationen zu den Ausgleichsentscheidungen von Cluster Autoscaler finden Sie in der Kubernetes-Dokumentation unter FAQ zur automatischen Skalierung.

Mindest- und Maximalgröße von Knotenpools

Sie können die Mindest- und Maximalgröße für jeden Knotenpool in Ihrem Cluster angeben. Cluster Autoscaler trifft die Neuskalierungsentscheidungen innerhalb dieser Grenzen. Ist die aktuelle Knotenpoolgröße nach Aktivierung der automatischen Skalierung geringer als die festgelegte Mindestgröße oder größer als die festgelegte Maximalgröße, wird das Autoscaling erst wirksam, wenn ein neuer Knoten im Knotenpool erforderlich ist oder ein Knoten sicher aus dem Knotenpool gelöscht werden kann.

Autoscaling-Limits

Beim Autoscaling von Clustern richten sich die Skalierungslimits für die Knotenpools nach der Zonenverfügbarkeit.

Mit dem folgenden Befehl wird beispielsweise ein automatisch skalierter Cluster mit mehreren Zonen und sechs Knoten erstellt. Die Knoten sind auf drei Zonen verteilt, wobei mindestens ein Knoten pro Zone und maximal vier Knoten pro Zone vorhanden sein müssen:

gcloud container clusters create example-cluster \
  --zone us-central1-a \
  --node-locations us-central1-a,us-central1-b,us-central1-f \
  --num-nodes 2 --enable-autoscaling --min-nodes 1 --max-nodes 4

Die Gesamtgröße dieses Clusters liegt zwischen drei und zwölf Knoten, verteilt auf drei Zonen. Wenn eine der Zonen ausfällt, dann liegt die Gesamtgröße des Clusters zwischen zwei und acht Knoten.

Autoscaling-Profile

Die Entscheidung, wann ein Knoten entfernt werden soll, bedeutet einen Kompromiss zwischen der Optimierung der Auslastung und der Verfügbarkeit von Ressourcen. Mit dem Entfernen zu wenig genutzter Knoten wird die Clusterauslastung verbessert. Neue Arbeitslasten müssen jedoch möglicherweise warten, bis Ressourcen noch einmal bereitgestellt werden, bevor sie ausgeführt werden können.

Sie können angeben, welches Autoscaling-Profil bei solchen Entscheidungen verwendet werden soll. Derzeit sind folgende Profile verfügbar:

  • balanced: das Standardprofil
  • optimize-utilization: Priorisieren der Auslastungsoptimierung, anstatt freie Ressourcen im Cluster zu belassen. Wenn diese Option ausgewählt ist, skaliert Cluster Autoscaler den Cluster stärker herab. Dadurch können mehr Knoten entfernt werden – und das schneller. Dieses Profil wurde für die Verwendung mit Batch-Arbeitslasten optimiert, die nicht anfällig für Startlatenz sind. Wir empfehlen derzeit nicht, dieses Profil für die Bereitstellung von Arbeitslasten zu verwenden.

Wenn Sie in GKE Version 1.18 und höher das optimize-utilization-Autoscaling-Profile angeben, plant GKE Pods vorzugsweise in Knoten mit hoher Auslastung. Dadurch kann der Cluster-Autoscaler nicht ausgelastete Knoten besser erkennen und entfernen. Damit diese Optimierung erfolgt, legt GKE den Namen des Planers in der Pod-Spezifikation auf gke.io/optimize-utilization-scheduler fest. Pods, die einen benutzerdefinierten Planer angeben, sind nicht betroffen.

Der folgende Befehl aktiviert das Autoscaling-Profil optimize-utilization in einem vorhandenen Cluster:

gcloud beta container clusters update example-cluster \
--autoscaling-profile optimize-utilization

Pod-Planung und -Unterbrechungen berücksichtigen

Cluster Autoscaler berücksichtigt beim Herunterskalieren die in Pods festgelegten Planungs- und Bereinigungsregeln. Diese Einschränkungen können das Löschen eines Knotens durch Cluster Autoscaler verhindern. Ein Knoten wird unter Umständen nicht gelöscht, wenn er einen Pod mit einer der folgenden Bedingungen enthält:

Auch das PodDisruptionBudget einer Anwendung kann die automatische Skalierung verhindern. Wenn durch das Löschen von Knoten das Budget überschritten wird, erfolgt kein Herunterskalieren des Clusters.

Weitere Informationen zu Cluster Autoscaler und zur Vermeidung von Störungen finden Sie in den FAQ zu Cluster Autoscaler:

Weitere Informationen

Mehr über Cluster Autoscaler finden Sie unter FAQs zur automatischen Skalierung im Kubernetes-Open-Source-Projekt.

Beschränkungen

Für Cluster Autoscaler gelten die folgenden Einschränkungen:

  • Lokale PersistentVolumes werden derzeit nicht von Cluster Autoscaling unterstützt.
  • Vertikales Skalieren einer Knotengruppe der Größe 0 für Pods, die über CPU, Arbeitsspeicher und GPU hinausgehende Ressourcen anfordern (z. B. sitzungsspezifischer Speicher)
  • Cluster Autoscaler unterstützt bis zu 5.000 Knoten mit jeweils 30 Pods. Weitere Informationen zu Skalierbarkeitsgarantien finden Sie unter Skalierbarkeitsbericht.
  • Beim Herunterskalieren unterstützt Cluster Autoscaler eine ordnungsgemäße Beendigung innerhalb von zehn Minuten. In diesem Zeitraum kann eine Neuplanung der Pods des Knotens auf einem anderen Knoten erfolgen. Nach Ablauf dieses Zeitlimits wird die Beendigung des Knotens erzwungen.
  • Manchmal kann Cluster Autoscaler nicht vollständig herunterskalieren. Dadurch bleibt nach dem Herunterskalieren ein zusätzlicher Pod übrig. Dies kann vorkommen, wenn erforderliche System-Pods auf verschiedenen Knoten geplant sind, da es keinen Trigger gibt, der diese Pods auf einen anderen Knoten verschiebt. Siehe Ich habe einige Knoten mit geringer Auslastung, die jedoch nicht herunterskaliert werden. Warum?. Sie können ein Budget zur Pod-Unterbrechung konfigurieren, um diese Einschränkung zu umgehen.
  • Die benutzerdefinierte Planung mit geänderten Filtern wird nicht unterstützt.

Nächste Schritte