In diesem Dokument wird das Autoscaling für einen Nutzercluster in Google Distributed Cloud beschrieben.
Durch Cluster-Autoscaling wird die Anzahl der Knoten in einem Knotenpool entsprechend den Anforderungen Ihrer Arbeitslasten erhöht oder verringert.
Hinweise
Informieren Sie sich über die Einschränkungen des Cluster-Autoscalings.
Cluster-Autoscaling 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, raten wir von der Verwendung des Cluster-Autoscalings ab.
Nutzer oder Administratoren verwalten Knoten nicht manuell. Wenn 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
Cluster Autoscaler arbeitet auf Knotenpoolbasis. Wenn Sie Autoscaling für einen Knotenpool aktivieren, geben Sie eine minimale und maximale Anzahl von Knoten für den Pool an.
Cluster-Autoscaling erhöht oder verringert die Anzahl der Knoten im Pool automatisch basierend auf den Ressourcenanfragen (statt der tatsächlichen Ressourcennutzung) der Pods, die auf den Knoten ausgeführt werden. Er prüft regelmäßig den Status von Pods und Knoten und ergreift Maßnahmen:
Wenn Pods nicht planbar sind, weil nicht genügend Knoten im Pool vorhanden sind, fügt das Cluster-Autoscaling Knoten bis zum angegebenen Maximum hinzu.
Wenn Knoten nicht ausgelastet sind und alle Pods mit weniger Knoten im Pool geplant werden könnten, entfernt Cluster-Autoscaling Knoten bis zum angegebenen Minimum. Wenn ein Knoten ordnungsgemäß per Drain beendet werden kann, wird die Beendigung des Knotens erzwungen und das angehängte, von Kubernetes verwaltete Laufwerk wird sicher getrennt.
Wenn Ihre Pods zu wenige Ressourcen angefordert (oder die möglicherweise unzureichenden Standardeinstellungen nicht geändert haben) und Ihren Knoten Ressourcen fehlen, korrigiert das Cluster-Autoscaling diese Situation nicht. Sie können dafür sorgen, dass Cluster-Autoscaling korrekt funktioniert, indem Sie explizite Ressourcenanfragen für alle 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.
Cluster Autoscaler berücksichtigt die relativen Kosten der Instanztypen in den verschiedenen Knotenpools und versucht, den Knotenpool so zu erweitern, dass möglichst wenig verschwendet wird.
Nutzercluster mit Autoscaling erstellen
Wenn Sie einen Nutzercluster mit aktiviertem Autoscaling für einen Knotenpool erstellen möchten, füllen Sie in der Konfigurationsdatei des Nutzerclusters den Abschnitt autoscaling
für den Knotenpool aus. Beispiel:
nodePools: - name: pool‐1 … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
Bei der vorherigen Konfiguration wird ein Knotenpool mit drei Replikaten erstellt und Autoscaling mit der minimalen Knotenpoolgröße 1 und der maximalen Knotenpoolgröße 5 angewendet.
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:
Fügen Sie der Nutzercluster-Konfigurationsdatei einen neuen Knotenpool hinzu und fügen Sie einen
autoscaling
-Abschnitt für den Pool ein. Legen Sie die Werte fürreplicas
,minReplicas
undmaxReplicas
wie gewünscht 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 vorhandene Knotenpools aktivieren
So aktivieren Sie Autoscaling für einen Knotenpool in einem vorhandenen Cluster:
Bearbeiten Sie eine bestimmte
nodePool
in der Konfigurationsdatei des Nutzerclusters und fügen Sie den Abschnittautoscaling
ein. Legen Sie die Werte vonminReplicas
undmaxReplicas
wie gewünscht 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 Konfigurationsdatei des Nutzerclusters 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 im Cluster-Autoscaling-Pod:
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 Cluster-Autoscaling gelten die folgenden Einschränkungen:
Die benutzerdefinierte Planung mit geänderten Filtern wird nicht unterstützt.
Knoten werden nicht hochskaliert, wenn der
PriorityClass
-Wert von Pods unter-10
liegt. Weitere Informationen finden Sie unter Wie funktioniert Cluster Autoscaler mit Pod-Priorität und Pod-Präemption?.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 wie einem Deployment, StatefulSet, Job oder ReplicaSet verwaltet.
Der Pod befindet sich im Namespace „kube-system“ und hat kein PodDisruptionBudget
Das PodDisruptionBudget einer Anwendung kann die automatische Skalierung verhindern. Wenn das Löschen von Knoten dazu führen würde, dass das Budget überschritten würde, wird der Cluster nicht herunterskaliert.
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?
- Funktioniert Cluster-Autoscaling mit PodDisruptionBudget beim Herunterskalieren?
- Welche Arten von Pods können Cluster Autoscaler am Entfernen eines Knotens hindern?