Cluster-Autoscaling aktivieren

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:

  1. 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ü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 einen bestimmten nodePool in der Nutzercluster-Konfigurationsdatei und fügen Sie den Abschnitt autoscaling ein. Legen Sie die Werte für minReplicas und maxReplicas nach Bedarf 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 Nutzercluster-Konfigurationsdatei 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 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:

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:

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