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
Erstellen Sie mit dem Befehl
az group create
eine Ressourcengruppe.az group create --name myResourceGroup --location eastus
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.
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 |
Ob DaemonSet-Pods beim Berechnen der Ressourcenverwendung für das 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 |
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 |
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. Wenn Sie die CLI zum Aktualisieren dieser Flags verwenden, stellen Sie sicher, dass Sie Version 2.63 oder höher verwenden.
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 Parameterscluster-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 Parametercluster-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=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
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.
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.Wählen Sie in Ihrem Cluster den Abschnitt Protokoll aus.
Geben Sie die folgende Beispielabfrage in Log Analytics ein:
AzureDiagnostics | where Category == "cluster-autoscaler"
Zeigen Sie Ereignisse mit nicht ausgelösten Hochskalierungen der automatischen Clusterskalierung mithilfe der Befehlszeilenschnittstelle an.
kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
Zeigen Sie Warnungsereignisse für die automatische Clusterskalierung mithilfe der Befehlszeilenschnittstelle an.
kubectl get events --field-selector source=cluster-autoscaler,type=Warning
Die Autoskalierung für Cluster schreibt auch den Integritätsstatus in eine
configmap
namenscluster-autoscaler-status
. Sie können diese Protokolle mit dem folgendenkubectl
-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.
Azure Kubernetes Service