Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, wie Sie Ihre Knoten mit Bin Packing verarbeiten können, um die Knotenauslastung für Azure Kubernetes Service (AKS)-Cluster mittels des Plug-Ins für die In-Struktur-Planung, NodeResourcesFit, zu verbessern. Der standardmäßige AKS-Scheduler wird im Modus NodeResourcesFit:LeastAllocated ausgeführt, der Knoten mit geringerer Auslastung bei Planungspods priorisiert. Mit konfigurierbaren Scheduler-Profilen auf AKS können Sie dieses Standardverhalten ändern und die Konfiguration optimieren, um Knoten mit höherer Auslastung zu priorisieren. In dieser Dokumentation werden drei verschiedene benutzerdefinierte Schedulerprofile behandelt, während die Best Practice-Empfehlung hervorgehoben wird, die Auslastung zu verbessern, während Knoten-Hotspots reduziert werden.
Node Bin-Packing ist eine Scheduling-Strategie, die die Ressourcenauslastung maximiert, indem sie die Pod-Dichte auf den Knoten erhöht, anstatt Pods über einen Knoten-Pool zu verteilen oder Knoten vorzeitig automatisch zu skalieren. Bin Packing hilft, die Ressourcenverschwendung zu minimieren, und kann die Betriebskosten für Leerlaufknoten oder nicht ausgelastete Knoten reduzieren. Die Verbesserung der Knotenauslastung ist wichtig, da Daten zeigen, dass CPU und Arbeitsspeicher häufig überfordert Ressourcen sind. Da die GPU-Akzeptanz wächst, wird die effiziente Nutzung von Beschleunigern aufgrund ihrer relativen Knappheit und Kosten ebenso wichtig.
Einschränkungen
- AKS ermöglicht derzeit keine Verwaltung der Bereitstellung von Planern von Drittanbietern oder strukturexterner Planungs-Plug-Ins.
- AKS unterstützt keine In-Tree-Scheduling-Plug-Ins für den
aks-systemScheduler. Diese Einschränkung ist vorhanden, um unerwartete Änderungen an AKS-Add-Ons zu verhindern, die auf Ihrem Cluster aktiviert sind. Zusätzlich können Sie keinprofilemit dem Namenaks-systemdefinieren.
Voraussetzungen
- Die Azure CLI-Version
2.76.0oder höher. Führen Sieaz --versionaus, um die Version zu finden, und führen Sieaz upgradeaus, um ein Upgrade für die Version durchzuführen. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren. - Kubernetes-Version
1.33oder höher, die auf Ihrem AKS-Cluster ausgeführt wird. - Die
aks-previewAzure CLI-Erweiterung, Version18.0.0b27oder höher. - Registrieren Sie das
UserDefinedSchedulerConfigurationPreviewFeature-Flag in Ihrem Azure-Abonnement.
Aktivieren der Zeitplanprofilkonfiguration in einem AKS-Cluster
Sie können die Zeitplanprofilkonfiguration für einen neuen oder vorhandenen AKS-Cluster aktivieren.
Erstellen Sie einen AKS-Cluster mit aktivierter Planerprofilkonfiguration mithilfe des
az aks createBefehls mit der--enable-upstream-kubescheduler-user-configurationKennzeichnung.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<aks-cluster-name> # Create an AKS cluster with schedule profile configuration enabled az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-upstream-kubescheduler-user-configuration \ --generate-ssh-keysSobald der Erstellungsprozess abgeschlossen ist, stellen Sie mithilfe des Befehls eine Verbindung mit dem
az aks get-credentialsCluster her.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Überprüfung der Installation des Scheduler-Controllers
Überprüfen Sie nach dem Aktivieren des Features auf Ihrem AKS-Cluster, ob die benutzerdefinierte Ressourcendefinition (CRD) des Planercontrollers mithilfe des
kubectl getBefehls erfolgreich installiert wurde.kubectl get crd schedulerconfigurations.aks.azure.comHinweis
Dieser Befehl wird nicht erfolgreich ausgeführt, wenn das Feature im vorherigen Abschnitt nicht erfolgreich aktiviert wurde.
Konfigurieren des Bin Packings für Knoten mit dem Plug-In RequestedtoCapacity
Von den drei Profilen bietet RequestedToCapacityRatio die präziseste Benutzersteuerung, um Knoten einer bestimmten Auslastung zuzuordnen. Beispielsweise wurde dieses Planungsprofil so konfiguriert, dass Knoten innerhalb eines Auslastungsbereichs von 50-85%bevorzugt werden, leere Knoten vermieden und nahezu vollständige Knoten bei 90% Auslastung oder mehr stark entprioritisiert werden, wodurch einige Kopfräume verbleiben. Angesichts des Grad an Details ist RequestedtoCapacity die empfohlene Bewertungsstrategie für das Bin Packing von Knoten in AKS für Produktionscluster.
Diese Konfiguration macht die CPU-Auslastung zum wichtigsten Faktor bei der Auswahl von Knoten, indem sie diese optimal ausnutzt und eine Überlastung bei CPU-intensiven Anwendungen vermeidet. Schließlich müssen Sie das PodTopologySpread Plugin deaktivieren, da es die gewichtete Bewertung von NodeResourcesFit außer Kraft setzen kann, wenn es standardmäßig aktiviert bleibt.
-
NodeResourcesFitsteuert, wie der Scheduler auswertet, ob ein Knoten über genügend Ressourcen zum Ausführen eines Pods verfügt. -
scoringStrategy: RequestedToCapacityRatiobewertet Knoten basierend auf dem Verhältnis der angeforderten Ressourcen zur Gesamtkapazität des Knotens, nachdem der Pod hypothetisch platziert wurde. -
Resourcesgibt an, dassCPUundMemorydie primären Ressourcen sind, die für die Bewertung berücksichtigt werden. Bei einer Gewichtung von8werden Knoten mit CPU-Auslastung während des Podplanungszyklus 8-mal höher als der Arbeitsspeicher bewertet. Dies erhöht die Wahrscheinlichkeit, dass Knoten mit hoher Auslastung ausgewählt werden. -
shape:ordnet die Knotennutzung dem Planerergebnis zu. Jeder Punkt steht für einen Auslastungsprozentsatz und die entsprechende Bewertung, mit einem linearen Score zwischen den Punkten.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-RtC
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: RequestedToCapacityRatio
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
requestedToCapacityRatio:
shape:
- utilization: 0
score: 0
- utilization: 30
score: 9
- utilization: 50
score: 10
- utilization: 85
score: 10
- utilization: 90
score: 5
- utilization: 100
score: 0
Konfigurieren des Bin Packings für Knoten mit dem Plug-In MostAllocated
Durch die Konfiguration des Schedulers mit MostAllocated werden Knoten exklusiv basierend auf der Ressourcennutzung priorisiert. Je höher die Ressourcenauslastung, desto höher wird ein Knoten bewertet, wobei ungenutzte Knoten vermieden oder ein Skalieren hinausgezögert wird, bis es notwendig ist. Bei Isolierung besteht die Gefahr, dass diese Konfiguration Knoten über die Grenzwerte hinaus sättigt, was zu Drosselungen oder zusätzlichen Engpässen führt.
Diese Konfiguration macht die CPU-Auslastung zum dominanten Faktor bei der Knotenauswahl. Um ein einheitliches Verhalten sicherzustellen, müssen Sie das PodTopologySpread Plugin deaktivieren, da es die gewichtete Punktzahl von NodeResourcesFit außer Kraft setzen kann, wenn es standardmäßig aktiviert bleibt.
-
NodeResourcesFitsteuert, wie der Scheduler auswertet, ob ein Knoten über genügend Ressourcen zum Ausführen eines Pods verfügt. -
scoringStrategy: MostAllocated-Bewertungen basierend auf Podanforderungen.MostAllocatedweist den Planer an, Knoten mit hoher Ressourcenauslastung zu bevorzugen. Diese Strategie fördert die dichte Pod-Platzierung und trägt dazu bei, eine bessere Knotennutzung zu erzielen. -
Resourcesgibt an, dassCPUundMemorydie primären Ressourcen sind, die für die Bewertung berücksichtigt werden. Bei einer Gewichtung von8werden Knoten mit CPU-Auslastung während des Podplanungszyklus 8-mal höher als der Arbeitsspeicher bewertet. Dies erhöht die Wahrscheinlichkeit, dass Knoten mit hoher Auslastung ausgewählt werden.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
Konfigurieren des Bin Packings von Knoten mit den Plug-Ins MostAllocated und NodeResourcesBalancedAllocation
Diese Konfiguration soll der einfachen und effizienten Strategie MostAllocated einige Schutzmaßnahmen hinzufügen, indem Knoten basierend auf einer ausgewogenen Nutzung der Zielressourcen bewertet werden.
NodeResourcesBalancedAllocation fördert die Platzierung von Pods auf Knoten mit benutzerdefinierter proportionaler Auslastung, wodurch die Gesamteffizienz erhöht wird, während Engpässe vermieden werden, die durch asymmetrischen Ressourcendruck verursacht werden. Beispielsweise würden CPU-gebundene Knoten mit reichlich nicht genutztem Arbeitsspeicher zu Gunsten von Knoten mit einem besseren Gleichgewicht der CPU- und Speicherauslastung niedriger bewertet.
-
NodeResourcesBalancedAllocationbewertet Knoten basierend darauf, wie ausgeglichene Ressourcennutzung über mehrere Ressourcen hinweg erfolgt. Anstatt die Auslastung einer einzelnen Ressource zu maximieren, bevorzugt dieses Plug-In Knoten, bei denen der Ressourcenverbrauch proportional ist. -
Resourcesgibt an, welche Ressourcen während der Bilanzauswertung berücksichtigt werden. Bei gleicher CPU- und Arbeitsspeichergewichtung werden Knoten höher bewertet, wenn beide Ressourcen auf ähnlichen Ebenen verbraucht werden.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA-BalancedAllocation
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
- name: NodeResourcesBalancedAllocation
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
- name: NodeResourcesBalancedAllocation
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesBalancedAllocationArgs
resources:
- name: cpu
weight: 1
- name: memory
weight: 1
Zuweisen eines Planerprofils zu einem vollständigen AKS-Cluster
Erstellen Sie eine Datei mit dem Namen
cpu-bin-packing-scheduler.yamlund dem CRD mit dem NamenupstreamWenden Sie das Planungskonfigurationsmanifest mithilfe des
kubectl applyBefehls an.kubectl apply -f cpu-bin-packing-scheduler.yamlUm diesen Planungsmechanismus für bestimmte Workloads zu verwenden, aktualisieren Sie Ihre Pod-Bereitstellungen mit den folgenden Schritten
schedulerName:... ... spec: schedulerName: binpacking-scheduler ... ...
Nächste Schritte
Weitere Informationen zum AKS-Scheduler, anderen Konfigurationen und bewährten Methoden finden Sie in den folgenden Ressourcen: