Cluster-Autoscaling

In diesem Dokument wird Cluster-Autoscaling beschrieben, der automatisch die Größe Ihrer Knotenpools steuert. Cluster Autoscaler wird aktiviert, wenn Sie Mindest- und Höchstwerte für die Anzahl der Knoten in einem Knotenpool angeben. Sie geben diese Werte an, wenn Sie einen Knotenpool erstellen oder einen Knotenpool aktualisieren.

GKE on AWS verwendet die Open-Source-Kubernetes-Cluster-Autoscaler.

Knotenpool automatisch skalieren

Das Cluster-Autoscaling passt die Größe der Knoten in einem Knotenpool automatisch an die Anforderungen der Arbeitslasten an. 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.

Wenn Ressourcen beim Autoscaling Ihres Clusters gelöscht oder verschoben werden müssen, können Ihre Arbeitslasten vorübergehend unterbrochen werden. 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. Aus diesem Grund müssen Sie Ihre Arbeitslasten so entwerfen, dass mögliche Unterbrechungen toleriert werden oder wichtige Pods nicht unterbrochen werden.

So funktioniert das Cluster-Autoscaling

Cluster Autoscaler wird jeweils für einen Knotenpool aktiviert. Wenn Sie das Cluster Autoscaling zum Konfigurieren eines Knotenpools verwenden, geben Sie eine minimale und eine maximale Größe für den Knotenpool an. Sie können die Mindest- und Maximalgröße ändern, wenn Sie einen Knotenpool erstellen oder Knotenpool aktualisieren.

Das Cluster-Autoscaling vergrößert bzw. verkleinert den Knotenpool automatisch entsprechend den Ressourcenanfragen (statt der tatsächlichen Ressourcennutzung) in diesem Knotenpool. Das Cluster-Autoscaling fügt Knoten hinzu, wenn Pod-Objekte nicht planbar sind und nicht genügend Kapazität im Knotenpool vorhanden ist, um Anfragen zu erfüllen.

Das Cluster-Autoscaling entfernt außerdem Knoten, wenn diese nicht ausgelastet sind und alle Pod-Objekte auf einer kleineren Anzahl von Knoten geplant werden können. Wenn der Knoten nach 10 Minuten nicht ordnungsgemäß geleert werden kann, wird der Knoten zwangsweise beendet. Dieser Zeitraum kann nicht konfiguriert werden.

Wenn ein Pod zu wenige Ressourcen anfordert (z. B. wenn die Standardeinstellungen unzureichend sind), wird diese Situation von Cluster-Autoscaling nicht korrigiert. Sie können dafür sorgen, dass Cluster-Autoscaling so präzise wie möglich funktioniert, wenn Sie angemessene Ressourcenanfragen für alle Ihre Arbeitslasten stellen. Weitere Informationen finden Sie unter Ressourcen für Container verwalten.

Pod-Anmerkungen und Verhalten des Cluster-Autoscalings

Der Cluster-Autoscaler berücksichtigt bei der Skalierung bestimmte Pod-Anmerkungen. Die Cluster Autoscaler unterstützt beispielsweise Pod-Anmerkungen wie "cluster-autoscaler.kubernetes.io/safe-to-evict": "false". Wenn diese Anmerkung auf „false“ gesetzt ist, wird verhindert, dass der Knoten, auf dem der Pod gehostet wird, während eines Herunterskalierungsereignisses entfernt wird. Wenn Sie diese Anmerkungen verstehen und verwenden, können Sie das Verhalten des Autoscalers so optimieren, dass es den Anforderungen Ihrer Arbeitslast entspricht.

Weitere Informationen zu Pod-Anmerkungen und ihren Auswirkungen auf den Cluster-Autoscaler finden Sie in den folgenden Ressourcen:

Einsatzkriterien

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

  • Alle replizierten Pod-Objekte können auf einem anderen Knoten neu gestartet werden. Dies führt unter Umständen zu einer kurzen Störung. Wenn Ihre Arbeitslast keine Unterbrechungen toleriert, konfigurieren Sie die Arbeitslast so, dass sie in einem Knotenpool mit deaktiviertem Autoscaling ausgeführt wird. Weitere Informationen finden Sie unter Planung mit Knotenmarkierungen steuern.
  • Das Cluster-Autoscaling kann alle manuellen Knotenverwaltungsvorgänge überschreiben.
  • Alle Knoten in einem einzelnen Knotenpool haben dieselben Labels.
  • Das Cluster-Autoscaling wählt eine Knotengruppe mit der geringsten inaktiven CPU oder dem nicht verwendeten Speicher nach dem Hochskalieren aus. Dieses Verhalten wirkt sich darauf aus, welche Knotenpools hochskaliert werden, wenn sich im selben Cluster verschiedene Knotengrößen befinden (z. B. Knoten mit hoher CPU-Anzahl oder großem Arbeitsspeicher).

Mindest- und Maximalgröße von Knotenpools

Sie können die Mindest- und Maximalgröße für jeden Knotenpool in Ihrem Cluster mit den Flags min-nodes und max-nodes angeben. Wenn Sie das Autoscaling deaktivieren möchten, legen Sie für min-nodes und max-nodes denselben Wert fest. Cluster Autoscaler trifft die Skalierungsentscheidungen innerhalb dieser Größengrenzen.

Achten Sie beim Festlegen der maximalen Größe der Knotenpools darauf, dass sie groß genug ist, um alle Arbeitslasten auszuführen. Wenn die Knotenpools in Ihrem Cluster nicht genügend Arbeitsspeicher und CPU haben, um alle Ihre Arbeitslasten auszuführen, können Ausfälle auftreten.

PodDisruptionBudget zum Schutz von Arbeitslasten verwenden

Sie können GKE on AWS mit einer PodDisruptionBudget konfigurieren, um Unterbrechungen zu verhindern. Wenn Sie eine PodDisruptionBudget erstellen, geben Sie die Mindestanzahl der Pod-Replikate an, die verfügbar sein sollen, oder die maximale Anzahl der Pod-Replikate, die zu einem bestimmten Zeitpunkt nicht verfügbar sein können. Weitere Informationen finden Sie unter Unterbrechungsbudget für Ihre Anwendung festlegen.

Von null Knoten skalieren

Ab den folgenden GKE on AWS-Versionen unterstützt Cluster Autoscaler die vertikale Skalierung von Knotenpools von null Knoten:

  • Version 1.29 und höher
  • Versionen von 1.28 ab 1.28.8-gke.800
  • Versionen von 1.27 ab 1.27.12-gke.800

Wenn Sie eine ältere Version verwenden, müssen Sie Ihren Cluster auf eine dieser Versionen aktualisieren, um diese Funktion nutzen zu können. Wenn Sie diese Funktion für vorhandene Cluster aktivieren möchten, aktualisieren Sie Ihren Cluster auf eine unterstützte Version und führen Sie dann ein schrittweises Update Ihrer Knotenpools durch, indem Sie deren Kubernetes-Version aktualisieren. Weitere Informationen zum Aktualisieren von Knotenpools finden Sie unter Knotenpool aktualisieren.

Der Cluster-Autoscaler berücksichtigt bei Skalierungsentscheidungen Labels und Taints, die Sie für Knotenpools definieren, auch wenn keine Knoten als Referenz verfügbar sind. GKE on AWS setzt automatisch die erforderlichen Label und Taint-Tags auf der zugrunde liegenden AWS-Autoscaling-Gruppe des Knotenpools. Weitere Informationen zu diesen Tags finden Sie im Abschnitt Auto-Discovery Setup (Einrichtung der automatischen Erkennung) der GitHub-Seite mit der Beschreibung der Cluster-Autoscaler-Konfiguration für AWS.

Durch das Festlegen dieser Label- und Taint-Tags ermöglicht GKE on AWS der Cluster Autoscaler, korrekte Knotenvorlagen zu erstellen. Knotenvorlagen sind virtuelle Darstellungen von Knoten, die die richtige Knotenkonfiguration, Labels und Markierungen enthalten, auch wenn sich im Knotenpool keine physischen Knoten befinden. Dank dieser genauen Knotenvorlagen kann der Cluster Autoscaler korrekte Entscheidungen zum Hochskalieren treffen.

Beachten Sie beim Konfigurieren von Beschädigungen für Ihre Knotenpools, dass AWS Autoscaling-Gruppen eine Einschränkung haben: Wenn Sie mehrere Beschädigungen mit demselben Schlüssel, aber unterschiedlichen Kombinationen von Wert und Wirkung anwenden, wird von der Cluster Autoscaler nur die zuletzt angewendete Beschädigung mit dem duplizierten Schlüssel berücksichtigt.

Weitere Informationen

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

Nächste Schritte