Cluster automatisch skalieren


Auf dieser Seite wird beschrieben, wie Sie Ihre Standard Google Kubernetes Engine-Cluster (GKE) automatisch skalieren. In diesem Artikel wird die Funktionsweise von Cluster Autoscaler beschrieben.

Mit Autopilot-Clustern müssen Sie sich keine Gedanken über die Bereitstellung von Knoten oder die Verwaltung von Knotenpools machen, da Knotenpools automatisch über die automatische Knotenbereitstellung bereitgestellt und automatisch skaliert werden, um die Anforderungen Ihrer Arbeitslasten zu erfüllen.

Cluster-Autoscaling verwenden

Im folgenden Abschnitt wird die Nutzung von Cluster Autoscaler erklärt.

Cluster mit Autoscaling erstellen

Sie können einen Cluster mit aktiviertem Autoscaling über die Google Cloud CLI oder die Google Cloud Console erstellen.

gcloud

Verwenden Sie zum Erstellen eines Clusters mit Autoscaling das Flag --enable-autoscaling und geben Sie --min-nodes und --max-nodes an.

gcloud container clusters create CLUSTER_NAME \
    --enable-autoscaling \
    --num-nodes NUM_NODES \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --region=COMPUTE_REGION

Dabei gilt:

  • CLUSTER_NAME: Der Name des zu erstellenden Clusters.
  • NUM_NODES: Die Anzahl der Knoten, die an jedem Standort erstellt werden sollen.
  • MIN_NODES: Die Mindestanzahl der Knoten, die automatisch für den angegebenen Knotenpool pro Zone skaliert werden sollen. Verwenden Sie --total-min-nodes, um die Mindestanzahl der Knoten für den gesamten Knotenpool in GKE-Version 1.24 und höher anzugeben. Die Flags --total-min-nodes und --total-max-nodes einerseits und die Flags --min-nodes und --max-nodes andererseits schließen sich gegenseitig aus.
  • MAX_NODES: Die maximale Anzahl der Knoten, die automatisch für den angegebenen Knotenpool pro Zone skaliert werden sollen. Verwenden Sie --total-max-nodes, um die maximale Anzahl der Knoten für den gesamten Knotenpool in GKE-Version 1.24 und höher anzugeben. Die Flags --total-min-nodes und --total-max-nodes einerseits und die Flags --min-nodes und --max-nodes andererseits schließen sich gegenseitig aus.
  • COMPUTE_REGION: die Compute Engine-Region für den neuen Cluster. Verwenden Sie für zonale Cluster --zone=COMPUTE_ZONE.

Beispiel: Cluster mit aktiviertem Knoten-Autoscaling und Mindest- und Höchstzahl von Knoten erstellen

Der folgende Befehl erstellt einen Cluster mit 90 Knoten bzw. 30 Knoten in jeder der 3 Zonen in der Region. Das Autoscaling für Knoten ist aktiviert und passt die Anzahl der Knoten entsprechend der Clusterlast an. Das Cluster-Autoscaling kann die Größe des Standardknotenpools auf 15 Knoten verringern oder den Knotenpool auf bis zu 50 Knoten pro Zone erhöhen.

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes=30 \
    --min-nodes=15 --max-nodes=50 \
    --region=us-central

Beispiel: Cluster mit aktiviertem Knoten-Autoscaling und Gesamtzahl an Knoten erstellen

Der folgende Befehl erstellt einen Cluster mit 30 Knoten bzw. 10 Knoten in jeder der 3 Zonen in der Region. Das Autoscaling für Knoten ist aktiviert und passt die Anzahl der Knoten entsprechend der Clusterlast an. In diesem Beispiel kann die Gesamtgröße des Clusters unabhängig von der Verteilung zwischen Zonen zwischen 10 und 60 Knoten liegen.

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes 10 \
    --region us-central1 \
    --total-min-nodes 10  --total-max-nodes 60

Console

So erstellen Sie einen neuen Cluster, in dem für den Standardknotenpool Autoscaling aktiviert ist:

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite „Google Kubernetes Engine“

  2. Klicken Sie auf Erstellen.

  3. Konfigurieren Sie den Cluster wie gewünscht.

  4. Klicken Sie im Navigationsbereich unter Knotenpools auf default-pool.

  5. Klicken Sie das Kästchen Autoscaling aktivieren an.

  6. Ändern Sie die Werte in den Feldern Mindestanzahl von Knoten und Maximale Anzahl von Knoten nach Bedarf.

  7. Klicken Sie auf Erstellen.

Knotenpools mit Autoscaling hinzufügen

Sie können einen Knotenpool mit aktiviertem Autoscaling über die gcloud CLI oder die Google Cloud Console erstellen.

gcloud

Verwenden Sie den folgenden Befehl, um einem vorhandenen Cluster einen Knotenpool mit Autoscaling hinzuzufügen:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --enable-autoscaling \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --region=COMPUTE_REGION

Dabei gilt:

  • POOL_NAME ist der Name des gewünschten Knotenpools.
  • CLUSTER_NAME: Der Name des Clusters, in dem der Knotenpool erstellt wird.
  • MIN_NODES: Die Mindestanzahl der Knoten, die automatisch für den angegebenen Knotenpool pro Zone skaliert werden sollen. Verwenden Sie --total-min-nodes, um die Mindestanzahl der Knoten für den gesamten Knotenpool in GKE-Version 1.24 und höher anzugeben. Die Flags --total-min-nodes und --total-max-nodes einerseits und die Flags --min-nodes und --max-nodes andererseits schließen sich gegenseitig aus.
  • MAX_NODES: Die maximale Anzahl der Knoten, die automatisch für den angegebenen Knotenpool pro Zone skaliert werden sollen. Verwenden Sie --total-max-nodes, um die maximale Anzahl der Knoten für den gesamten Knotenpool in GKE-Version 1.24 und höher anzugeben. Die Flags --total-min-nodes und --total-max-nodes einerseits und die Flags --min-nodes und --max-nodes andererseits schließen sich gegenseitig aus.
  • COMPUTE_REGION: die Compute Engine-Region für den neuen Cluster. Verwenden Sie für zonale Cluster --zone=COMPUTE_ZONE.

Beispiel: Knotenpool mit aktiviertem Autoscaling für Knoten hinzufügen

Mit dem folgenden Befehl wird ein Knotenpool mit Knoten-Autoscaling erstellt, wobei der Knotenpool auf maximal 5 Knoten und mindestens 1 Knoten skaliert wird:

gcloud container node-pools create my-node-pool \
    --cluster my-cluster \
    --enable-autoscaling \
    --min-nodes 1 --max-nodes 5 \
    --zone us-central1-c

Console

So fügen Sie einem vorhandenen Cluster einen Knotenpool mit Autoscaling hinzu:

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.

  3. Klicken Sie auf Knotenpool hinzufügen .

  4. Konfigurieren Sie den Knotenpool wie gewünscht.

  5. Klicken Sie unter Größe das Kästchen Autoscaling aktivieren an.

  6. Ändern Sie die Werte in den Feldern Mindestanzahl von Knoten und Maximale Anzahl von Knoten nach Bedarf.

  7. Klicken Sie auf Erstellen.

Autoscaling für vorhandene Knotenpools aktivieren

Sie können das Autoscaling für einen vorhandenen Knotenpool über die gcloud CLI oder die Google Cloud Console aktivieren.

gcloud

Mit dem folgenden Befehl können Sie die automatische Skalierung für einen vorhandenen Knotenpool aktivieren:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoscaling \
    --node-pool=POOL_NAME \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --region=COMPUTE_REGION

Dabei gilt:

  • CLUSTER_NAME: der Name des Clusters, der aktualisiert werden soll.
  • POOL_NAME ist der Name des gewünschten Knotenpools. Wenn Sie nur einen Knotenpool haben, geben Sie default-pool als Wert an.
  • MIN_NODES: Die Mindestanzahl der Knoten, die automatisch für den angegebenen Knotenpool pro Zone skaliert werden sollen. Verwenden Sie --total-min-nodes, um die Mindestanzahl der Knoten für den gesamten Knotenpool in GKE-Version 1.24 und höher anzugeben. Die Flags --total-min-nodes und --total-max-nodes einerseits und die Flags --min-nodes und --max-nodes andererseits schließen sich gegenseitig aus.
  • MAX_NODES: Die maximale Anzahl der Knoten, die automatisch für den angegebenen Knotenpool pro Zone skaliert werden sollen. Verwenden Sie --total-max-nodes, um die maximale Anzahl der Knoten für den gesamten Knotenpool in GKE-Version 1.24 und höher anzugeben. Die Flags --total-min-nodes und --total-max-nodes einerseits und die Flags --min-nodes und --max-nodes andererseits schließen sich gegenseitig aus.
  • COMPUTE_REGION: die Compute Engine-Region für den neuen Cluster. Verwenden Sie für zonale Cluster --zone=COMPUTE_ZONE.

