Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln får du lära dig hur du paketerar dina noder för att förbättra nodanvändningen för AKS-kluster (Azure Kubernetes Service) med hjälp av det inbyggda schemaläggningspluginet, NodeResourcesFit. AKS-standardschemaläggaren fungerar i ett NodeResourcesFit:LeastAllocated läge som prioriterar noder med lägre användning med schemaläggningspoddar. Med konfigurerbara Scheduler-profiler i AKS kan du ändra det här standardbeteendet och finjustera konfigurationen för att prioritera noder med högre användning. Den här dokumentationen beskriver tre olika anpassade scheduler-profiler samtidigt som vi lyfter fram rekommendationen om bästa praxis för att förbättra användningen samtidigt som nodernas hot spots minskas.
Bin-packning av noder är en schemaläggningsstrategi som maximerar resursanvändningen genom att öka podddensiteten på noder i stället för att sprida poddar över en nodpool eller att autoskalning av noder sker i förtid. Lagerplatsförpackning hjälper till att minimera bortkastade resurser och kan minska driftkostnaden för att underhålla inaktiva eller underutnyttjade noder. Att förbättra nodanvändningen är viktigt eftersom data visar att PROCESSOR och minne ofta är över begärda resurser. I takt med att GPU-implementeringen växer blir dessutom effektiv användning av acceleratorer lika kritisk på grund av deras relativa knapphet och kostnader.
Begränsningar
- AKS hanterar för närvarande inte distributionen av schemaläggare från tredje part eller plugin-program för schemaläggning utanför träd.
- AKS stöder inte plugin-program för schemaläggning i träd som riktar sig till
aks-systemschemaläggaren. Den här begränsningen finns för att förhindra oväntade ändringar av AKS-tillägg som är aktiverade i klustret. Dessutom kan du inte definiera enprofilesom heteraks-system.
Förutsättningar
- Azure CLI-versionen
2.76.0eller senare. Köraz --versionför att hitta versionen, och köraz upgradeför att uppgradera versionen. Om du behöver installera eller uppgradera, se Installera Azure CLI. - Kubernetes version
1.33eller senare som körs på ditt AKS-kluster. -
Azure CLI-tilläggsversionen
aks-preview18.0.0b27eller senare. - Registrera funktionsflaggan
UserDefinedSchedulerConfigurationPreviewi din Azure-prenumeration.
Aktivera konfiguration av schemaläggarprofil i ett AKS-kluster
Du kan aktivera schemaprofilkonfiguration i ett nytt eller befintligt AKS-kluster.
Skapa ett AKS-kluster med scheduler profilkonfiguration aktiverad med kommandot
az aks createoch--enable-upstream-kubescheduler-user-configuration-flaggan.# 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-keysNär skapandet är klart ansluter du till klustret med kommandot
az aks get-credentials.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Kontrollera installationen av scheduler-kontrollanten
När du har aktiverat funktionen i AKS-klustret kontrollerar du att den anpassade resursdefinitionen (CRD) för scheduler-kontrollanten har installerats med kommandot
kubectl get.kubectl get crd schedulerconfigurations.aks.azure.comAnmärkning
Det här kommandot lyckas inte om funktionen inte har aktiverats i föregående avsnitt.
Konfigurera bin-packning av noder med Plugin-programmet RequestedtoCapacity
Av de tre profilerna RequestedToCapacityRatio ger den mest detaljerade användarkontrollen för att mappa noder till en explicit användning. Den här schemaläggningsprofilen har till exempel konfigurerats för att gynna noder inom ett användningsband på 50–85%, undvika tomma noder och kraftigt deprioritera nästan fullständiga noder vid 90% användning eller mer, vilket lämnar lite utrymme. Med tanke på den här detaljnivån är RequestedtoCapacity den rekommenderade strategin för att packa noder i bin på AKS för produktionskluster.
Den här konfigurationen gör cpu-användning till den dominerande faktorn vid val av nod, paketering av noder samtidigt som övermättnad undviks för cpu-tunga program. Slutligen måste du inaktivera PodTopologySpread plugin-programmet eftersom det kan åsidosätta den viktade poängen från NodeResourcesFit om det lämnas aktiverat som standard.
-
NodeResourcesFitstyr hur schemaläggaren utvärderar om en nod har tillräckligt med resurser för att köra en podd. -
scoringStrategy: RequestedToCapacityRatiopoängsätter noder baserat på förhållandet mellan begärda resurser och total nodkapacitet efter den hypotetiska placeringen av podden. -
Resourcesanger detCPUochMemoryär de primära resurser som övervägs för bedömning. Med en vikt på8får noder med CPU-användning 8x högre poäng än minne under poddschemaläggningscykeln. Detta ökar sannolikheten för att noder med hög användning väljs. -
shape:mappar nodanvändningen till schemaläggarens poäng. Varje punkt representerar en användningsprocent och dess motsvarande poäng, med en linjär poäng mellan punkterna.
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
Konfigurera bin-packning av noder med MostAllocated Plugin
När du konfigurerar schemaläggaren med MostAllocated prioriteras endast noder baserat på resursanvändning. Desto högre resursanvändning, desto högre poängsätts en nod, vilket undviker oanvända noder eller skalning tills det behövs. Isolerat riskerar den här konfigurationen att mätta noder över önskvärda gränser, vilket orsakar trottling eller fler flaskhalsar.
Den här konfigurationen gör CPU-användning till den dominerande faktorn i valet av nod. För att säkerställa konsekvent beteende måste du inaktivera PodTopologySpread plugin-programmet eftersom det kan åsidosätta den viktade poängen från NodeResourcesFit om den lämnas aktiverad som standard.
-
NodeResourcesFitstyr hur schemaläggaren utvärderar om en nod har tillräckligt med resurser för att köra en podd. -
scoringStrategy: MostAllocatedpoäng baserat på poddbegäranden.MostAllocatedinstruerar schemaläggaren att föredra noder med hög resursanvändning. Den här strategin främjar tät poddplacering och ger bättre nodanvändning. -
Resourcesanger detCPUochMemoryär de primära resurser som övervägs för bedömning. Med en vikt på8får noder med CPU-användning 8x högre poäng än minne under poddschemaläggningscykeln. Detta ökar sannolikheten för att noder med hög användning väljs.
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
Konfigurera node bin-packning med insticksprogrammen MostAllocated och NodeResourcesBalancedAllocation
Den här konfigurationen ser ut att lägga till några skyddsräcken i den enkla och effektiva strategin MostAllocated genom att bedöma noder baserat på balanserad användning av målresurser.
NodeResourcesBalancedAllocation uppmuntrar placering av pods på noder med användardefinierad proportionell resursanvändning, vilket ökar den övergripande effektiviteten samtidigt som flaskhalsar orsakade av asymmetriskt resurstryck undviks. Till exempel skulle CPU-bundna noder med rikligt oanvänt minne få lägre poäng till förmån för noder med en bättre balans mellan PROCESSOR- och minnesanvändning.
-
NodeResourcesBalancedAllocationpoängsätter noder baserat på hur balanserad resursanvändning är mellan flera resurser. I stället för att maximera användningen av en enskild resurs föredrar det här plugin-programmet noder där resursförbrukningen är proportionell. -
Resourcesanger vilka resurser som ska beaktas under balansutvärderingen. När processorn och minnet är lika viktade får noderna högre poäng när båda resurserna förbrukas på liknande nivåer.
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
Tilldela en scheduler-profil till ett helt AKS-kluster
Skapa en fil med namnet
cpu-bin-packing-scheduler.yaml, med crd-namnetupstreamAnvänd schemaläggningskonfigurationsmanifestet
kubectl applymed kommandot .kubectl apply -f cpu-bin-packing-scheduler.yamlOm du vill använda den här schemaläggningsmekanismen för specifika arbetslaster uppdaterar du pod-distributionerna med följande
schedulerName:... ... spec: schedulerName: binpacking-scheduler ... ...
Nästa steg
Mer information om AKS-schemaläggaren, andra konfigurationer och metodtips finns i följande resurser: