Verwenden der Autoskalierung für Cluster in Azure Kubernetes Service (AKS)

Um mit den Anwendungsanforderungen in AKS Schritt zu halten, müssen Sie möglicherweise die Anzahl der Knoten anpassen, auf denen Ihre Arbeitslasten ausgeführt werden. Die Komponente für die automatische Clusterskalierung überwacht auf Pods in Ihrem Cluster, die aufgrund von Ressourceneinschränkungen nicht geplant werden können. Wenn die automatische Clusterskalierung Probleme erkennt, skaliert sie die Anzahl der Knoten im Knotenpool hoch, um den Anwendungsbedarf zu erfüllen. Sie überprüft außerdem regelmäßig Konten auf einen Mangel an ausgeführten Pods und skaliert bei Bedarf die Anzahl der Knoten herunter.

In diesem Artikel erfahren Sie, wie Sie die automatische Clusterskalierung in einem AKS-Cluster aktivieren und verwalten, der auf der Open-Source-Version von Kubernetes basiert.

Voraussetzungen

Für diesen Artikel ist mindestens die Azure CLI-Version 2.0.76 erforderlich. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

Verwenden der Autoskalierung in einem AKS-Cluster

Wichtig

Bei der automatischen Clusterskalierungsfunktion handelt es sich um eine Kubernetes-Komponente. Obwohl der AKS-Cluster eine VM-Skalierungsgruppe für die Knoten verwendet, sollten Sie die Einstellungen für die automatische Skalierung nicht manuell aktivieren oder bearbeiten. Lassen Sie die automatische Skalierungsfunktion für den Kubernetes-Cluster die erforderlichen Skalierungseinstellungen verwalten. Weitere Informationen finden Sie unter Kann ich die AKS-Ressourcen in der Knotenressourcengruppe ändern?

Aktivieren der Autoskalierung für Cluster in einem neuen Cluster

  1. Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe.

    az group create --name myResourceGroup --location eastus
    
  2. Erstellen Sie mithilfe des Befehls az aks create einen AKS-Cluster, und aktivieren und konfigurieren Sie die Autoskalierung für Cluster im Knotenpool für den Cluster, indem Sie den Parameter --enable-cluster-autoscaler verwenden und für einen Knoten --min-count und --max-count angeben. Der folgende Beispielbefehl erstellt einen Cluster mit einem einzelnen Knoten, der von einer VM-Skalierungsgruppe unterstützt wird. Zudem aktiviert er die Autoskalierung für Cluster und legt mindestens einen und maximal drei Knoten fest:

    az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3
    

    Die Erstellung des Clusters und die Konfiguration der Einstellungen für die Autoskalierung für Cluster dauert einige Minuten.

Aktivieren von Cluster Autoscaler für einen bestehenden Cluster

  • Aktualisieren Sie einen vorhandenen Cluster mithilfe des Befehls az aks update, und aktivieren und konfigurieren Sie die Autoskalierung für Cluster im Knotenpool, indem Sie den Parameter --enable-cluster-autoscaler verwenden und für einen Knoten --min-count und --max-count angeben. Der folgende Beispielbefehl aktualisiert einen vorhandenen AKS-Cluster, um die Autoskalierung für Cluster im Knotenpool für den Cluster zu aktivieren, und legt ein Minimum von einem sowie ein Maximum von drei Knoten fest:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3
    

    Die Aktualisierung des Clusters und die Konfiguration der Einstellungen für die Autoskalierung für Cluster dauert einige Minuten.

Deaktivieren der Autoskalierung für Cluster in einem Cluster

  • Deaktivieren Sie mithilfe des Befehls az aks update und des Parameters --disable-cluster-autoscaler die Autoskalierung für Cluster.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --disable-cluster-autoscaler
    

    Beim Deaktivieren der Autoskalierung für Cluster werden keine Knoten entfernt.

Hinweis

Nachdem Sie die Autoskalierung für Cluster deaktiviert haben, können Sie den Cluster mit dem Befehl az aks scale manuell skalieren. Wenn Sie die horizontale automatische Podskalierung verwenden, wird sie nach dem Deaktivieren der Autoskalierung für Cluster weiterhin ausgeführt, aber Pods können möglicherweise nicht geplant werden, wenn alle Knotenressourcen verwendet werden.

