Cluster-Autoscaling aktivieren

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:

  1. 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ür replicas, minReplicas und maxReplicas nach Bedarf fest. Beispiel:

    nodePools:
    - name: my-new-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 2
        maxReplicas: 6
    
  2. 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:

  1. Bearbeiten Sie eine bestimmte nodePool in der Konfigurationsdatei des Nutzerclusters und fügen Sie den Abschnitt autoscaling hinzu. Legen Sie die Werte für minReplicas und maxReplicas wie gewünscht fest.

    nodePools:
    - name: my-existing-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 1
        maxReplicas: 5
    
  2. 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:

  1. Bearbeiten Sie die Konfigurationsdatei des Nutzerclusters und entfernen Sie den Abschnitt autoscaling für diesen Knotenpool.

  2. 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:

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 Podskube-system PodDisruptionBudget hinzufügen. Weitere Informationen zum manuellen Hinzufügen eines PodDisruptionBudget für die kube-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:

  • 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: