In diesem Dokument wird das Autoscaling für einen Nutzercluster in Google Distributed Cloud beschrieben.
Das Cluster-Autoscaling vergrößert oder verkleinert die Anzahl der Knoten in einem Knotenpool entsprechend den Anforderungen Ihrer Arbeitslasten.
Hinweise
Weitere Informationen zu den Einschränkungen des Cluster-Autoscaler
Der Cluster-Autoscaler geht von folgenden Annahmen aus:
Alle replizierten Pods auf einem anderen Knoten können neu gestartet werden. Dies kann zu einer kurzen Störung führen. Wenn Ihre Dienste Unterbrechungen nicht tolerieren, empfehlen wir nicht die Verwendung des Cluster-Autoscaler.
Nutzer oder Administratoren verwalten Knoten nicht manuell. Wenn das Autoscaling für einen Knotenpool aktiviert ist, können Sie das Feld
replicas
des Knotenpools nicht überschreiben.Alle Knoten in einem einzelnen Knotenpool haben dieselben Labels.
So funktioniert Cluster-Autoscaling
Der Cluster-Autoscaler wird jeweils für einen Knotenpool aktiviert. Wenn Sie das Autoscaling für einen Knotenpool aktivieren, geben Sie eine minimale und maximale Anzahl von Knoten für den Pool an.
Der Cluster-Autoscaler vergrößert bzw. verkleinert die Anzahl der Knoten im Pool automatisch entsprechend den Ressourcenanforderungen (statt der tatsächlichen Ressourcennutzung) der Pods, die auf den Knoten 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 Pool vorhanden sind, fügt der Cluster-Autoscaler Knoten hinzu, bis die maximale Anzahl erreicht ist.
Wenn Knoten nicht ausgelastet sind und alle Pods auch mit weniger Knoten im Pool geplant werden können, entfernt der Cluster-Autoscaler Knoten bis zur angegebenen Mindestanzahl. Wenn ein Knoten nicht ordnungsgemäß beendet werden kann, wird er zwangsweise beendet und das angehängte, von Kubernetes verwaltete Laufwerk sicher getrennt.
Wenn Ihre Pods zu wenige Ressourcen angefordert haben oder möglicherweise unzureichende Standardwerte nicht geändert wurden und Ihren Knoten Ressourcen fehlen, wird dies vom Cluster-Autoscaler nicht korrigiert. Sie können dafür sorgen, dass der Cluster-Autoscaler so präzise wie möglich funktioniert, wenn Sie explizite Ressourcenanforderungen für Ihre Arbeitslasten stellen.
Für einen einzelnen Knotenpool muss minReplicas
≥ 1 sein. Die Summe der unmarkierten Nutzerclusterknoten muss jedoch mindestens 3 sein. Dies bedeutet, dass die Summe der minReplicas
-Werte für alle automatisch skalierten Knotenpools plus die Summe der replicas
-Werte für alle nicht automatisch skalierten Knotenpools mindestens 3 sein muss.
Der Cluster-Autoscaler berücksichtigt die relativen Kosten jedes Instanztyps in den verschiedenen Knotenpools und versucht, den Knotenpool so zu erweitern, dass geringstmögliche Verschwendung verursacht wird.
Nutzercluster mit Autoscaling erstellen
Wenn Sie einen Nutzercluster mit aktiviertem Autoscaling für einen Knotenpool erstellen möchten, füllen Sie den Abschnitt autoscaling
für den Knotenpool in der Nutzercluster-Konfigurationsdatei aus. Beispiel:
nodePools: - name: pool‐1 … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
Die Konfiguration oben erstellt einen Knotenpool mit drei Replikaten und wendet Autoscaling mit einer Knotenpool-Mindestgröße von 1 und einer maximalen Knotenpoolgröße von 5 an.
Der minReplicas
-Wert muss ≥ 1 sein. Ein Knotenpool kann nicht auf null Knoten herunterskaliert werden.
Knotenpool mit Autoscaling hinzufügen
So fügen Sie einem vorhandenen Cluster einen Knotenpool mit Autoscaling hinzu:
Bearbeiten Sie die Nutzercluster-Konfigurationsdatei, um einen neuen Knotenpool hinzuzufügen, und fügen Sie einen
autoscaling
-Abschnitt für den Pool ein. Legen Sie die Werte fürreplicas
,minReplicas
undmaxReplicas
nach Bedarf fest. Beispiel:nodePools: - name: my-new-node-pool … replicas: 3 ... autoscaling: minReplicas: 2 maxReplicas: 6
Aktualisieren Sie den Cluster:
gkectl update cluster --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Autoscaling für einen vorhandenen Knotenpool aktivieren
So aktivieren Sie Autoscaling für einen Knotenpool in einem vorhandenen Cluster:
Bearbeiten Sie einen bestimmten
nodePool
in der Nutzercluster-Konfigurationsdatei und fügen Sie den Abschnittautoscaling
ein. Legen Sie die Werte fürminReplicas
undmaxReplicas
nach Bedarf fest.nodePools: - name: my-existing-node-pool … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
Aktualisieren Sie den Cluster:
gkectl update cluster --config USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Autoscaling für vorhandene Knotenpools deaktivieren
So deaktivieren Sie das Autoscaling für einen bestimmten Knotenpool:
Bearbeiten Sie die Nutzercluster-Konfigurationsdatei und entfernen Sie den Abschnitt
autoscaling
für diesen Knotenpool.Führen Sie
gkectl update cluster
aus.
Verhalten des Cluster-Autoscalings prüfen
Sie können auf verschiedene Weise ermitteln, was das Cluster-Autoscaling tut.
Cluster-Autoscaling-Logs prüfen
Suchen Sie zuerst nach dem Namen des Cluster-Autoscaling-Pods.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler
Prüfen Sie die Logs des Cluster-Autoscaling-Pods:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler -n USER_CLUSTER_NAME
Ersetzen Sie POD_NAME durch den Namen des Cluster-Autoscaling-Pods.
Konfigurationsplan prüfen
Cluster Autoscaler veröffentlicht die Konfigurationszuordnung kube-system/cluster-autoscaler-status
.
So rufen Sie die Konfigurationszuordnung auf:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml
Cluster-Autoscaling-Ereignisse prüfen
Hier können Sie Cluster-Autoscaling-Ereignisse prüfen:
- Auf Pods (insbesondere diejenigen, die nicht geplant werden können oder sich auf nicht ausgelasteten Knoten befinden)
- Auf Knoten
- Auf der Konfigurationszuordnung
kube-system/cluster-autoscaler-status
.
Beschränkungen
Für den Cluster-Autoscaler gelten die folgenden Einschränkungen:
Die benutzerdefinierte Planung mit geänderten Filtern wird nicht unterstützt.
Knoten werden nicht hochskaliert, wenn Pods einen
PriorityClass
-Wert unter-10
haben. Weitere Informationen finden Sie unter Wie funktioniert der Cluster-Autoscaler mit Pod-Priorität und vorzeitigem Beenden?.Das Autoscaling für Windows-Knotenpools wird nicht unterstützt.
Fehlerbehebung
Manchmal kann Cluster Autoscaler nicht vollständig herunterskalieren. Dadurch bleibt nach dem Herunterskalieren ein zusätzlicher Pod übrig. Dies kann vorkommen, wenn erforderliche System-Pods auf verschiedenen Knoten geplant sind, da es keinen Trigger gibt, der diese Pods auf einen anderen Knoten verschiebt. Siehe Ich habe einige Knoten mit geringer Auslastung, die jedoch nicht herunterskaliert werden. Warum?. Sie können ein Budget für Pod-Störungen konfigurieren, um diese Einschränkung zu umgehen.
Wenn Sie Probleme mit dem Herunterskalieren des Clusters haben, lesen Sie die Informationen unter Pod-Planung und -Unterbrechung. Möglicherweise müssen Sie den Pods
kube-system
PodDisruptionBudget
hinzufügen. Weitere Informationen zum manuellen Hinzufügen einesPodDisruptionBudget
für diekube-system
-Pods finden Sie in den FAQ zu Kubernetes-Cluster-Autoscaling.Cluster Autoscaler berücksichtigt beim Herunterskalieren die in Pods festgelegten Planungs- und Bereinigungsregeln. Diese Einschränkungen können das Löschen eines Knotens durch Cluster Autoscaler verhindern. Ein Knoten wird unter Umständen nicht gelöscht, wenn er einen Pod mit einer der folgenden Bedingungen enthält:
Die Affinitäts- oder Anti-Affinitätsregeln des Pods verhindern eine Neuplanung.
Der Pod hat einen lokalen Speicher.
Der Pod wird nicht von einem Controller, z. B. Deployment, StatefulSet, Job oder ReplicaSet, verwaltet.
Der Pod befindet sich im Namespace „kube-system“ und hat kein PodDisruptionBudget.
Auch das PodDisruptionBudget einer Anwendung kann das Autoscaling verhindern. Wenn durch das Löschen von Knoten das Budget überschritten wird, erfolgt kein Herunterskalieren des Clusters.
Weitere Informationen
Weitere Informationen zu Cluster Autoscaler und zur Vermeidung von Störungen finden Sie in den FAQ zu Kubernetes-Cluster Autoscaler:
- Wie funktioniert das Herunterskalieren?
- Unterstützt der Cluster-Autoscaler PodDisruptionBudget beim Herunterskalieren?
- Welche Arten von Pods können den Cluster-Autoscaler am Entfernen von Knoten hindern?