Erneutes Aktivieren der Autoskalierung für Cluster in einem Cluster

Sie können die Autoskalierung für Cluster für einen vorhandenen Cluster wieder aktivieren, indem Sie den Befehl az aks update unter Angabe der Parameter --enable-cluster-autoscaler, --min-count und --max-count verwenden.

Verwenden der Autoskalierung für Cluster in Knotenpools

Verwenden der Autoskalierung für Cluster in mehreren Knotenpools

Sie können die automatische Clusterskalierung mit mehreren Knotenpools verwenden und für jeden Knotenpool einzeln aktivieren sowie spezifische Regeln für die Autoskalierung übergeben.

  • Aktualisieren Sie mithilfe des Befehls az aks nodepool update die Einstellungen für einen vorhandenen Knotenpool.

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Deaktivieren der Autoskalierung für Cluster in einem Knotenpool

  • Deaktivieren Sie mithilfe des Befehls az aks nodepool update und des Parameters --disable-cluster-autoscaler die Autoskalierung für Cluster in einem Knotenpool.

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --disable-cluster-autoscaler
    

Erneutes Aktivieren der Autoskalierung für Cluster in einem Knotenpool

Sie können die automatische Clusterskalierung für einen vorhandenen Cluster erneut aktivieren, indem Sie den Befehl az aks nodepool update unter Angabe der Parameter --enable-cluster-autoscaler, --min-count und --max-count verwenden.

Hinweis

Wenn Sie planen, die automatische Clusterskalierung mit Knotenpools zu verwenden, die sich über mehrere Zonen erstrecken und zonenbezogene Planungsfunktionen wie die topologische Volumenplanung nutzen, empfiehlt es sich, einen Knotenpool pro Zone zu verwenden und --balance-similar-node-groups über das Autoskalierungsprofil zu aktivieren. Dadurch wird sichergestellt, dass die Autoskalierung erfolgreich hochskaliert werden kann und die Größe der Knotenpools ausgeglichen bleibt.

Aktualisieren der Einstellungen für die automatische Clusterskalierung

Wenn sich die Anforderungen Ihrer Anwendung ändern, müssen Sie möglicherweise die Knotenanzahl für die automatische Clusterskalierung anpassen, um effizient skalieren zu können.

  • Ändern Sie die Knotenanzahl mithilfe des Befehls az aks update, und aktualisieren Sie die Autoskalierung für Cluster mithilfe des Parameters --update-cluster-autoscaler und unter Angabe von --min-count und --max-count für Ihren aktualisierten Knoten.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Hinweis

Die Autoskalierung für Cluster erzwingt die Mindestanzahl in Fällen, in denen die tatsächliche Anzahl aufgrund externer Faktoren unter die Mindestanzahl fällt, etwa während einer Spot-Entfernung oder beim Ändern des Werts für die Mindestanzahl über die AKS-API.

Verwenden des Profils der Autoskalierung für Cluster

Sie können differenziertere Details der automatischen Clusterskalierung konfigurieren, indem Sie die Standardwerte im clusterweiten Autoskalierungsprofil ändern. Ein Ereignis zum zentralen Herunterskalieren tritt z. B. ein, wenn die Knoten nach 10 Minuten nicht ausgelastet sind. Wenn Sie Workloads haben, die alle 15 Minuten ausgeführt werden, möchten Sie vielleicht das Autoskalierungsprofil so ändern, dass es nach 15 oder 20 Minuten nicht ausgelastete Knoten herunterskaliert. Wenn Sie die Clusterautoskalierung aktivieren, wird ein Standardprofil verwendet, sofern Sie keine anderen Einstellungen angeben.

Wichtig

Das Profil der Autoskalierung für Cluster betrifft alle Knotenpools, die die Autoskalierung für Cluster verwenden. Sie können kein Autoskalierungsprofil pro Knotenpool festlegen. Wenn Sie das Profil festlegen, beginnen alle vorhandenen Knotenpools mit aktivierter Autoskalierung für Cluster sofort mit der Verwendung des Profils.

Profileinstellungen für die automatische Clusterskalierung

In der folgenden Tabelle sind die verfügbaren Einstellungen für Profile zur automatischen Clusterskalierung aufgeführt:

Einstellung Beschreibung Standardwert
scan-interval Häufigkeit der Neubewertung von Clustern für das Hoch- oder Herunterskalieren 10 Sekunden
scale-down-delay-after-add Gibt an, innerhalb welcher Zeitspanne nach dem Hochskalieren die Bewertung für das Herunterskalieren wieder aufgenommen wird. 10 Minuten
scale-down-delay-after-delete Gibt an, innerhalb welcher Zeitspanne nach dem Löschen eines Knotens die Bewertung für das Herunterskalieren wieder aufgenommen wird. scan-interval
scale-down-delay-after-failure Gibt an, innerhalb welcher Zeitspanne nach einem Fehler beim Herunterskalieren die Bewertung für das Herunterskalieren wieder aufgenommen wird. Drei Minuten
scale-down-unneeded-time Gibt an, wie lange ein Knoten nicht benötigt werden sollte, bevor er für ein Herunterskalieren in Frage kommt. 10 Minuten
scale-down-unready-time Gibt an, wie lange ein nicht Knoten mit dem Status „Nicht bereit“ nicht benötigt werden sollte, bevor er für ein Herunterskalieren in Frage kommt. 20 Minuten
ignore-daemonsets-utilization (Vorschau) Ob DaemonSet-Pods beim Berechnen der Ressourcenverwendung für das Herunterskalieren ignoriert werden false
daemonset-eviction-for-empty-nodes (Vorschau) Ob DaemonSet-Pods von leeren Knoten ordnungsgemäß beendet werden false
daemonset-eviction-for-occupied-nodes (Vorschau) Ob DaemonSet-Pods von nicht leeren Knoten ordnungsgemäß beendet werden true
scale-down-utilization-threshold Knotenauslastung, definiert als Summe der angeforderten Ressourcen geteilt durch die Kapazität, bei deren Unterschreitung ein Knoten für das Herunterskalieren in Betracht gezogen werden kann 0.5
max-graceful-termination-sec Maximale Anzahl von Sekunden, die die Clusterautoskalierung beim Versuch, einen Knoten herunterzuskalieren, auf die Beendigung des Pods wartet 600 Sekunden
balance-similar-node-groups Erkennt ähnliche Knotenpools und gleicht die Anzahl der Knoten zwischen ihnen aus. false
expander Typ der Knotenpoolerweiterung beim Hochskalieren Mögliche Werte: most-pods, random, least-waste und priority. random
skip-nodes-with-local-storage Bei true löscht die automatische Clusterskalierung keine Knoten mit Pods mit lokalem Speicher, z. B. „EmptyDir“ oder „HostPath“. false
skip-nodes-with-system-pods Bei true löscht die automatische Clusterskalierung keine Knoten mit Pods aus kube-system (außer bei DaemonSet oder Spiegelpods). true
max-empty-bulk-delete Maximale Anzahl leerer Knoten, die gleichzeitig gelöscht werden können. 10 Knoten
new-pod-scale-up-delay Für Szenarien wie die Burst-/Batchskalierung, bei denen die Zertifizierungsstelle nicht tätig werden soll, bevor der Kubernetes-Scheduler alle Pods planen konnte, können Sie wie folgt vorgehen: Weisen Sie die Zertifizierungsstelle an, nicht geplante Pods zu ignorieren, bis sie ein bestimmtes Alter erreicht haben. 0 Sekunden
max-total-unready-percentage Maximaler Prozentsatz der nicht fertigen Knoten im Cluster. Wenn dieser Prozentsatz überschritten wird, hält die Zertifizierungsstelle alle Vorgänge an. 45 %
max-node-provision-time Maximaler Zeitraum, den die Autoskalierung auf die Bereitstellung eines Knotens wartet. 15 Minuten
ok-total-unready-count Anzahl der zulässigen nicht fertigen Knoten, unabhängig von „max-total-unready-percentage“ drei Knoten

Festlegen des Profils der Autoskalierung für Cluster in einem neuen Cluster

  • Erstellen Sie mit dem Befehl az aks create einen AKS-Cluster, und legen Sie das Profil der Autoskalierung für Cluster mithilfe des Parameters cluster-autoscaler-profile fest.

    az aks create \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --node-count 1 \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3 \
      --cluster-autoscaler-profile scan-interval=30s
    

Festlegen des Profils der Autoskalierung für Cluster in einem vorhandenen Cluster

  • Legen Sie mit dem Befehl az aks update und dem Parameter cluster-autoscaler-profile die Autoskalierung für Cluster für einen vorhandenen Cluster fest. Das folgende Beispiel konfiguriert die Einstellung des Scanintervalls als 30s:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile scan-interval=30s
    

Konfigurieren des Profils für die automatische Clusterskalierung für aggressives Herunterskalieren

Hinweis

Ein aggressives Herunterskalieren wird für Cluster mit häufigen horizontalen Skalierungen in kurzen Intervallen nicht empfohlen, da dies unter diesen Umständen die Bereitstellungszeiten von Knoten verlängern könnte. Das Erhöhen von scale-down-delay-after-add kann unter diesen Umständen hilfreich sein, da der Knoten länger verfügbar ist und eingehende Workloads verarbeiten kann.

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --cluster-autoscaler-profile scan-interval=30s, scale-down-delay-after-add=0s,scale-down-delay-after-failure=30s,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Konfigurieren des Profils für die automatische Clusterskalierung für Burstworkloads

 az aks update \   
     --resource-group "myResourceGroup" \
     --name myAKSCluster \ 
     --cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Zurücksetzen des Profils für die Clusterautoskalierung auf die Standardwerte

  • Setzen Sie das Profil der Autoskalierung für Cluster mit dem Befehl az aks update zurück.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile ""
    

Abrufen von Protokollen und Status der automatischen Clusterskalierung

Sie können Protokolle und Statusaktualisierungen der Autoskalierung für Cluster abrufen, um Ereignisse der Autoskalierung zu diagnostizieren und zu debuggen. AKS verwaltet die automatische Clusterskalierung in Ihrem Namen und führt sie in der verwalteten Steuerungsebene aus. Sie können den Knoten auf Steuerungsebene aktivieren, um die Protokolle und Vorgänge der Autoskalierung für Cluster anzuzeigen.

  1. Richten Sie mithilfe der Anleitungen hier eine Regel für Ressourcenprotokolle ein, um Protokolle der automatischen Clusterskalierung an Log Analytics zu pushen. Stellen Sie sicher, dass Sie das Kontrollkästchen für cluster-autoscaler aktivieren, wenn Sie Optionen für Protokolle auswählen.

  2. Wählen Sie in Ihrem Cluster den Abschnitt Protokoll aus.

  3. Geben Sie die folgende Beispielabfrage in Log Analytics ein:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    Solange Protokolle zum Abrufen vorhanden sind, sollten Protokolle ähnlich den folgenden angezeigt werden:

    Screenshot: Log Analytics-Protokolle.

  4. Anzeigen von Ereignissen mit nicht ausgelösten Hochskalierungen der automatischen Clusterskalierung mithilfe der Befehlszeilenschnittstelle

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. Anzeigen von Warnungsereignissen für die automatische Clusterskalierung mithilfe der Befehlszeilenschnittstelle

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. Die Autoskalierung für Cluster schreibt auch den Integritätsstatus in eine configmap namens cluster-autoscaler-status. Sie können diese Protokolle mit dem folgenden kubectl-Befehl abrufen:

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

Weitere Informationen finden Sie in den Häufig gestellten Fragen zum Kubernetes/autoscaler-Projekt auf GitHub.

Metriken der automatischen Clusterskalierung

Sie können Metriken auf Steuerungsebene (Vorschau) aktivieren, um die Protokolle und Vorgänge der automatischen Clusterskalierung mit dem Add-On für den verwalteten Azure Monitor-Dienst für Prometheus anzuzeigen.

Nächste Schritte

In diesem Artikel wurde gezeigt, wie Sie die Anzahl von AKS-Knoten automatisch skalieren können. Außerdem können Sie mit der horizontalen automatischen Podskalierung automatisch die Anzahl von Pods anpassen, auf denen Ihre Anwendung ausgeführt wird. Die Schritte zum Verwenden der horizontalen automatischen Podskalierung finden Sie unter Skalieren von Anwendungen in Azure Kubernetes Service (AKS).

Weitere Hilfe zur Verbesserung der Clusterressourcenauslastung und zum Freigeben von CPU und Arbeitsspeicher für andere Pods finden Sie unter Vertical Pod Autoscaler.