Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
NodePoolför att fungera. - NAP utvärderar varje konfigurerad
NodePool. - NAP hoppar över
NodePoolsmed 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 fleraNodePoolsmatchning 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ärdenNodePoolsför omedelbar användning. -
None: Skapar ingaNodePools. 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: