Nutzercluster skalieren

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

  1. Verwenden Sie anthos-gke im Verzeichnis anthos-aws, um den Kontext zu Ihrem Verwaltungsdienst zu wechseln.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. 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ür spec.minNodeCount und spec.maxNodeCount.

    Im folgenden Beispiel wird die Mindestgröße dieses Knotenpools bei 3 Knoten belassen, aber Cluster Autoscaler kann seine Größe auf 10 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
      ...
    
  3. 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
    
  4. Die AWSNodePool-Ressource wechselt in den Status Resizing. Wenn der AWSNodePool die Skalierung abgeschlossen hat, wird er in den Status Provisioned 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.

  1. 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
    
  2. 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
    
  3. 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.