Cluster-Autoscaling aktivieren

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:

  1. 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ür replicas, minReplicas und maxReplicas wie gewünscht 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 vorhandene Knotenpools 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 ein. Legen Sie die Werte von 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 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:

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