Wenn Sie Ihre Arbeitslasten auf Anthos-Clustern in AWS skalieren möchten, können Sie Ihre AWSNodePools so konfigurieren, dass es automatisch skaliert wird, oder AWSNodePools manuell erstellen und löschen, um herauf- oder herunterzuskalieren.
Cluster Autoscaler
Anthos GKE on AWS implementiert Cluster Autoscaler von Kubernetes. Wenn die Nachfrage auf Ihren Knoten hoch ist, fügt Cluster Autoscaler dem Knotenpool Knoten 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 Kontrolle über die Kosten.
Übersicht
Cluster Autoscaler 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 sicherheitshalber zu viele Ressourcen in Knotenpools bereitstellen. Stattdessen geben Sie eine Mindest- und eine maximale Größe für den Knotenpool an. Der Cluster wird dann automatisch skaliert.
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 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 bzw. wichtige Pods nicht unterbrochen werden.
So funktioniert Cluster Autoscaler
Cluster Autoscaler funktioniert knotenpoolspezifisch. Wenn Sie einen Knotenpool erstellen, geben Sie eine Mindest- und eine maximale Größe für den Knotenpool in der Kubernetes-Ressource AWSNodePool an.
Wenn Sie Cluster Autoscaler deaktivieren möchten, legen Sie spec.minNodeCount
für Ihre AWSNodePools auf spec.maxNodeCount
fest.
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 Cluster Autoscaler Knoten bis zur Mindestgröße des Knotenpools. Wenn der Knoten nach Ablauf eines Zeitlimits (zehn Minuten) nicht ordnungsgemäß beendet werden kann, wird er zwangsweise beendet. Der Kulanzzeitraum lässt sich nicht konfigurieren.
Wenn Ihre Pods zu wenige Ressourcen angefordert haben (z. B. wenn die Standardeinstellungen unzureichend sind), wird diese Situation von Cluster Autoscaler nicht korrigiert. Sie können dafür sorgen, dass Cluster Autoscaler so präzise wie möglich funktioniert, wenn Sie angemessene Ressourcenanfragen für alle 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 Unterbrechungen nicht tolerieren, empfehlen wir die Verwendung von Cluster Autoscaler.
Alle Knoten in einem einzelnen Knotenpool haben dieselben Labels.
Wenn Sie AWSNodePools mit unterschiedlichen Instanztypen haben, berücksichtigt Cluster Autoscaler die relativen Kosten beim Starten neuer Knoten und versucht, den kostengünstigsten Knotenpool zu erweitern.
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.
Größe eines Knotenpools ändern
Ein AWSNodePool enthält die Felder minNodeCount
und maxNodeCount
. Diese Felder deklarieren eine minimale und maximale Anzahl von Worker-Knoten im Pool. Sie können diese Werte vor oder nach dem Erstellen des AWSNodePools bearbeiten.
Hinweis
Stellen Sie einen Cluster bereit. Folgen Sie dazu der Anleitung unter Nutzercluster erstellen. Halten Sie die YAML-Datei (z. B. cluster-0.yaml
) bereit, mit der der Cluster erstellt wird.
Autoscaling von Knotenpools aktivieren
Verwenden Sie
anthos-gke
im Verzeichnisanthos-aws
, um den Kontext zu Ihrem Verwaltungsdienst zu wechseln.cd anthos-aws anthos-gke aws management get-credentials
Zum Aktivieren von Cluster Autoscaler bearbeiten Sie das Manifest für Ihren AWSNodePool. Bearbeiten Sie die Datei
cluster-0.yaml
und suchen Sie den Abschnitt AWSNodePool. Ändern Sie die Werte fürspec.minNodeCount
undspec.maxNodeCount
.Im folgenden Beispiel wird die Mindestgröße dieses Knotenpools bei
3
Knoten belassen, aber Cluster Autoscaler kann seine Größe auf10
Knoten erhöhen.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: cluster-0-pool-0 spec: clusterName: cluster-0 version: 1.25.5-gke.2100 minNodeCount: 3 maxNodeCount: 10 ...
Wenden Sie als Nächstes die YAML-Datei an, um die Größe des Knotenpools anzupassen.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
Die AWSNodePool-Ressource wechselt in den Status
Resizing
. Wenn der AWSNodePool die Skalierung abgeschlossen hat, wird er in den StatusProvisioned
versetzt.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
Die Ausgabe zeigt, dass der AWSNodePool
Resizing
ist. Der Vorgang der Größenanpassung kann einige Minuten dauern.NAME CLUSTER STATE AGE VERSION cluster-0-pool-0 cluster-0 Resizing 3h 1.25.5-gke.2100
Neuen AWSNodePool manuell erstellen
Sie können Ihren Cluster auch durch Erstellen neuer AWSNodePools skalieren. Wenn Sie einen neuen AWSNodePool erstellen, können Sie Instanzgrößen auch vertikal oder horizontal skalieren.
Sie können das Konfigurationsmanifest eines vorhandenen AWSNodePools mit
kubectl get
abrufen.env HTTPS_PROXY=http://localhost:8118 \ kubectl get awsnodepool cluster-0-pool-0 -o yaml > new_nodepool.yaml
Bearbeiten Sie
new_nodepool.yaml
und entfernen Sie die nicht im folgenden Beispiel vorhandenen Bereiche. Speichern Sie die Datei.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: NODE_POOL_NAME spec: clusterName: AWSCLUSTER_NAME version: CLUSTER_VERSION # latest version is 1.25.5-gke.2100 region: AWS_REGION subnetID: AWS_SUBNET_ID minNodeCount: MINIMUM_NODE_COUNT maxNodeCount: MAXIMUM_NODE_COUNT maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT instanceType: AWS_NODE_TYPE keyName: KMS_KEY_PAIR_NAME iamInstanceProfile: NODE_IAM_PROFILE proxySecretName: PROXY_SECRET_NAME rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: VOLUME_TYPE # Optional iops: IOPS # Optional kmsKeyARN: NODE_VOLUME_KEY # Optional
Wenden Sie das Manifest auf Ihren Verwaltungscluster an, um einen neuen AWSNodePool zu erstellen.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
Nächste Schritte
Stellen Sie einen von Ingress unterstützten Dienst bereit.
Weitere Optionen finden Sie in der Referenzdokumentation zu AWSNodePool.