Cluster Autoscaler

In GKE on VMware Version 1.10 ist Cluster-Autoscaling für Knotenpools in Nutzerclustern allgemein verfügbar. Dabei wird die Anzahl der Knoten in einem bestimmten Knotenpool an die Anforderungen Ihrer Arbeitslasten angepasst. 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. Wenn Ihre Arbeitslast beispielsweise ein einzelner Pod ist und sein aktueller Knoten gelöscht wird, wird der Pod auf einen anderen Knoten verschoben. Bevor Sie das Autoscaling aktivieren, sollten Sie daher Ihre Arbeitslasten so gestalten, dass mögliche Unterbrechungen toleriert werden. So werden wichtige Pods nicht unterbrochen.

Cluster-Autoscaling ist für Knotenpools standardmäßig deaktiviert. Sie können das Autoscaling in Nutzercluster-Knotenpools entweder während der Clustererstellung oder nach der Clustererstellung mit dem Befehl gkectl update aktivieren und deaktivieren.

So funktioniert Cluster-Autoscaling

Cluster Autoscaler wird jeweils für einen Knotenpool aktiviert. 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 prü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 das Cluster Autoscaling Knoten bis zur Mindestgröße des Knotenpools. Wenn der Knoten nicht ordnungsgemäß beendet werden kann, wird er zwangsweise beendet und das angehängte, von Kubernetes verwaltete Laufwerk sicher getrennt.

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 kann zu einer kurzen Störung führen. Wenn Ihre Dienste Unterbrechungen nicht tolerieren können, wird die Verwendung des Cluster Autoscaler nicht empfohlen.
  • Nutzer oder Administratoren verwalten Knoten nicht manuell. Wenn der Cluster Autoscaler für einen Knotenpool aktiviert ist, können Sie das Feld replicas des Knotenpools nicht überschreiben.
  • Alle Knoten in einem einzelnen Knotenpool haben dieselben Labels.
  • Cluster Autoscaler berücksichtigt die relativen Kosten jedes Instanztyps in den verschiedenen Knotenpools und versucht, den Knotenpool so zu erweitern, dass geringstmögliche Verschwendung verursacht wird.

Mindest- und Maximalgröße von Knotenpools

Sie können die Mindest- und Maximalgröße für jeden Knotenpool in Ihrem Cluster mit den Werten autoscaling.minReplicas und autoscaling.maxReplicas angeben. Der Cluster Autoscaler trifft die Neuskalierungsentscheidungen innerhalb dieser Grenzen. Der Wert replicas des Knotenpools, d. h. die Standardanzahl der Knoten ohne Autoscaling, sollte größer als der angegebene Wert minReplicas und kleiner als der angegebene Wert maxReplicas sein. Wenn Sie Autoscaling aktivieren, wartet Cluster Autoscaler erst, wenn ein neuer Knoten im Knotenpool erforderlich ist oder ein Knoten sicher aus dem Knotenpool gelöscht werden kann.

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. Wenn ein Knoten einen Pod mit einer der folgenden Bedingungen hat, wird er möglicherweise nicht gelöscht.

Das PodDisruptionBudget einer Anwendung kann auch das Autoscaling verhindern. Wenn das Löschen von Knoten zu einer Budgetüberschreitung führen würde, wird der Cluster nicht herunterskaliert.

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

Beschränkungen

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

  • Das Herunterskalieren auf null Replikate im Knotenpool ist nicht zulässig.
  • Die Summe der Nutzercluster-Worker-Knoten muss immer mindestens 3 betragen. Dies bedeutet, dass die Summe der minReplicas-Werte für alle automatisch skalierten Knotenpools plus die Summe der replicas-Werte für alle nicht automatisch skalierten Knotenpools mindestens 3 sein muss.
  • 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 für Pod-Störungen konfigurieren, um diese Einschränkung zu umgehen.
  • Die benutzerdefinierte Planung mit geänderten Filtern wird nicht unterstützt.
  • Knoten werden nicht hochskaliert, wenn Pods einen PriorityClass-Wert unter -10 haben. Weitere Informationen finden Sie unter Wie funktioniert Cluster Autoscaler mit Pod-Priorität und -Präemption?