Bin Pack-knooppunten met scheduler-profielen in Azure Kubernetes Service (AKS) (preview)

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-system scheduler. Deze beperking is ingeschakeld om onverwachte wijzigingen in AKS-invoegtoepassingen in uw cluster te voorkomen. Daarnaast kunt u geen profile genaamd aks-system definiëren.

Vereiste voorwaarden

  • De Azure CLI-versie 2.76.0 of hoger. Voer az --version uit om de versie te vinden en voer az upgrade uit om de versie bij te werken. Als u Azure CLI wilt installeren of upgraden, raadpleegt u Azure CLI installeren.
  • Kubernetes-versie 1.33 of hoger die wordt uitgevoerd op uw AKS-cluster.
  • De versie aks-preview van de of hoger.
  • Registreer de UserDefinedSchedulerConfigurationPreview functievlag 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.

  1. Maak een AKS-cluster met de scheduler-profielconfiguratie ingeschakeld met behulp van de az aks create opdracht met de --enable-upstream-kubescheduler-user-configuration vlag.

    # 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-keys
    
  2. Zodra het maken is voltooid, maakt u verbinding met het cluster met behulp van de az aks get-credentials opdracht.

    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 get opdracht.

    kubectl get crd schedulerconfigurations.aks.azure.com
    

    Opmerking

    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.

  • NodeResourcesFit bepaalt hoe de scheduler evalueert of een knooppunt voldoende resources heeft om een pod uit te voeren.
  • scoringStrategy: RequestedToCapacityRatio scoort knooppunten op basis van de verhouding van gevraagde bronnen tot de totale knooppuntcapaciteit nadat de pod hypothetisch is geplaatst.
  • Resources geeft aan dat CPU en Memory als de primaire bronnen voor beoordeling worden beschouwd. Met een gewicht van 8, 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.

  • NodeResourcesFit bepaalt hoe de scheduler evalueert of een knooppunt voldoende resources heeft om een pod uit te voeren.
  • scoringStrategy: MostAllocated scores op basis van podaanvragen. MostAllocated geeft 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.
  • Resources geeft aan dat CPU en Memory als de primaire bronnen voor beoordeling worden beschouwd. Met een gewicht van 8, 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.

  • NodeResourcesBalancedAllocation kent 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.
  • Resources geeft 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

  1. Maak een bestand met de naam cpu-bin-packing-scheduler.yaml, met de CRD-naam upstream

  2. Pas het configuratiemanifest voor de planning toe met behulp van de kubectl apply opdracht.

    kubectl apply -f cpu-bin-packing-scheduler.yaml
    
  3. Werk uw podimplementaties bij met het volgende schedulerName om 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: