In diesem Dokument wird das Autoscaling für einen Nutzercluster in GKE on VMware beschrieben.
Cluster-Autoscaling erhöht oder verringert die Anzahl der Knoten in einem Knotenpool entsprechend den Anforderungen Ihrer Arbeitslasten.
Hinweise
Informieren Sie sich über die Einschränkungen von Cluster-Autoscaling.
Für Cluster-Autoscaling gelten folgende Annahmen:
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-Autoscaling funktioniert auf Knotenpoolbasis. Wenn Sie das Autoscaling für einen Knotenpool aktivieren, geben Sie eine Mindest- und eine Höchstzahl von Knoten für den Pool an.
Cluster-Autoscaling erhöht oder verringert die Anzahl der Knoten im Pool automatisch anhand der Ressourcenanfragen (anstelle der tatsächlichen Ressourcenauslastung) der Pods, die auf den Knoten ausgeführt werden. Es 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önnen, entfernt das Cluster-Autoscaling Knoten bis zum angegebenen Minimum. Wenn ein Knoten nicht ordnungsgemäß per Drain beendet werden kann, wird der Knoten zwangsweise beendet 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, wird diese Situation durch Cluster-Autoscaling nicht korrigiert. Sie können dafür sorgen, dass Cluster-Autoscaling korrekt funktioniert, indem Sie explizite Ressourcenanfragen für alle 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-Autoscaling berücksichtigt die relativen Kosten der Instanztypen in den verschiedenen Knotenpools und versucht, den Knotenpool so zu erweitern, dass die Kosten möglichst wenig unnötig genutzt werden.
Nutzercluster mit Autoscaling erstellen
Füllen Sie zum Erstellen eines Nutzerclusters mit aktiviertem Autoscaling für einen Knotenpool den Abschnitt autoscaling
für den Knotenpool in der Konfigurationsdatei des Nutzerclusters aus. Beispiel:
nodePools: - name: pool‐1 … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
Die vorherige Konfiguration erstellt einen Knotenpool mit drei Replikaten und wendet das Autoscaling mit der minimalen Knotenpoolgröße 1 und der maximalen Knotenpoolgröße 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:
Fügen Sie der Konfigurationsdatei des Nutzerclusters einen neuen Knotenpool hinzu und fügen Sie einen
autoscaling
-Abschnitt für den Pool hinzu. 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 eine bestimmte
nodePool
in der Konfigurationsdatei des Nutzerclusters und fügen Sie den Abschnittautoscaling
hinzu. Legen Sie die Werte fürminReplicas
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 den 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 Konfigurationsübersicht 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 für
PriorityClass
der Wert unter-10
liegt. Weitere Informationen finden Sie unter Wie funktioniert Cluster Autoscaler mit Pod-Priorität und Pod-Priorität?.Die automatische Skalierung wird für Windows-Knotenpools 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 Replikatset verwaltet.
Der Pod befindet sich im Namespace „kube-system“ und hat kein PodDisruptionBudget.
Das PodDisruptionBudget einer Anwendung verhindert möglicherweise das Autoscaling. Wenn durch das Löschen von Knoten 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-Autoscaling daran hindern, einen Knoten zu entfernen?