Console

So aktivieren Sie Autoscaling für einen vorhandenen Knotenpool:

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.

  3. Klicken Sie auf den Tab Knoten.

  4. Klicken Sie unter Knotenpools auf den Namen des Knotenpools, den Sie ändern möchten, und klicken Sie dann auf Bearbeiten.

  5. Klicken Sie unter Größe das Kästchen Autoscaling aktivieren an.

  6. Ändern Sie die Werte in den Feldern Mindestanzahl von Knoten und Maximale Anzahl von Knoten nach Bedarf.

  7. Klicken Sie auf Speichern.

Prüfen, ob Autoscaling für den vorhandenen Knotenpool aktiviert ist

Sie prüfen, ob Ihr Cluster Autoscaling mit der Google Cloud CLI oder der Google Cloud Console verwendet.

gcloud

Beschreiben Sie die Knotenpools im Cluster:

gcloud container node-pools describe NODE_POOL_NAME --cluster=CLUSTER_NAME |grep autoscaling -A 1

Dabei gilt:

  • POOL_NAME ist der Name des neuen Knotenpools, den Sie auswählen können.
  • CLUSTER_NAME ist der Name des Clusters.

Wenn Autoscaling aktiviert ist, sieht die Ausgabe in etwa so aus:

autoscaling:
  enabled: true

Console

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.

  3. Klicken Sie auf den Tab Knoten.

  4. Prüfen Sie unter Knotenpools den Status Autoscalling des Knotenpools.

Knotenpool erstellen, der die Optimierung nicht verwendeter Reservierungen priorisiert

Sie können das Flag --location_policy=ANY verwenden, wenn Sie einen Knotenpool erstellen, um den Cluster Autoscaler anzuweisen, die Nutzung nicht verwendeter Reservierungen zu priorisieren:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location_policy=ANY

Dabei gilt:

  • POOL_NAME ist der Name des neuen Knotenpools, den Sie auswählen können.
  • CLUSTER_NAME ist der Name des Clusters.

Autoscaling für vorhandene Knotenpools deaktivieren

Sie können das Autoscaling für einen vorhandenen Knotenpool über die gcloud CLI oder die Google Cloud Console deaktivieren.

gcloud

Mit dem Flag --no-enable-autoscaling können Sie das Autoscaling für einen bestimmten Knotenpool deaktivieren:

gcloud container clusters update CLUSTER_NAME \
    --no-enable-autoscaling \
    --node-pool=POOL_NAME \
    --region=COMPUTE_REGION

Dabei gilt:

  • CLUSTER_NAME: der Name des Clusters, der aktualisiert werden soll.
  • POOL_NAME ist der Name des gewünschten Knotenpools.
  • COMPUTE_REGION: die Compute Engine-Region für den neuen Cluster. Verwenden Sie für zonale Cluster --zone=COMPUTE_ZONE.

Die Clustergröße wird auf die Größe des aktuellen standardmäßigen Clusterknotenpools festgelegt und kann manuell angepasst werden.

Console

So deaktivieren Sie das Autoscaling für einen bestimmten Knotenpool:

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.

  3. Klicken Sie auf den Tab Knoten.

  4. Klicken Sie unter Knotenpools auf den Namen des Knotenpools, den Sie ändern möchten, und klicken Sie dann auf Bearbeiten.

  5. Entfernen Sie unter Größe das Häkchen aus dem Kästchen Autoscaling aktivieren.

  6. Klicken Sie auf Speichern.

Größe eines Knotenpools ändern

Bei Clustern mit aktiviertem Autoscaling passt der Cluster Autoscaler die Knotenpools automatisch innerhalb der Grenzen an, die durch die Werte für die Mindestgröße (--min-nodes) und die Maximalgröße (--max-nodes) oder die minimale Gesamtgröße (--total-min-nodes) und maximale Gesamtgröße (--total-max-nodes) angegeben sind. Diese Flags schließen sich gegenseitig aus. Sie können die Größe eines Knotenpools durch Ändern dieser Werte nicht manuell anpassen.

Wenn Sie die Größe eines Knotenpools in Ihrem Cluster der aktiviertes Autoscaling hat manuell anpassen möchten, gehen Sie so vor:

  1. Deaktivieren Sie das Autoscaling für den Knotenpool.
  2. Passen Sie die Größe des Clusters manuell an.
  3. Aktivieren Sie das Autoscaling wieder und geben Sie die minimale und maximale Knotenpoolgröße an.

Pods auf bestimmten Knoten planen

Sie können je nach Anwendungsfall startup- oder status-Markierungen verwenden, um zu verhindern, dass Pods auf ausgewählten Knoten geplant werden.

Dieses Feature ist in GKE ab Version 1.28 verfügbar.

Startmarkierungen

Verwenden Sie startup-Markierungen, wenn ein Vorgang abgeschlossen sein muss, bevor Pods auf dem Knoten ausgeführt werden können. Beispielsweise sollten Pods erst ausgeführt werden, wenn die Treiber auf dem Knoten installiert sind.

Cluster Autoscaler behandelt Knoten, die mit startup-Markierungen markiert sind, als ungelesen, wird aber bei der vertikalen Skalierungslogik berücksichtigt, unter der Annahme, dass sie bald bereit sind.

Startmarkierungen werden als Markierungen mit dem Präfix startup-taint.cluster-autoscaler.kubernetes.io/ definiert.

Statusmarkierungen

Verwenden Sie status-Markierungen, wenn GKE einen bestimmten Knoten nicht zum Ausführen von Pods verwenden sollte.

Cluster Autoscaler behandelt Knoten, die mit status-Markierungen markiert sind, als bereit, ignoriert sie jedoch bei der vertikalen Skalierungslogik. Obwohl der markierte Knoten bereit ist, sollten keine Pods ausgeführt werden. Wenn die Pods mehr Ressourcen benötigen, skaliert GKE den Cluster vertikal und ignoriert die markierten Knoten.

Statusmarkierungen werden als Markierungen mit dem Präfix status-taint.cluster-autoscaler.kubernetes.io/ definiert.

Ignoriermarkierungen

Ignoriermarkierungen werden als Markierungen mit dem Präfix ignore-taint.cluster-autoscaler.kubernetes.io/ definiert.

Fehlerbehebung

Prüfen Sie, ob das auftretende Problem durch eine der Einschränkungen für das Cluster-Autoscaling verursacht wurde. Lesen Sie andernfalls die folgenden Informationen zur Fehlerbehebung für das Cluster-Autoscaling:

Cluster wird nicht herunterskaliert

Nachdem der Cluster ordnungsgemäß hochskaliert wurde und dann versucht wird, ihn herunterzuskalieren, bleiben nicht ausgelastete Knoten aktiviert und verhindern, dass der Cluster herunterskaliert wird. Dieser Fehler tritt aus einem der folgenden Gründe auf:

  • Einschränkungen können das Löschen eines Knotens durch das Cluster-Autoscaling verhindern. GKE verhindert möglicherweise das Löschen eines Knotens, wenn der Knoten einen Pod mit einer der folgenden Eigenschaften enthält:

    • Die Affinitäts- oder Anti-Affinitätsregeln des Pods verhindern eine Neuplanung.
    • In GKE 1.21 und früheren Versionen hat der Pod lokalen Speicher.
    • Der Pod wird nicht von einem Controller wie einem Deployment, StatefulSet, Job oder ReplicaSet verwaltet.

    Richten Sie die Planungs- und Bereinigungsregeln für das Cluster-Autoscaling auf Ihren Pods ein, um dieses Problem zu beheben. Weitere Informationen finden Sie unter Pod-Planung und -Unterbrechung.

  • System-Pods werden auf einem Knoten ausgeführt. Führen Sie die folgenden Schritte aus, um zu prüfen, ob die Knoten kube-system-Pods ausführen:

    1. Rufen Sie in der Google Cloud Console den Log-Explorer auf.

      Zum Log-Explorer

    2. Klicken Sie auf Query Builder.

    3. Verwenden Sie die folgende Abfrage, um alle Logs der Netzwerkrichtlinien zu finden:

        - resource.labels.location="CLUSTER_LOCATION"
        resource.labels.cluster_name="CLUSTER_NAME"
        logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fcluster-autoscaler-visibility"
        jsonPayload.noDecisionStatus.noScaleDown.nodes.node.mig.nodepool="NODE_POOL_NAME"
      

      Dabei gilt:

      • CLUSTER_LOCATION ist die Region, in der sich der Cluster befindet.
      • CLUSTER_NAME ist der Name Ihres Clusters.
      • PROJECT_ID ist die ID des Projekts, in dem der Cluster erstellt wird.
      • NODE_POOL_NAME ist der Name des Knotenpools.

        Wenn in Ihrem Knotenpool kube-system-Pods ausgeführt werden, enthält die Ausgabe Folgendes:

        "no.scale.down.node.pod.kube.system.unmovable"
        

    Sie haben zwei Möglichkeiten, dieses Problem zu beheben:

    • Fügen Sie PodDisruptionBudget für die kube-system-Pods hinzu. Weitere Informationen zum manuellen Hinzufügen eines PodDisruptionBudget für die kube-system-Pods finden Sie in den FAQs zum Kubernetes-Cluster-Autoscaling.
    • Verwenden Sie eine Kombination aus Knotenpoolmarkierungen und -toleranzen, um kube-system-Pods von Ihren Anwendungs-Pods zu trennen. Weitere Informationen finden Sie unter Automatische Knotenbereitstellung in GKE.

Knotenpoolgröße stimmt nicht überein

Das folgende Problem tritt auf, wenn Sie die Knotenpoolgröße konfigurieren:

  • Eine vorhandene Knotenpoolgröße ist kleiner als die Mindestanzahl an Knoten, die Sie für den Cluster angegeben haben.

In der folgenden Liste werden die gängigen möglichen Ursachen für dieses Verhalten beschrieben:

  • Sie haben eine neue Mindestanzahl von Knoten angegeben, während die vorhandene Anzahl höher ist.
  • Sie haben den Knotenpool oder die zugrunde liegende verwaltete Instanzgruppe manuell herunterskaliert. Bei diesem manuellen Vorgang ist die Anzahl der Knoten kleiner als die Mindestanzahl von Knoten.
  • Sie haben vorzeitig beendete Spot-VMs im Knotenpool bereitgestellt.
  • Der Pod hat einen lokalen Speicher und die Version der GKE-Steuerungsebene ist niedriger als 1.22. In GKE-Clustern mit Steuerungsebenenversion 1.22 oder höher blockieren Pods mit lokalem Speicher nicht mehr das Herunterskalieren.
  • Der Pod hat die Annotation "cluster-autoscaler.kubernetes.io/safe-to-evict": "false".

    Weitere Schritte zur Fehlerbehebung beim Herunterskalieren finden Sie unter Cluster wird nicht herunterskaliert.

  • Cluster Autoscaler berücksichtigt beim Herunterskalieren den Kulanzzeitraum für die Pod-Beendigung bis zu maximal zehn Minuten. Nach zehn Minuten wird die Beendigung von Pods erzwungen.

  • Möglicherweise ist die Größe eines Knotenpools kleiner als die von Ihnen für den Cluster angegebene Mindestanzahl von Knoten. Dieses Verhalten passiert, weil das Autoscaling die Mindestanzahl von Knotenparametern nur verwendet, wenn eine Herunterskalierung bestimmt werden muss. Dies sind die möglichen häufigsten Ursachen für dieses Verhalten.

Erhöhen Sie zur Behebung dieses Problems die Knotenpoolgröße manuell mindestens auf die Mindestanzahl an Knoten. Weitere Informationen finden Sie unter Größe eines Clusters manuell anpassen.

Weitere Informationen zum Cluster-Autoscaling und zur Vermeidung von Störungen finden Sie in den FAQs zum Kubernetes-Cluster-Autoscaling:

Nächste Schritte