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.

Bevor Sie beginnen

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.

Den Cluster-Autoscaler in einem AKS-Cluster verwenden

Wichtig

Bei der automatischen Clusterskalierungsfunktion handelt es sich um eine Kubernetes-Komponente. Obwohl der AKS-Cluster für die Knoten ein VM-Skalierungsset verwendet, sollten Sie die Einstellungen für die automatische Skalierung des Skalierungssets 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?

Cluster-Autoscaler in einem neuen Cluster aktivieren

  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 \
    --generate-ssh-keys
    

    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.

Cluster-Autoscaler in einem Cluster deaktivieren

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 des Cluster-Autoscalers 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.

Cluster Autoscaler auf Knotenpools verwenden

Den Cluster-Autoscaler für mehrere Knotenpools verwenden

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

Cluster-Autoscaler in einem Knotenpool deaktivieren

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

Cluster-Autoscaler für einen Knotenpool wieder aktivieren

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 Sie das Profil für die Cluster-Autoskalierung

Sie können differenziertere Details der automatischen Clusterskalierung konfigurieren, indem Sie die Standardwerte im clusterweiten Autoskalierungsprofil ändern. Beispielsweise tritt ein Herunterskalierungsereignis ein, nachdem Knoten 10 Minuten lang unterausgelastet waren. 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 Knoten im Status „Nicht bereit“ nicht benötigt werden muss, bevor er für ein Herunterskalieren infrage kommt. 20 Minuten
ignore-daemonsets-utilization Ob DaemonSet-Pods bei der Berechnung der Ressourcenauslastung beim Herunterskalieren ignoriert werden false
daemonset-eviction-for-empty-nodes Ob DaemonSet-Pods von leeren Knoten ordnungsgemäß beendet werden false
daemonset-eviction-for-occupied-nodes Ob DaemonSet-Pods von nicht leeren Knoten ordnungsgemäß beendet werden true
scale-down-utilization-threshold Der Maximalwert zwischen der Summe der CPU-Anforderungen und der Summe der Speicheranforderungen aller auf dem Knoten laufenden Pods, geteilt durch die entsprechende zuweisbare Ressource des Knotens, unterhalb dessen ein Knoten für das Herunterskalieren berücksichtigt 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 des Knotenpools, den Expander beim Hochskalieren verwendet. 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-/Batch-Skalierung, in denen CA nicht aktiv werden soll, bevor der Kubernetes-Scheduler alle Pods einplanen konnte, können Sie CA anweisen, nicht eingeplante Pods zu ignorieren, bevor sie ein bestimmtes Alter erreichen. 0 Sekunden
max-total-unready-percentage Maximaler Prozentsatz der nicht fertigen Knoten im Cluster. Sobald dieser Prozentsatz überschritten wird, stellt die CA den Betrieb ein. 45 %
max-node-provision-time Maximale Zeit, die der Autoscaler wartet, bis ein Knoten bereitgestellt wird. 15 Minuten
ok-total-unready-count Anzahl der zulässigen nicht fertigen Knoten, unabhängig von „max-total-unready-percentage“ drei Knoten

Hinweis

Die Parameter ignore-daemonsets-utilization, daemonset-eviction-for-empty-nodes und daemonset-eviction-for-occupied-nodes sind GA aus API Version 2024-05-01.

Legen Sie das Profil des Clusterautoscalers für einen neuen Cluster fest.

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 \
    --generate-ssh-keys

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

Profil des Cluster-Autoscalers für aggressives Herunterskalieren konfigurieren

Hinweis

Ein aggressives Herunterskalieren wird für Cluster, die innerhalb kurzer Abstände häufig hoch- und herunterskalieren, nicht empfohlen, da dies unter diesen Umständen zu längeren Bereitstellungszeiten für Knoten führen 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=0m,scale-down-delay-after-failure=1m,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

Autoscaler-Profil für den Cluster für stark schwankende Workloads konfigurieren

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

Cluster-Autoscaler-Protokolle und -Status abrufen

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 die Protokollierung der Steuerungsebene aktivieren, um die Protokolle und Vorgänge aus der Cluster-Autoskalierung 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"
    
  4. Ereignisse, bei denen keine Hochskalierung durch den Cluster-Autoscaler ausgelöst wurde, in der Befehlszeilenschnittstelle anzeigen.

    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 zur 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.

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. Anweisungen zur Verwendung der horizontalen Pod-Autoskalierung finden Sie unter Skalieren von Anwendungen in AKS.

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