Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leert u hoe u uw knooppunten kunt inpakken om het knooppuntgebruik voor AKS-clusters (Azure Kubernetes Service) te verbeteren met behulp van de invoegtoepassing voor in-treeplanning. NodeResourcesFit De standaard AKS-scheduler werkt in een NodeResourcesFit:LeastAllocated modus, die bij het plannen van pods prioriteit geeft aan knooppunten met een lagere benutting. Met configureerbare Scheduler-profielen op AKS kunt u dit standaardgedrag wijzigen en de configuratie verfijnen om prioriteit te geven aan knooppunten met een hoger gebruik. In deze documentatie worden drie verschillende aangepaste scheduler-profielen behandeld, waarbij de aanbevolen werkwijze om het gebruik te verbeteren wordt benadrukt, terwijl hotspots op knooppunten worden verminderd.
Bin-packing van knooppunten is een planningsstrategie waarmee het resourcegebruik wordt gemaximaliseerd door de poddichtheid op knooppunten te verhogen in plaats van pods over een knooppuntgroep te spreiden of knooppunten voortijdig te schalen. Bin-verpakking helpt bij het minimaliseren van verspilde resources en kan de operationele kosten voor het onderhouden van niet-actieve of onderbenutte knooppunten verminderen. Het verbeteren van het gebruik van knooppunten is cruciaal, omdat gegevens aantonen dat CPU en geheugen vaak te veel worden aangevraagd. Naarmate gpu-acceptatie groeit, wordt het efficiënte gebruik van accelerators bovendien even kritiek vanwege hun relatieve tekort en kosten.
Beperkingen
- AKS beheert momenteel niet de implementatie van externe planners of out-of-tree-planningsinvoegtoepassingen.
- AKS biedt geen ondersteuning voor in-tree planningsinvoegtoepassingen die gericht zijn op de
aks-systemscheduler. Deze beperking is ingeschakeld om onverwachte wijzigingen in AKS-invoegtoepassingen in uw cluster te voorkomen. Daarnaast kunt u geenprofilegenaamdaks-systemdefiniëren.
Vereiste voorwaarden
- De Azure CLI-versie
2.76.0of hoger. Voeraz --versionuit om de versie te vinden en voeraz upgradeuit om de versie bij te werken. Als u Azure CLI wilt installeren of upgraden, raadpleegt u Azure CLI installeren. - Kubernetes-versie
1.33of hoger die wordt uitgevoerd op uw AKS-cluster. - De versie
aks-previewvan de of hoger. - Registreer de
UserDefinedSchedulerConfigurationPreviewfunctievlag in uw Azure-abonnement.
Configuratie van scheduler-profielen inschakelen op een AKS-cluster
U kunt de configuratie van een planningsprofiel inschakelen op een nieuw of bestaand AKS-cluster.
Maak een AKS-cluster met de scheduler-profielconfiguratie ingeschakeld met behulp van de
az aks createopdracht met de--enable-upstream-kubescheduler-user-configurationvlag.# 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-keysZodra het maken is voltooid, maakt u verbinding met het cluster met behulp van de
az aks get-credentialsopdracht.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Installatie van de scheduler-controller controleren
Nadat u de functie in uw AKS-cluster hebt ingeschakeld, controleert u of de aangepaste resourcedefinitie (CRD) van de scheduler-controller is geïnstalleerd met behulp van de
kubectl getopdracht.kubectl get crd schedulerconfigurations.aks.azure.comOpmerking
Deze opdracht slaagt niet als de functie niet is ingeschakeld in de vorige sectie.
Knooppunt-binpacking configureren met RequestedToCapacity-plug-in
Van de drie profielen RequestedToCapacityRatio biedt het meest gedetailleerde gebruikersbeheer voor het toewijzen van knooppunten aan een expliciet gebruik. Dit planningsprofiel is bijvoorbeeld geconfigureerd om knooppunten in een gebruiksinterval van 50-85% te bevorderen, lege knooppunten te vermijden en bijna volle knooppunten sterk in prioriteit te verminderen bij 90% gebruik of meer, zodat er wat ruimte overblijft. Gezien dit detailniveau is RequestedtoCapacity de aanbevolen scorestrategie voor het verpakken van knooppuntlocaties in AKS voor productieclusters.
Deze configuratie maakt het CPU-gebruik de dominante factor in het selecteren van knooppunten, het inpakken van knooppunten terwijl nog steeds te veel verzadiging voor CPU-intensieve toepassingen wordt vermeden. Ten slotte moet u de PodTopologySpread-invoegtoepassing uitschakelen, omdat deze de gewogen score van NodeResourcesFit kan overschrijven als hij standaard ingeschakeld blijft.
-
NodeResourcesFitbepaalt hoe de scheduler evalueert of een knooppunt voldoende resources heeft om een pod uit te voeren. -
scoringStrategy: RequestedToCapacityRatioscoort knooppunten op basis van de verhouding van gevraagde bronnen tot de totale knooppuntcapaciteit nadat de pod hypothetisch is geplaatst. -
Resourcesgeeft aan datCPUenMemoryals de primaire bronnen voor beoordeling worden beschouwd. Met een gewicht van8, worden knooppunten met CPU-gebruik 8x hoger gescoord dan het geheugen tijdens de cycli van podplanning. Dit verhoogt de kans dat knooppunten met een hoog gebruik worden geselecteerd. -
shape:koppelt de benutting van nodes aan de scheduler-score. Elk punt vertegenwoordigt een gebruikspercentage en de bijbehorende score, met een lineaire score tussen punten.
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
Configureer node-binpacking met de MostAllocated-plug-in
Het configureren van de scheduler met MostAllocated geeft exclusief prioriteit aan knooppunten op basis van het gebruik van middelen. Hoe hoger het resourcegebruik, hoe hoger een knooppunt wordt gescoord, waardoor ongebruikte knooppunten worden vermeden of geschaald totdat dat nodig is. In isolatie loopt deze configuratie risico's op verzadiging van knooppunten buiten wenselijke limieten, wat leidt tot beperking of extra knelpunten.
Deze configuratie maakt het CPU-gebruik de dominante factor in knooppuntselectie. Als u consistent gedrag wilt garanderen, moet u de PodTopologySpread invoegtoepassing uitschakelen, omdat deze de gewogen score van NodeResourcesFit bij standaardinstellingen kan overschrijven.
-
NodeResourcesFitbepaalt hoe de scheduler evalueert of een knooppunt voldoende resources heeft om een pod uit te voeren. -
scoringStrategy: MostAllocatedscores op basis van podaanvragen.MostAllocatedgeeft aan dat de scheduler de voorkeur geeft aan knooppunten met een hoog resourcegebruik. Deze strategie bevordert de plaatsing van dichte pods en helpt het gebruik van knooppunten te verbeteren. -
Resourcesgeeft aan datCPUenMemoryals de primaire bronnen voor beoordeling worden beschouwd. Met een gewicht van8, worden knooppunten met CPU-gebruik 8x hoger gescoord dan het geheugen tijdens de cycli van podplanning. Dit verhoogt de kans dat knooppunten met een hoog gebruik worden geselecteerd.
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
Knooppuntverpakking configureren met MostAllocated en NodeResourcesBalancedAllocation-plugins
Deze configuratie probeert enkele kaders toe te voegen aan de eenvoudige en efficiënte strategie MostAllocated door knooppunten te scoren op basis van evenwichtig gebruik van benodigde middelen.
NodeResourcesBalancedAllocation moedigt podplaatsing aan op knooppunten met door de gebruiker gedefinieerd proportioneel gebruik, waardoor de algehele efficiëntie wordt verhoogd en knelpunten worden vermeden die worden veroorzaakt door asymmetrische resourcedruk. Cpu-afhankelijke knooppunten met overvloedig ongebruikt geheugen worden bijvoorbeeld lager beoordeeld ten gunste van knooppunten met een betere balans tussen CPU en geheugengebruik.
-
NodeResourcesBalancedAllocationkent scores toe aan knooppunten op basis van hoe evenwichtig het resourcegebruik is over meerdere resources. In plaats van het maximaliseren van het gebruik van één resource, geeft deze invoegtoepassing de voorkeur aan knooppunten waarbij het resourceverbruik proportioneel is. -
Resourcesgeeft aan welke resources worden overwogen tijdens de balansevaluatie. Als de CPU en het geheugen gelijk zijn gewogen, worden knooppunten hoger beoordeeld wanneer beide resources op vergelijkbare niveaus worden verbruikt.
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
Een scheduler-profiel toewijzen aan een volledig AKS-cluster
Maak een bestand met de naam
cpu-bin-packing-scheduler.yaml, met de CRD-naamupstreamPas het configuratiemanifest voor de planning toe met behulp van de
kubectl applyopdracht.kubectl apply -f cpu-bin-packing-scheduler.yamlWerk uw podimplementaties bij met het volgende
schedulerNameom dit planningsmechanisme voor specifieke workloads te richten.... ... spec: schedulerName: binpacking-scheduler ... ...
Volgende stappen
Zie de volgende bronnen voor meer informatie over de AKS-scheduler, andere configuraties en aanbevolen procedures: