Cluster für die automatische Skalierung vorbereiten
Virtuelle private Cloud Klassische Infrastruktur
Mit dem Add-on cluster-autoscaler können Sie die Worker-Pools in Ihrem klassischen Cluster oder VPC-Cluster mit Red Hat® OpenShift® on IBM Cloud® automatisch skalieren, um die Anzahl der Workerknoten im Worker-Pool abhängig vom Kapazitätsbedarf
der geplanten Workloads zu erhöhen oder zu verringern. Das Add-on cluster-autoscaler basiert auf dem Kubernetes-Cluster-Autoscaler-Projekt.
Eine Liste der unterstützten Add-on-Versionen nach Clusterversion finden Sie unter Unterstützte Cluster-Add-on-Versionen.
Sie können den Cluster-Autoscaler nicht für Workerpools aktivieren, die Reservierungen verwenden.
Automatische Skalierung verstehen
-
Der Cluster-Autoscaler prüft den Cluster in regelmäßigen Abständen, um die Anzahl der Workerknoten in den Worker-Pools, die er verwaltet, als Reaktion auf Ihre Workloadressourcenanforderungen und entsprechend den von Ihnen konfigurierten angepassten Einstellungen, wie zum Beispiel Scanintervalle, anzupassen.
-
Der Cluster-Autoscaler prüft jede Minute auf die folgenden Situationen.
- Anstehende Pods für Scale-up: Ein Pod gilt als anstehend, wenn nicht ausreichende Datenverarbeitungsressourcen vorhanden sind, um den Pod auf einem Workerknoten zu planen. Wenn der Cluster-Autoscaler anstehende Pods erkennt, fügt der Autoscaler Workerknoten durch ein gleichmäßiges Scale-up über Zonen hinweg hinzu, um die Workloadressourcenanforderungen zu erfüllen.
- Nicht ausgelastete Workerknoten für Scale-down: Standardmäßig werden Workerknoten, die über 10 Minuten oder länger mit weniger als 50 % der angeforderten Gesamtrechenressourcen arbeiten und deren Workloads auf anderen Workerknoten neu geplant werden können, als nicht ausgelastet betrachtet. Wenn der Cluster-Autoscaler nicht ausgelastete Workerknoten erkennt, führt er ein Scale-down Ihrer Workerknoten um jeweils einen pro Mal durch, sodass nur die Datenverarbeitungsressourcen vorhanden sind, die benötigt werden. Falls Sie dies wünschen, können Sie den standardmäßig verwendeten Auslastungsschwellenwert von 50% für 10 Minuten für das Scale-down anpassen.
-
Das Prüfen (Scannen) und Durchführen von Scale-up- und Scale-down-Operationen erfolgt in regelmäßigen Intervallen im Verlauf der Zeit und kann abhängig von der Anzahl der Workerknoten auch eine längere Zeit (z. B. 30 Minuten) dauern.
-
Der Cluster-Autoscaler passt die Anzahl der Worker-Knoten unter Berücksichtigung der von Ihnen für Ihre Bereitstellungen definierten Ressourcenanforderungen an, nicht anhand der tatsächlichen Auslastung der Worker-Knoten. Falls Ihre Pods und Bereitstellungen keine angemessenen Mengen von Ressourcen anfordern, müssen Sie die Konfigurationsdateien der Pods anpassen.
-
Diese Anpassung kann der Cluster-Autoscaler nicht für Sie vornehmen. Beachten Sie außerdem, dass Worker-Knoten einen Teil der Rechenressourcen für grundlegende Clusterfunktionen, Standard- und benutzerdefinierte Add-ons sowie Ressourcenreserven nutzen.
-
Im Allgemeinen berechnet der Cluster-Autoscaler die Anzahl der Workerknoten, die Ihr Cluster zur Ausführung seiner Workload benötigt. Die Durchführung von Scale-up- oder Scale-down-Operationen für den Cluster hängt von zahlreichen Faktoren ab, wie zum Beispiel den folgenden.
- Die minimale und maximale Workerknotengröße pro Zone, die Sie festlegen.
- Ihre ausstehenden Pod-Ressourcenanfragen und bestimmte Metadaten, die Sie der Workload zuordnen, wie z. B. Anti-Affinität, Labels zur Platzierung von Pods ausschließlich auf bestimmten Flavors oder Pod-Unterbrechungsbudgets.
- Die Worker-Pools, die vom Cluster-Autoscaler verwaltet werden, möglicherweise über verschiedene Zonen hinweg in einem Multizonen-Cluster.
-
Frühere Versionen des Cluster-Autoscalers stützten sich bei der Planung von Simulationen nur auf vorhandene Arbeitsknoten. Wenn beispielsweise ein Worker-Pool auf 0 Knoten verkleinert wurde, hatte der Autoscaler keine Informationen über die Kapazität oder Labels dieses Pools, was bedeutete, dass er den Worker-Pool nicht wieder vergrößern konnte. Folglich wurde die Skalierung auf Null nicht unterstützt.
-
Ab der Version 2.0.0 erstellt der Autoscaler für jeden Worker-Pool einen Vorlagenknoten. Diese Vorlage wird verwendet, um ein Modell der zuweisbaren CPU, des Speichers, der Labels und der Taints eines neuen Knotens im Pool bereitzustellen.
-
Darüber hinaus stehen in Version zwei neue optionale 2.0.0 Einstellungen im
kube-system``iks-ca-configmapNamespace zur Verfügung:OSReservedMemoryGiundOSReservedCPUMili.- Diese Werte geben die Menge an CPU und Speicher an, die das Betriebssystem auf jedem Worker-Knoten reserviert.
- Die Kernel-Auslastung kann mit diesen Werten nicht angepasst werden, da diese bereits definiert sind.
- Der Autoscaler zieht diese Werte von der Kapazität des Knotens ab, wenn er die zuweisbaren Ressourcen für die Planung von Simulationen berechnet.
- Standardmäßig verwendet der Autoscaler die empfohlenen, vom Betriebssystem reservierten Werte, aber Benutzer können diese überschreiben, um die planbare Kapazität anzupassen.
Weitere Informationen finden Sie in den häufig gestellte Fragen zum Kubernetes-Cluster-Autoscaler unter Wie funktioniert das Hochskalieren? und Wie funktioniert das Herunterskalieren?.
Was sind die besten Praktiken für die automatische Skalierung?
- Nutzen Sie den Cluster-Autoscaler optimal, indem Sie die folgenden Strategien für Ihren Workerknoten und Ihre Workload-Bereitstellungsstrategien anwenden. Weitere Informationen finden Sie unter Kubernetes Häufig gestellte Fragen Cluster-Autoscaler.
- Testen Sie den Cluster-Autoscaler mit einigen wenigen Testworkloads, um ein gutes Gefühl dafür zu erhalten, wie Scale-up und Scale-down funktionieren, Sie möglicherweise konfigurieren möchten und andere Aspekte, die Sie möglicherweise wünschen, wie Überbereitstellung von Workerknoten oder Begrenzung von Apps.
- Anschließend bereinigen Sie Ihre Testumgebung und planen, diese angepassten Werte und zusätzliche Einstellungen in eine Neuinstallation des Cluster-Autoscalers einzubeziehen.
Kann ich die Funktionsweise von Scale-up und Scale-down ändern?
Ja, Sie können Einstellungen anpassen oder andere Ressourcen von Kubernetes nutzen, um die Funktionsweise der Skalierung nach oben und unten zu beeinflussen.
-
Für die Skalierung können Sie die Werte des Cluster-Auto-Scalers ConfigMap anpassen, z. B.
scanInterval,expander,skipNodesodermaxNodeProvisionTime. Informieren Sie sich über die Methoden zum Überbereitstellen von Workerknoten, damit Sie die Workerknoten vertikal skalieren können, bevor einem Worker-Pool die Ressourcen ausgehen. Sie können auch Kubernetes-Pod-Budget-Unterbrechungen und Pod-Prioritätsgrenzen einrichten, um die Funktionsweise des Scale-ups zu ändern. -
Um die Kapazität zu reduzieren, passen Sie die Werte des Cluster-Autoscalers ConfigMap an, z. B.
scaleDownUnneededTime,scaleDownDelayAfterAdd,scaleDownDelayAfterDelete, oderscaleDownUtilizationThreshold.
Kann ich die Mindestgröße pro Zone erhöhen, um ein Scale-up meines Clusters auf diese Größe auszulösen?
Nein, durch Festlegen von minSize wird nicht automatisch ein Scale-up ausgelöst. Der ist minSize ein Schwellenwert, der sicherstellt, dass der Cluster-Autoscaler nicht auf weniger als eine bestimmte Anzahl von Worker-Knoten
pro Zone skaliert.
- Wenn für Ihren Cluster nicht diese Anzahl pro Zone festgelegt ist, führt der Cluster-Autoscaler ein Scale-up erst dann durch, wenn Anforderungen für Workerressourcen vorliegen, die zusätzliche Ressourcen erfordern. Beispiel: Wenn Sie einen
Worker-Pool mit einem Workerknoten pro drei Zonen haben (insgesamt drei Workerknoten) und den Parameter
minSizeauf4pro Zone setzen, stellt der Cluster-Autoscaler nicht sofort drei zusätzliche Workerknoten pro Zone (insgesamt 12 Workerknoten) bereit. Stattdessen wird die Scale-up-Operation durch Ressourcenanforderungen ausgelöst. - Wenn Sie eine Workload erstellen, die die Ressourcen von 15 Workerknoten anfordert, führt der Cluster-Autoscaler ein Scale-up für den Worker-Pool durch, damit diese Anforderung erfüllt werden kann. Das bedeutet
minSizenun, dass der Cluster-Autoscaler nicht auf weniger als vier Worker-Knoten pro Zone herunterskaliert, selbst wenn Sie die Workload entfernen, die diese Anzahl anfordert.
Wie unterscheidet sich dieses Verhalten von Workerpools, die nicht vom Cluster-Autoscaler verwaltet werden?
Wenn Sie einen Worker-Pool erstellen, geben Sie an, wie viele Workerknoten pro Zone der Worker-Pool enthält. Der Worker-Pool verwaltet diese Anzahl von Workerknoten, bis Sie seine Größe ändern oder den Worker-Pool neu ausgleichen. Der Worker-Pool fügt keine Workerknoten für Sie hinzu und entfernt auch keine Workerknoten. Wenn Sie mehr Pods haben, als geplant werden können, verbleiben die Pods im anstehenden Status (Wartestatus), bis Sie die Größe des Worker-Pools ändern. Wenn Sie den Cluster-Autoscaler für einen Worker-Pool aktivieren, werden Scale-up- und Scale-down-Operationen für Workerknoten als Reaktion auf Ihre Einstellungen der Podspezifikationen und auf Ressourcenanforderungen durchgeführt. Sie brauchen den Worker-Pool nicht manuell in der Größe zu ändern oder neu auszugleichen.
Wie funktioniert die automatische GPU-Skalierung?
Die automatische Skalierung von GPU-Arbeitsknoten wird nur mit der Cluster-Autoscaler-Version 1.2.4 und höher und nur mit NVIDIA GPUs Worker Node Flavors unterstützt. Ein Scale-up erfolgt, wenn ein Pod aufgrund von GPU-Ressourcenknappheit
in den Schwebezustand übergeht. Der Autoscaler erweitert dann den Cluster durch Hinzufügen weiterer Knoten. Eine Verkleinerung findet statt, wenn die Auslastung unter den konfigurierten Wert scaleDownGPUUtilizationThreshold fällt. Wenn dies der Fall ist, wird der Knoten für eine Verkleinerung in Betracht gezogen.
Kann ich mehrere Worker-Pools gleichzeitig automatisch skalieren?
Ja, nachdem Sie den Cluster-Autoscaler installiert haben, können Sie in der Konfigurationszuordnung auswählen, welche Worker-Pools im Cluster automatisch skaliert werden sollen. Sie können nur einen Autoscaler pro Cluster ausführen. Erstellen und aktivieren Sie die automatische Skalierung für andere Worker-Pools als den standardmäßigen Worker-Pool, da dieser über Systemkomponenten verfügt, die die Durchführung eines automatischen Scale-downs verhindern können.
Wie kann ich sicherstellen, dass der Cluster-Autoscaler darauf reagiert, welche Ressourcen meine App benötigt?
Der Cluster-Autoscaler skaliert Ihren Cluster entsprechend den Ressourcenanforderungen Ihrer Workloads. Geben Sie daher die Ressourcenanforderungen für alle Ihre Bereitstellungen an, da der Cluster-Autoscaler anhand dieser Anforderungen berechnet, wie viele Worker-Knoten für die Ausführung der Workload benötigt werden. Beachten Sie, dass die automatische Skalierung auf der Nutzung der Datenverarbeitungsfunktionalität basiert, die Ihre Workloadkonfiguration anfordert, und keine anderen Faktoren wie zum Beispiel Maschinenkosten einkalkuliert.
Kann ich einen Worker-Pool auf null (0) Knoten herunterskalieren?
Ja! Ab der Add-on-Version „Cluster Autoscaler“ können Sie 2.0.0 bestimmte Worker-Pools auf null Knoten verkleinern.
- Warum ist das nützlich?
- Die Skalierung auf Null hilft, Kosten zu sparen, wenn keine Workloads ausgeführt werden. Der Autoscaler bringt die Knoten bei Bedarf automatisch zurück.
- Wie funktioniert es?
- Wenn keine Pods ausgeführt werden, kann der Autoscaler den Worker-Pool auf 0 Knoten reduzieren. Wenn neue Pods Ressourcen benötigen, skaliert der Autoscaler den Pool automatisch wieder hoch.
- Was müssen Sie tun?
-
- Überprüfen Sie Ihre Add-on-Version und stellen Sie sicher, dass Sie oder höher v2.0.0 verwenden.
-
- Legen Sie dies
minSize = 0für den Worker-Pool in Ihrer Autoscaler-Konfiguration fest. Wenn Sie öffentliche ALBs aktiviert haben, legen SieminSize = 2pro Zone für hohe Verfügbarkeit fest.
- Legen Sie dies
- Was ist die Cluster-Quorum-Anforderung?
- Beachten Sie, dass der gesamte Cluster nicht auf Null heruntergefahren werden kann. Eine Mindestanzahl von Knoten muss aktiv bleiben, um den Cluster funktionsfähig zu halten und das Quorum etcd aufrechtzuerhalten. Wenn diese Mindestanzahl erreicht ist, können Sie andere Worker-Pools auf Null reduzieren.
Kann ich meine Bereitstellungen für die automatische Skalierung optimieren?
Ja, Sie können Ihrer Bereitstellung mehrere Kubernetes-Funktionen hinzufügen, um anzupassen, auf welche Weise der Cluster-Autoscaler Ihre Ressourcenanforderungen bei der Skalierung berücksichtigt.
- Wenden Sie einen Taint auf Ihren Worker-Pool an, damit nur die Bereitstellungen oder Pods mit entsprechenden Tolerierungen in Ihrem Worker-Pool bereitgestellt werden können.
- Fügen Sie eine Bezeichung zu einem Worker-Pool hinzu, der nicht der Standard-Worker-Pool ist. Diese Bezeichnung wird in Ihrer Bereitstellungskonfiguration verwendet, um die Werte
für
nodeAffinityodernodeSelectoranzugeben, die die Workloads begrenzen, die auf den Workerknoten im bezeichneten Worker-Pool implementiert werden können. - Nutzen Sie Pod-Ausfallbudgets, um eine plötzliche Umplanung oder Löschung Ihrer Pods zu verhindern.
- Wenn Sie die Pod-Priorität verwenden, können Sie den Prioritätsgrenzwert bearbeiten, um festzulegen, welche Prioritätsstufen eine Skalierung nach oben auslösen. Standardmäßig gilt für die Prioritätsgrenze der Wert null (
0).
Kann ich für automatisch skalierte Worker-Pools Taints und Tolerierungen verwenden?
Ja, aber Sie müssen Taints auf der Worker-Poolebene anwenden, damit alle vorhandenen und zukünftigen Workerknoten den gleichen Taint erhalten. Anschließend müssen Sie eine entsprechende Toleranz in Ihre Workload-Konfiguration aufnehmen, damit diese Workloads auf Ihren automatisch skalierten Worker-Pool mit dem entsprechenden Taint eingeplant werden. Vergessen Sie dabei Folgendes nicht: Wenn Sie eine Workload bereitstellen, die von dem mit Taints versehenen Worker-Pool nicht toleriert wird, werden die Workerknoten nicht für ein Scale-up in Betracht gezogen und es werden möglicherweise mehr Workerknoten bestellt, selbst wenn der Cluster über genügend Kapazität verfügt. Der Worker-Pool mit Taints wird jedoch weiterhin als nicht ausgelastet bewertet, wenn weniger als die durch den Schwellenwert (Standardwert: 50%) angegebenen Ressourcen genutzt werden. In diesem Fall werden die Workerknoten für ein Scale-down in Betracht gezogen.
Vorbereiten von Clustern für die automatische Skalierung
Bevor Sie das Cluster-Autoscaler-Add-on für IBM Cloud installieren, können Sie Ihren Cluster durch eine entsprechende Einrichtung für die automatische Skalierung vorbereiten.
Das Cluster-Autoscaler-Add-on wird nicht für Bare-Metal-Workerknoten unterstützt.
-
Bevor Sie beginnen, müssen Sie die erforderliche CLI und Plug-ins installieren.
- IBM Cloud CLI (
ibmcloud) - IBM Cloud Kubernetes Service-Plug-in (
ibmcloud oc) - IBM Cloud Container Registry-Plug-in (
ibmcloud cr) - Kubernetes (
kubectl)
- IBM Cloud CLI (
-
Vergewissern Sie sich, dass Ihre IBM Cloud Identity and Access Management-Berechtigungsnachweise im Cluster gespeichert sind. Der Cluster-Autoscaler verwendet diesen geheimen Schlüssel zur Authentifizierung von Berechtigungsnachweisen. Wenn der geheime Schlüssel fehlt, erstellen Sie ihn, indem Sie die Berechtigungsnachweise zurücksetzen.
oc get secrets -n kube-system | grep storage-secret-store -
Planen Sie die automatische Skalierung eines anderen Worker-Pools als des standardmäßigen Worker-Pools (
default), da der standardmäßige Worker-Pool (default) über Systemkomponenten verfügt, die die Durchführung eines automatischen Scale-Downs verhindern können. Fügen Sie dem Worker-Pool eine Bezeichnung hinzu, damit Sie die Knotenaffinität für die Workloads festlegen können, die Sie in dem Worker-Pool bereitstellen möchten, für den die automatische Skalierung aktiviert ist. Beispiel: Ihre Bezeichnung könnteapp: nginxsein. Entscheiden Sie sich für eine der folgenden Optionen:- Erstellen Sie einen VPC- oder einen klassischen Worker-Pool (nicht den Worker-Pool
default) mit der Bezeichnung, die Sie für die Workloads verwenden möchten, die im automatisch skalierten Worker-Pool ausgeführt werden sollen. - Fügen Sie die Bezeichnung zu einem vorhandenen Worker-Pool hinzu, wobei dies nicht der Worker-Pool
defaultsein darf.
- Erstellen Sie einen VPC- oder einen klassischen Worker-Pool (nicht den Worker-Pool
-
Stellen Sie sicher, dass Ihr Worker-Pool über die erforderlichen Bezeichnungen für die automatische Skalierung verfügt. In der Ausgabe sehen Sie die erforderliche Bezeichnung
ibm-cloud.kubernetes.io/worker-pool-idund die Bezeichnung, die Sie zuvor für die Knotenaffinität erstellt haben. Wenn diese Labels nicht angezeigt werden, fügen Sie einen Worker-Pool hinzu und legen Sie anschließend Ihr Label für die Knotenaffinität fest.ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep LabelsBeispielausgabe eines Worker-Pools mit der Bezeichnung.
Labels: ibm-cloud.kubernetes.io/worker-pool-id=a1aa111111b22b22cc3c3cc444444d44-4d555e5 -
Versehen Sie Worker-Pools mit Taints, wenn Sie diese Worker-Pools automatisch Skalieren möchten, damit der Worker-Pool nur die Workloads akzeptiert, die Sie im automatisch skalierten Worker-Pool ausführen möchten. Weitere Informationen zu Taints und Tolerations finden Sie in der Community-Dokumentation Kubernetes. Als Beispiel können Sie den Taint
use=autoscale:NoExecutefestlegen. In diesem Beispiel führt derNoExecuteTaint dazu, dass Pods, die nicht über die diesem Taint entsprechende Toleranz verfügen, entfernt werden.
Nächste Schritte
Nachdem Sie Ihren Cluster vorbereitet haben, installieren Sie das Cluster-Autoscaler-Add-on.