Dela via


Konfigurera nodpooler för automatisk etablering av noder (NAP) i Azure Kubernetes Service (AKS)

Den här artikeln beskriver hur du konfigurerar nodpooler för automatisk etablering av noder (NAP) i Azure Kubernetes Service (AKS), inklusive SKU-väljare, resursgränser och prioritetsvikter. Den innehåller också exempel som hjälper dig att komma igång.

Översikt över nodpooler i NAP

NAP använder SKU-krav för virtuella datorer (VM) för att bestämma de bästa virtuella datorerna för väntande arbetsbelastningar. Du kan konfigurera:

  • SKU-familjer och specifika instanstyper.
  • Resursgränser och prioriteringar.
  • Spot- eller On-demand-instanser.
  • Krav på arkitektur och funktioner.

Resursen NodePool anger begränsningar för de noder som NAP skapar och de poddar som körs på dessa noder. När du först installerar NAP skapas en standardinställning NodePool. Du kan ändra den här nodpoolen eller skapa extra nodpooler som passar dina arbetsbelastningskrav.

Viktiga beteenden hos NodePools i NAP

Tänk på följande när du konfigurerar NodePools för NAP:

  • NAP kräver minst en NodePool för att fungera.
  • NAP utvärderar varje konfigurerad NodePool.
  • NAP hoppar över NodePools med taints som inte tolereras av en podd.
  • NAP tillämpar startkontamineringar på etablerade noder men kräver inte podd tolerans.
  • NAP fungerar bäst med ömsesidigt uteslutande NodePools. Vid flera NodePools matchning använder den den med högsta vikt.

Granska standardkonfigurationen för nodpoolen

Konfigurationen av standard-Karpenter NodePool med namnet default som skapats av NAP är följande:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    expireAfter: Never
  template:
    spec:
      nodeClassRef:
        name: default

      # Requirements that constrain the parameters of provisioned nodes.
      # These requirements are combined with pod.spec.affinity.nodeAffinity rules.
      # Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.
      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
      requirements:
      - key: kubernetes.io/arch
        operator: In
        values:
        - amd64
      - key: kubernetes.io/os
        operator: In
        values:
        - linux
      - key: karpenter.sh/capacity-type
        operator: In
        values:
        - on-demand
      - key: karpenter.azure.com/sku-family
        operator: In
        values:
        - D

Den skapar också en system-surge nodpool som hjälper till med autoskalningen av systempoolnoder.

Kontrollera konfigurationen av standardnodpoolen när klustret skapas

När du skapar ett nytt AKS-kluster som är aktiverat med NAP med hjälp av Azure CLI kan du inkludera --node-provisioning-default-pools flaggan för att styra konfigurationen av standard-NAP.NodePool

Flaggan --node-provisioning-default-pools styr nap-standardkonfigurationen NodePool och accepterar följande värden:

  • Auto (standard): Skapar två standardvärden NodePools för omedelbar användning.
  • None: Skapar inga NodePools. Du måste definiera själv.

Varning

Om du ändrar från Auto till None: Om du ändrar inställningen från Auto till None i ett befintligt kluster tas standardinställningen NodePools inte bort automatiskt. Du måste ta bort dem manuellt om du inte längre behöver dem.

Konfigurationsalternativ för nodpool

I följande avsnitt beskrivs olika konfigurationsalternativ för NodePools i NAP, inklusive välkända etiketter och SKU-väljare, nodpoolsgränser och nodpoolsvikter.

Välkända etiketter och SKU-väljare

Kubernetes definierar välkända etiketter som Azure implementerar. Du kan definiera dessa etiketter i spec.requirements avsnittet i API:et NodePool . NAP har också stöd för Azure-specifika etiketter för mer avancerad schemaläggning.

karpenter.azure.com SKU-väljare

I följande tabell visas de karpenter.azure.com SKU-väljare som du kan använda i spec.requirements-avsnittet i ditt NodePool API för att definiera VM-egenskaper för dina noder.

Selector Description Example
karpenter.azure.com/sku-family VM SKU-familj D, F, L osv.
karpenter.azure.com/sku-name Explicit SKU-namn Standard_A1_v2
karpenter.azure.com/sku-version SKU-version (utan "v", kan använda 1) 1, 2
karpenter.sh/capacity-type VM-allokeringstyp (spot/på begäran) Fläck
karpenter.azure.com/sku-cpu Antal processorer i den virtuella datorn 16
karpenter.azure.com/sku-memory Minne i virtuell maskin i MiB 131072
kubernetes.azure.com/sku-cpu Antal processorer i den virtuella datorn 16
kubernetes.azure.com/sku-memory Minne i virtuell maskin i MiB 131072
karpenter.azure.com/sku-gpu-name GPU-namn A100
karpenter.azure.com/sku-gpu-manufacturer GPU-tillverkare nvidia
karpenter.azure.com/sku-gpu-count antal GPU:er per virtuell dator 2
karpenter.azure.com/sku-networking-accelerated Om den virtuella datorn har accelererad nätverksprestanda [sant, falskt]
karpenter.azure.com/sku-storage-premium-capable Om den virtuella datorn stöder Premium IO-lagring [sant, falskt]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Storleksgräns för os-disken (Ephemeral Operating System) i Gb 92

kubernetes.io välkända etiketter

I följande tabell listas de kubernetes.io välkända etiketter som du kan använda i spec.requirements-avsnittet av ditt NodePool-API för att definiera nodens egenskaper.

Etikett Description Example
topology.kubernetes.io/zone Tillgänglighetszoner [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os Operativsystem Linux
kubernetes.io/arch CPU-arkitektur (AMD64 eller ARM64) [amd64, arm64]

Exempel på SKU-familj

Med väljaren karpenter.azure.com/sku-family kan du rikta in dig på specifika VM-familjer.

Familj Description
D-serien Allmänna virtuella datorer med balanserat förhållande mellan processor och minne
F-serien Beräkningsoptimerade virtuella datorer med högt cpu-till-minne-förhållande
E-serien Minnesoptimerade virtuella datorer för minnesintensiva program
L-serien Lagringsoptimerade virtuella datorer med högt diskdataflöde
N-serien GPU-aktiverade virtuella datorer för beräkningsintensiva arbetsbelastningar

Exempelkonfiguration med SKU-familj:

requirements:
- key: karpenter.azure.com/sku-family
  operator: In
  values:
  - D
  - F

Exempel på SKU-namn

Med väljaren karpenter.azure.com/sku-name kan du ange den exakta typen av VM-instans.

requirements:
- key: karpenter.azure.com/sku-name
  operator: In
  values:
  - Standard_D4s_v3
  - Standard_F8s_v2

Exempel på SKU-version

Väljaren karpenter.azure.com/sku-version riktar sig till specifika generationer av VM-SKU:er.

requirements:
- key: karpenter.azure.com/sku-version
  operator: In
  values:
  - "3"  # v3 generation
  - "5"  # v5 generation

Exempel på tillgänglighetszon

Med väljaren topology.kubernetes.io/zone kan du ange tillgänglighetszonerna för dina noder.

requirements:
- key: topology.kubernetes.io/zone
  operator: In
  values:
  - eastus-1
  - eastus-2

Anmärkning

Du hittar tillgängliga zoner för din region med hjälp av az account list-locations --output table Azure CLI-kommandot.

Arkitekturexempel

Med väljaren kubernetes.io/arch kan du ange CPU-arkitekturen för dina noder. NAP stöder både amd64 noder och arm64 noder.

requirements:
- key: kubernetes.io/arch
  operator: In
  values:
  - amd64
  - arm64

OS-exempel

Med väljaren kubernetes.io/os kan du ange operativsystemet för dina noder.

requirements:
- key: kubernetes.io/os
  operator: In
  values:
  - linux

Exempel på kapacitetstyp

Med väljaren karpenter.sh/capacity-type kan du ange om du vill använda Spot-instanser eller instanser på begäran.

Anmärkning

NAP prioriterar Spot-instanser när både Spot och On-demand anges.

requirements:
- key: karpenter.sh/capacity-type
  operator: In
  values:
  - spot
  - on-demand

Nodpoolsgränser

Som standard försöker NAP schemalägga dina arbetsbelastningar inom den Azure-kvot som du har tillgänglig. Du kan också ange den övre gränsen för resurser som en nodpool använder genom att ange gränser i specifikationen för nodpoolen. Till exempel:

spec:
  # Resource limits constrain the total size of the cluster.
  # Limits prevent Node Auto Provisioning from creating new instances once the limit is exceeded.
  limits:
    cpu: "1000"
    memory: 1000Gi

Vikter för nodpool

När du har definierat flera nodpooler kan du ange en inställning för var en arbetsbelastning ska schemaläggas genom att definiera den relativa vikten i nodpooldefinitionerna. Till exempel:

spec:
  # Priority given to the node pool when the scheduler considers which to select. 
  # Higher weights indicate higher priority when comparing node pools.
  # Specifying no weight is equivalent to specifying a weight of 0.
  weight: 10

Nästa steg

Mer information om automatisk nodetablering i AKS finns i följande artiklar: