Cluster-Autoscaling


Auf dieser Seite wird erläutert, wie die Größe von Knotenpools von Standard-Clustern in Google Kubernetes Engine (GKE) automatisch an die Anforderungen Ihrer Arbeitslasten angepasst wird. Bei hoher Nachfrage fügt das Cluster-Autoscaling Knoten zum Knotenpool hinzu. Informationen zum Konfigurieren des Cluster-Autoscalings finden Sie unter Cluster automatisch skalieren.

Mit Autopilot-Clustern müssen Sie sich keine Gedanken über die Bereitstellung von Knoten oder die Verwaltung von Knotenpools machen, da Knotenpools automatisch über die automatische Knotenbereitstellung bereitgestellt und automatisch skaliert werden, um die Anforderungen Ihrer Arbeitslasten zu erfüllen.

Vorteile des Cluster-Autoscalings

Cluster Autoscaler von GKE passt die Anzahl der Knoten in einem bestimmten Knotenpool automatisch an die Anforderungen Ihrer Arbeitslasten an. Wenn die Nachfrage gering ist, skaliert das Cluster-Autoscaling 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. Sie müssen weder Knoten manuell hinzufügen oder entfernen noch Ihre Knotenpools überdimensionieren. 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.

Sie können die Leistung des Cluster Autoscaler mit Image-Streaming erhöhen, wodurch Remote-Image-Daten remote von geeigneten Container-Images gestreamt werden und gleichzeitig das Image lokal im Cache gespeichert wird, um Arbeitslasten auf neuen Knoten zuzulassen, damit diese schneller starten.

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 durch Hinzufügen oder Entfernen von VM-Instanzen in der zugrunde liegenden verwalteten Instanzgruppe (MIG) von Compute Engine für den Knotenpool. Cluster Autoscaler trifft die Skalierungsentscheidungen auf Grundlage der 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 sich auf einem Knoten Pods befinden, die nicht auf andere Knoten im Cluster verschoben werden können, versucht Cluster Autoscaler nicht, diesen Knoten herunterzuskalieren. Wenn Pods zu anderen Knoten verschoben werden können, der Knoten jedoch 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. Weitere Informationen zur Funktionsweise der Herunterskalierung finden Sie in der Dokumentation zu Cluster Autoscaler.

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 Spot-VMs werden berücksichtigt.
  • Cluster Autoscaler berücksichtigt die init-Containeranfragen, bevor Pods geplant werden. Init-Containeranfragen können alle nicht zugewiesenen Ressourcen verwenden, die auf den Knoten verfügbar sind. Dadurch wird möglicherweise verhindert, dass Pods geplant werden. Cluster Autoscaler folgt denselben Berechnungsregeln für Anfragen, die Kubernetes verwendet. Weitere Informationen finden Sie unter Init-Container verwenden.
  • Nach dem Erstellen 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.
  • In GKE-Version 1.21 oder früher berücksichtigt Cluster Autoscaler die Markierungsinformationen der vorhandenen Knoten aus einem Knotenpool, um den gesamten Knotenpool darzustellen. Ab GKE-Version 1.22 kombiniert Cluster Autoscaler Informationen aus vorhandenen Knoten im Cluster und im Knotenpool. Cluster Autoscaler erkennt manuelle Änderungen an Knoten und Knotenpools für die vertikale Skalierung.

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. GKE berücksichtigt beim Herunterskalieren nicht die Autoscaling-Richtlinie.

Standortrichtlinie

Ab der GKE-Version 1.24.1-gke.800 können Sie die Standortrichtlinie von GKE Cluster Autoscaler ändern. Sie können die Verteilungsrichtlinie für Cluster Autoscaler steuern. Geben Sie dazu das Flag location_policy mit einem der folgenden Werte an:

  • BALANCED: Autoscaler berücksichtigt die Pod-Anforderungen und die Verfügbarkeit von Ressourcen in den einzelnen Zonen. Dies garantiert nicht, dass ähnliche Knotengruppen genau die gleiche Größe haben, da Autoscaler viele Faktoren berücksichtigt, einschließlich der verfügbaren Kapazität in einer bestimmten Zone und Zonenaffinitäten von Pods, die eine Hochskalierung ausgelöst haben.
  • ANY: Autoscaler priorisiert die Nutzung nicht verwendeter Reservierungen und berücksichtigt die aktuellen Einschränkungen der verfügbaren Ressourcen. Diese Richtlinie wird empfohlen, wenn Sie Spot-VMs verwenden oder VM-Reservierungen verwenden möchten, die zwischen Zonen nicht gleich sind.

Reservierungen

Ab GKE-Version 1.27 berücksichtigt Cluster Autoscaler immer Reservierungen, wenn Entscheidungen zur vertikalen Skalierung getroffen werden Die Knotenpools mit übereinstimmenden nicht verwendeten Reservierungen werden priorisiert, wenn der Knotenpool zum Hochskalieren ausgewählt wird, auch wenn der Knotenpool nicht der effizienteste ist. Außerdem werden nicht verwendete Reservierungen beim Balancing von multizonalen Hochskalierungen immer priorisiert.

Standardwerte

Für Knotenpools von Spot-VMs ist die Standardrichtlinie zur Verteilung für Cluster Autoscaler ANY. In dieser Richtlinie haben Spot-VMs ein niedrigeres Risiko, vorzeitig beendet zu werden.

Für nicht abrufbare Knotenpools ist die Standardrichtlinie zur Verteilung für Cluster Autoscaler BALANCED.

Mindest- und Maximalgröße von Knotenpools

Wenn Sie einen neuen Knotenpool erstellen, können Sie die Mindest- und Maximalgröße für jeden Knotenpool in Ihrem Cluster angeben. Das Cluster-Autoscaling trifft die Neuskalierungsentscheidungen innerhalb dieser Skalierungseinschränkungen. Um den Mindestwert zu aktualisieren, ändern Sie die Größe des Clusters manuell auf eine Größe innerhalb der neuen Einschränkungen, nachdem Sie den neuen Mindestwert angegeben haben. Das Cluster-Autoscaling trifft dann Entscheidungen zur Neuskalierung anhand der neuen Einschränkungen.

Aktuelle Knotenpoolgröße Cluster Autoscaler-Aktion Skalierungseinschränkungen
Weniger als das von Ihnen angegebene Minimum Cluster Autoscaler wird vertikal skaliert, um ausstehende Pods bereitzustellen. Das Herunterskalieren ist deaktiviert. Der Knotenpool wird nicht unter den von Ihnen angegebenen Wert herunterskaliert.
Innerhalb der von Ihnen angegebenen Mindest- und Höchstgröße Cluster Autoscaler kann je nach Bedarf hoch- oder herunterskalieren. Der Knotenpool bleibt innerhalb der von Ihnen angegebenen Größenbeschränkung.
Größer als das von Ihnen angegebene Maximum Cluster Autoscaler skaliert nur die Knoten herunter, die sicher entfernt werden können. Das Hochskalieren ist deaktiviert. Der Knotenpool wird nicht über den von Ihnen angegebenen Wert hinaus skaliert.

In Standardclustern wird der Cluster von Cluster Autoscaler nie automatisch auf null Knoten herunterskaliert. Zum Ausführen von System-Pods müssen immer ein oder mehrere Knoten im Cluster verfügbar sein. Wenn die aktuelle Anzahl von Knoten null ist, weil sie manuell entfernt werden, kann Cluster Autoscaler und die automatische Knotenbereitstellung von null Knotenclustern hochskalieren.

Weitere Informationen zu Autoscaling-Entscheidungen finden Sie unter Einschränkungen für Cluster Autoscaler.

Limits für die automatische Skalierung

Sie können die minimale und maximale Anzahl an Knoten festlegen, die Cluster Autoscaler beim Skalieren eines Knotenpools verwenden soll. Mit den Flags --min-nodes und --max-nodes können Sie die minimale und maximale Anzahl an Knoten pro Zone festlegen.

Ab der GKE-Version 1.24 können Sie die Flags --total-min-nodes und --total-max-nodes für neue Cluster verwenden. Diese Flags legen die minimale und maximale Anzahl von Knoten im Knotenpool in allen Zonen fest.

Beispiel: Mindest- und Höchstzahl an Knoten

Mit dem folgenden Befehl wird beispielsweise ein automatisch skalierter Cluster mit mehreren Zonen und sechs Knoten erstellt. Die Knoten sind anfangs 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 \
    --num-nodes=2 \
    --zone=us-central1-a \
    --node-locations=us-central1-a,us-central1-b,us-central1-f \
    --enable-autoscaling --min-nodes=1 --max-nodes=4

In diesem Beispiel kann die Gesamtgröße des Clusters zwischen drei und zwölf Knoten liegen, verteilt auf die drei Zonen. Wenn eine der Zonen ausfällt, kann die Gesamtgröße des Clusters zwischen zwei und acht Knoten betragen.

Beispiel: Gesamtzahl der Knoten

Mit folgendem Befehl, der in der GKE-Version 1.24 oder höher verfügbar ist, wird ein automatisch skalierender Cluster mit mehreren Zonen und sechs Knoten erstellt. Die Knoten sind anfangs auf drei Zonen verteilt, wobei mindestens drei Knoten und maximal zwölf Knoten im Knotenpool über alle Zonen hinweg vorhanden sind:

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

In diesem Beispiel kann die Gesamtgröße des Clusters unabhängig von der Verteilung zwischen Zonen zwischen drei und zwölf Knoten liegen.

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. Folgende Profile sind verfügbar:

  • balanced: Das Standardprofil für Standardcluster. Das Profil balanced ist für Autopilot-Cluster nicht verfügbar.
  • optimize-utilization: Priorisieren der Auslastungsoptimierung, anstatt freie Ressourcen im Cluster zu belassen. Wenn Sie dieses Profil aktivieren, skaliert Cluster Autoscaler den Cluster stärker herab. GKE kann mehr Knoten entfernen sowie Knoten schneller entfernen. GKE bevorzugt Pods in Knoten, die bereits eine hohe Zuweisung von CPU, Arbeitsspeicher oder GPUs haben. Andere Faktoren beeinflussen die Planung, z. B. die Verteilung der Pods, die zum selben Deployment, StatefulSet oder Dienst gehören.

Das Autoscaling-Profil optimize-utilization hilft Cluster Autoscaler, nicht ausgelastete Knoten zu identifizieren und zu 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 container clusters update CLUSTER_NAME \
    --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:

  • Die Affinitäts- oder Anti-Affinitätsregeln des Pods verhindern eine Neuplanung.
  • Der Pod wird nicht von einem Controller wie einem Deployment, StatefulSet, Job oder ReplicaSet verwaltet.
  • Der Pod hat einen lokalen Speicher und die Version der GKE-Steuerungsebene ist niedriger als 1.22. In GKE-Clustern mit Steuerungsebenenversion 1.22 oder höher blockieren Pods mit lokalem Speicher nicht mehr das Herunterskalieren.
  • Der Pod hat die Annotation "cluster-autoscaler.kubernetes.io/safe-to-evict": "false".
  • Das Löschen des Knotens würde das konfigurierte PodDisruptionBudget überschreiten.

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

Autoscaling von TPUs in GKE

GKE unterstützt Tensor Processing Units (TPUs), um ML-Arbeitslasten zu beschleunigen. Sowohl der TPU-Slice-Knotenpool mit einem einzelnen Host als auch der TPU-Slice-Knotenpool mit mehreren Hosts unterstützen Autoscaling und die automatische Bereitstellung.

Mit dem Flag --enable-autoprovisioning in einem GKE-Cluster erstellt oder löscht GKE TPU-Slice-Knotenpools mit einem oder mehreren Hosts mit einer TPU-Version und Topologie, die die Anforderungen ausstehender Arbeitslasten erfüllt.

Wenn Sie --enable-autoscaling verwenden, skaliert GKE den Knotenpool basierend auf seinem Typ so:

  • Einzelner Host TPU-Slice-Knotenpool: GKE fügt dem vorhandenen Knotenpool TPU-Knoten hinzu oder entfernt sie. Der Knotenpool kann eine beliebige Anzahl von TPU-Knoten zwischen null und der maximalen Größe des Knotenpools enthalten, wie durch --max-nodes und die --total-max-nodes-Flags bestimmt. Wenn der Knotenpool skaliert wird, haben alle TPU-Knoten im Knotenpool denselben Maschinentyp und dieselbe Topologie. Weitere Informationen zum Erstellen eines TPU-Slice-Knotenpools mit einem Host finden Sie unter Knotenpool erstellen.

  • TPU-Slice-Knotenpool mit mehreren Hosts: GKE skaliert den Knotenpool in kleinstmöglichen Schritten von null auf die Anzahl der Knoten, die für die TPU-Topologie erforderlich sind. Bei einem TPU-Knotenpool mit dem Maschinentyp ct5lp-hightpu-4t und der Topologie 16x16 enthält der Knotenpool beispielsweise 64 Knoten. GKE Autoscaling sorgt dafür, dass dieser Knotenpool genau 0 oder 64 Knoten hat. Beim Herunterskalieren entfernt GKE alle geplanten Pods und leert den gesamten Knotenpool auf null. Weitere Informationen zum Erstellen eines TPU-Slice-Knotenpools mit mehreren Hosts finden Sie unter Knotenpool erstellen.

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:

Bekannte Probleme

  • In Versionen der GKE-Steuerungsebene vor Version 1.22 beendet Cluster Autoscaler von GKE die vertikale Skalierung aller Knotenpools auf leeren Clustern (ohne Knoten). Dieses Verhalten tritt nicht in GKE-Version 1.22 und höher auf.

Nächste Schritte