Uzly Bin Pack s profily plánovače ve službě Azure Kubernetes Service (AKS) (náhled)

V tomto článku se dozvíte, jak efektivně seskupit uzly, abyste zlepšili jejich využití pro clustery Azure Kubernetes Service (AKS) pomocí integrovaného plánovacího plug-inu NodeResourcesFit. Výchozí plánovač AKS funguje v NodeResourcesFit:LeastAllocated režimu, který upřednostňuje uzly s nižším využitím při plánování podů. Konfigurovatelné profily plánovače v AKS umožňují změnit toto výchozí chování a vyladit konfiguraci tak, aby upřednostnil uzly s vyšším využitím. Tato dokumentace se zabývá třemi různými vlastními profily plánovače a zároveň zvýrazňuje doporučení osvědčených postupů ke zlepšení využití a snížení počtu aktivních míst uzlu.

Ukládání uzlů do kapacitních skupin je plánovací strategie, která maximalizuje využití prostředků zvýšením hustoty podů na uzlech spíše než rozprostřením podů po fondu uzlů nebo než předčasným automatickým škálováním uzlů. Balení do bloků pomáhá minimalizovat plýtvání zdroji a může snížit provozní náklady spojené s údržbou nevyužívaných nebo nedostatečně využitých uzlů. Zlepšení využití uzlů je důležité, protože data ukazují, že CPU a paměť jsou často nadhodnoceně požadovány. S rostoucím růstem přechodu na GPU se navíc z důvodu relativního nedostatku a nákladů stává stejně důležité efektivní využití akcelerátorů.

Omezení

  • AKS v současné době neřídí nasazení plánovačů třetích stran ani plánovacích pluginů mimo hlavní repozitář.
  • AKS nepodporuje vestavěné plug-iny pro plánování, které cílí na aks-system plánovač. Toto omezení je zavedené, aby se zabránilo neočekávaným změnám doplňků AKS povolených ve vašem clusteru. Kromě toho nelze definovat profile pojmenovaný aks-system.

Předpoklady

Povolení konfigurace profilu plánovače v clusteru AKS

Konfiguraci profilu plánu můžete povolit v novém nebo existujícím clusteru AKS.

  1. Vytvořte cluster AKS s povolenou konfigurací profilu plánovače az aks create pomocí příkazu s příznakem --enable-upstream-kubescheduler-user-configuration .

    # 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. Po dokončení procesu vytváření se pomocí příkazu připojte ke clusteru az aks get-credentials .

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    

Ověření instalace kontroleru plánovače

  • Po povolení funkce ve vašem clusteru AKS ověřte, že definice vlastního prostředku (CRD) ovladače plánování byla úspěšně nainstalována pomocí příkazu kubectl get.

    kubectl get crd schedulerconfigurations.aks.azure.com
    

    Poznámka:

    Tento příkaz nebude úspěšný, pokud nebyla funkce v předchozí části úspěšně povolená.

Konfigurace bin-packingu uzlů pomocí pluginu RequestedtoCapacity

Ze tří profilů RequestedToCapacityRatio poskytuje nejpodrobnější uživatelský ovládací prvek pro mapování uzlů na explicitní využití. Tento plánovací profil byl například nakonfigurován tak, aby upřednostňoval uzly v pásmu využití 50–85 %, vyhnul se prázdným uzlům a výrazně snižoval prioritu téměř plně využitých uzlů při 90 % využití nebo více, čímž ponechává určitou rezervu. Vzhledem k této úrovni podrobností je RequestedtoCapacity doporučenou strategií bodování pro optimalizaci rozdělení uzlů v AKS v produkčních clusterech.

Díky této konfiguraci je využití procesoru dominantním faktorem při výběru uzlu, balení uzlů a zároveň se vyhnete nadměrné sytosti aplikací náročných na procesor. Nakonec musíte zakázat plugin PodTopologySpread, protože může přepsat vážené skóre z NodeResourcesFit, pokud je ve výchozím nastavení povolen.

  • NodeResourcesFit určuje, jak plánovač vyhodnotí, jestli má uzel dostatek prostředků ke spuštění podu.
  • scoringStrategy: RequestedToCapacityRatio boduje uzly na základě poměru požadovaných prostředků k celkové kapacitě uzlu po hypotetickém umístění podu.
  • Resources určuje, že CPU a Memory jsou primárními prostředky, které se považují za bodování. S hmotností 8 jsou uzly s využitím procesoru skórovány 8x vyšší než paměť během plánování podu. Tím se zvyšuje pravděpodobnost výběru uzlů s vysokým využitím.
  • shape: mapuje využití uzlů na skóre plánovače. Každý bod představuje procento využití a odpovídající skóre s lineárním skóre mezi body.
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

Konfigurace balení přihrádek uzlu pomocí modulu plug-in MostAllocated

Konfigurace plánovače s MostAllocated výhradně upřednostňuje uzly na základě využití prostředků. Čím vyšší je využití prostředků, tím vyšší je skóre uzlu, vyhnout se nepoužívaným uzlům nebo škálování, dokud nebude potřeba. Při použití v izolaci hrozí u této konfigurace přesycení uzlů nad žádoucí míru, což způsobuje omezení nebo další úzká místa.

Díky této konfiguraci je využití procesoru dominantním faktorem při výběru uzlu. Pokud chcete zajistit konzistentní chování, musíte zakázat plugin PodTopologySpread, protože může přepsat vážené skóre z NodeResourcesFit, pokud zůstane ve výchozím nastavení povolený.

  • NodeResourcesFit určuje, jak plánovač vyhodnotí, jestli má uzel dostatek prostředků ke spuštění podu.
  • scoringStrategy: MostAllocated skóre na základě požadavků na pody. MostAllocated říká plánovači, aby upřednostňoval uzly s vysokým využitím prostředků. Tato strategie podporuje zhuštěné umístění podů a pomáhá dosáhnout lepšího využití uzlů.
  • Resources určuje, že CPU a Memory jsou primárními prostředky, které se považují za bodování. S hmotností 8 jsou uzly s využitím procesoru skórovány 8x vyšší než paměť během plánování podu. Tím se zvyšuje pravděpodobnost výběru uzlů s vysokým využitím.
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

Konfigurace přihrádky uzlů s využitím modulů plug-in MostAllocated a NodeResourcesBalancedAllocation

Tato konfigurace se snaží přidat některé mantinely do jednoduché a efektivní strategie MostAllocated vyhodnocováním uzlů na základě vyváženého využití cílových prostředků. NodeResourcesBalancedAllocation podporuje umístění podů na uzlech s uživatelem definovaným proporcionálním využitím, což zvyšuje celkovou efektivitu a zároveň zabraňuje kritickým bodům způsobeným asymetrickým tlakem prostředků. Například uzly vázané na procesor s bohatou nevyužitou pamětí by byly hodnoceny nižší ve prospěch uzlů s lepším vyvážením využití procesoru a paměti.

  • NodeResourcesBalancedAllocation vyhodnotí uzly na základě toho, jak vyvážené je využití zdrojů napříč více zdroji. Místo maximalizace využití jednoho prostředku dává tento modul plug-in přednost uzlům, ve kterých je spotřeba prostředků úměrná.
  • Resources určuje, které prostředky se při vyhodnocování zůstatku považují. Při stejné váze procesoru a paměti jsou uzly hodnoceny výše, když jsou obě prostředky využívány na podobných úrovních.
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

Přiřazení profilu plánovače k celému clusteru AKS

  1. Vytvořte soubor s názvem cpu-bin-packing-scheduler.yaml, s CRD nazvaným upstream

  2. Pomocí příkazu kubectl apply aplikujte konfiguraci plánování manifest.

    kubectl apply -f cpu-bin-packing-scheduler.yaml
    
  3. Pokud chcete tento mechanismus plánování cílit na konkrétní úlohy, aktualizujte nasazení podů následujícím schedulerNamezpůsobem:

    ...
    ...
        spec:
          schedulerName: binpacking-scheduler
    ...
    ...
    

Další kroky

Další informace o plánovači AKS, dalších konfiguracích a osvědčených postupech najdete v následujících zdrojích informací: