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.

AKS Automatic inkluderar NAP som standard. För AKS Standard-kluster måste du aktivera NAP innan du konfigurerar dess nodpooler.

Så här väljer NAP virtuella datorer för nodpooler

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, GPU och andra 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 aktiverar NAP med standardkonfigurationen för nodpoolen inställd på Autoskapar den standardresurserNodePool. Du kan ändra dessa nodpooler eller skapa extra nodpooler som passar dina arbetsbelastningskrav.

Så utvärderar och väljer NAP nodpooler

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 exkluderande NodePools, vars krav inte överlappar, vilket gör att varje pod endast matchar en pool. Vid flera NodePools matchning använder NAP den som har den högsta vikten.

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
  template:
    spec:
      nodeClassRef:
        group: karpenter.azure.com
        kind: AKSNodeClass
        name: default
      expireAfter: Never
      # 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

NAP skapar också en system-surge nodpool som tillhandahåller Linux AMD64-kapacitet på begäran för kritiska systemtillägg. När en väntande pod tolererar CriticalAddonsOnly=true:NoSchedule-tainten och matchar poolkraven kan NAP provisionera en nod i den här poolen. Noder som skapats av poolen har kubernetes.azure.com/mode: system etiketten .

Kontrollera standardnodpoolerna

När du skapar ett nytt AKS-kluster som är aktiverat med NAP med hjälp av Azure CLI tar du med --node-provisioning-default-pools flaggan för att styra om AKS skapar standard-NAPNodePools. Du kan också använda den här flaggan med az aks update när du aktiverar NAP i ett befintligt kluster.

Flaggan --node-provisioning-default-pools 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. Innan du tar bort dem måste du definiera lämplig ersättningskapacitet för kritiska systemtillägg. Du måste ta bort standardinställningen NodePools 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äletablerade etiketter som Azure implementerar. Du kan definiera dessa etiketter i spec.requirements avsnittet i API:et NodePool . NAP stöder också Azure-specifika etiketter för mer avancerad schemaläggning.

I följande tabell visas de etiketter som du kan använda i avsnittet i apispec.requirements:et NodePool för att definiera VM-egenskaper för dina noder:

Selector Description Example
karpenter.sh/capacity-type VM-allokeringstyp (spot/på begäran) Fläck
karpenter.azure.com/sku-family VM SKU-familj D, F, L osv.
karpenter.azure.com/sku-series VM SKU-serien Dpls_v6
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.azure.com/sku-cpu Antal processorer i den virtuella datorn 16
karpenter.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 (tillfälliga operativsystem) i GB 92
kubernetes.azure.com/sku-cpu Antal processorer i den virtuella datorn 16
kubernetes.azure.com/sku-memory Minne i virtuell maskin i MiB 131072
kubernetes.azure.com/cluster AKS-klusternamn my-cluster
kubernetes.azure.com/mode Läge för nodpool [system, användare]
kubernetes.azure.com/priority Prioritet [punkt, ordinarie]
kubernetes.azure.com/os-sku SKU för operativsystem [Ubuntu, AzureLinux]
kubernetes.azure.com/fips_enabled Om FIPS är aktiverat sant
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]

Värdena för minnesväljaren i den här tabellen är De MiB-värden som rapporteras på NAP-skapade noder. Innan du lägger till en väljare kontrollerar du etiketterna på noderna för att bekräfta det värde som används av klustret.

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

GPU SKU-exempel

Om du vill etablera NVIDIA GPU-noder med NAP skapar du en NodePool som väljer GPU-aktiverade VM-storlekar. I följande exempel kan NAP välja N-serien NVIDIA GPU SKU:er:

requirements:
- key: karpenter.azure.com/sku-family
  operator: In
  values:
  - N
- key: karpenter.azure.com/sku-gpu-manufacturer
  operator: In
  values:
  - nvidia

Om du vill att AKS ska installera och hantera NVIDIA GPU-drivrutinen, enhetspluginet, exportören för DCGM-mått (Data Center GPU Manager) och GPU-hälsosignaler på GPU-noder som etablerats med NAP konfigurerar du hanterad GPU i det refererade AKSNodeClass. Mer information finns i Skapa en AKS-hanterad GPU-nodpool.

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

Om du vill visa vm-storlekar som stöder tillgänglighetszoner i en region använder du az vm list-skus kommandot med parametrarna --location <region> --zone --output table . Bekräfta att den valda VM-storleken stöder zonerna i NodePool kravet.

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. För en dynamisk nodpool kan du ange aggregerade resursgränser för alla noder som har etablerats av poolen. I följande exempel cpu: "1000" begränsar du poolen till 1 000 vCPU-kärnor och memory: 1000Gi begränsar den till 1 000 gibibyte minne:

spec:
  # Resource limits constrain the total size of the node pool.
  # 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. Fältet weight accepterar ett heltal från 1 till 100, och högre värden ger en nodpool högre prioritet. Om du utelämnar weightär dess värde i praktiken 0. 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

Statiska nodpooler

Statiska nodpooler upprätthåller det fasta antalet NAP-etablerade noder som anges i replicas fältet, oavsett poddefterfrågan. Om du vill ändra antalet noder, skalar du uttryckligen NodePool, till exempel genom att använda kubectl scale med nodepool static-node-pool --replicas=7. Det valfria limits.nodes värdet begränsar explicit skalning och tillfällig kapacitet som skapas vid nodbyte. För statiska nodpooler nodes är det enda fältet som stöds under limits. Du kan inte ange cpu- eller minnesgränser.

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: static-node-pool
spec:
  replicas: 5
  template:
    spec:
      requirements:
      - key: karpenter.azure.com/sku-name
        operator: In
        values:
          - Standard_D4s_v3
          - Standard_F8s_v2
      - key: topology.kubernetes.io/zone
        operator: In
        values:
          - eastus-1
          - eastus-2
          - eastus-3
  limits:
    nodes: 10

Anmärkning

För statiska nodpooler kan du bara nodes ange i fältet limits . Du kan inte ange resursgränser eller weight, och avbrottskonsolidering gäller inte. När du har skapat en NodePoolkan du inte växla den mellan statiska och dynamiska lägen genom att lägga till eller ta bort fältet replicas .

Nästa steg

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