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:
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie auf add_box Erstellen.
Konfigurieren Sie den Cluster wie gewünscht.
Klicken Sie im Navigationsbereich unter Knotenpools auf default-pool.
Klicken Sie das Kästchen Autoscaling aktivieren an.
Ändern Sie die Werte in den Feldern Mindestanzahl von Knoten und Maximale Anzahl von Knoten nach Bedarf.
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:
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie auf Knotenpool hinzufügen add_box.
Konfigurieren Sie den Knotenpool wie gewünscht.
Klicken Sie unter Größe das Kästchen Autoscaling aktivieren an.
Ändern Sie die Werte in den Feldern Mindestanzahl von Knoten und Maximale Anzahl von Knoten nach Bedarf.
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 Siedefault-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:
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie auf den Tab Knoten.
Klicken Sie unter Knotenpools auf den Namen des Knotenpools, den Sie ändern möchten, und klicken Sie dann auf edit Bearbeiten.
Klicken Sie unter Größe das Kästchen Autoscaling aktivieren an.
Ändern Sie die Werte in den Feldern Mindestanzahl von Knoten und Maximale Anzahl von Knoten nach Bedarf.
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
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie auf den Tab Knoten.
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:
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie auf den Tab Knoten.
Klicken Sie unter Knotenpools auf den Namen des Knotenpools, den Sie ändern möchten, und klicken Sie dann auf edit Bearbeiten.
Entfernen Sie unter Größe das Häkchen aus dem Kästchen Autoscaling aktivieren.
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:
- Deaktivieren Sie das Autoscaling für den Knotenpool.
- Passen Sie die Größe des Clusters manuell an.
- 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:Rufen Sie in der Google Cloud Console den Log-Explorer auf.
Klicken Sie auf Query Builder.
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 diekube-system
-Pods hinzu. Weitere Informationen zum manuellen Hinzufügen einesPodDisruptionBudget
für diekube-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:
- Wie funktioniert das Herunterskalieren?
- Unterstützt das Cluster-Autoscaling PodDisruptionBudget beim Herunterskalieren?
- Welche Arten von Pods können das Cluster-Autoscaling am Entfernen von Knoten hindern?