Nastavení fondů uzlů pro automatické zřizování uzlů (NAP) v Azure Kubernetes Service (AKS)

Tento článek vysvětluje, jak nakonfigurovat node pooly pro automatické zřizování uzlů (NAP) v Azure Kubernetes Service (AKS), včetně selektorů SKU, limitů prostředků a prioritních vah. Obsahuje také příklady, které vám pomůžou začít.

AKS Automatic zahrnuje ve výchozím nastavení architekturu NAP. U clusterů AKS úrovně Standard musíte před konfigurací jejich fondů uzlů povolit NAP.

Jak NAP vybírá virtuální počítače pro fondy uzlů

Architektura NAP používá požadavky na skladovou položku virtuálního počítače k rozhodování o tom, které virtuální počítače jsou nejvhodnější pro nevyřízené úlohy. Můžete nakonfigurovat:

  • Rodiny SKU a konkrétní typy instancí.
  • Limity a priority prostředků.
  • Spotové instance či instance na vyžádání
  • Požadavky na architekturu, GPU a další možnosti

Prostředek NodePool nastaví omezení na uzly, které vytváří NAP, i na pody spuštěné na těchto uzlech. Když povolíte NAP s konfigurací výchozí skupiny uzlů nastavenou na Auto, vytvoří se výchozí NodePool prostředky. Tyto fondy uzlů můžete upravit nebo vytvořit další fondy uzlů tak, aby vyhovovaly vašim požadavkům na úlohy.

Jak NAP vyhodnocuje a vybírá skupiny uzlů

Při konfiguraci NodePools pro NAP mějte na paměti následující chování:

  • Architektura NAP vyžaduje alespoň jeden NodePool, aby fungovala.
  • Architektura NAP vyhodnocuje každou nakonfigurovanou architekturu NodePool.
  • NAP přeskočí NodePools s tainty, které pod netoleruje.
  • Architektura NAP aplikuje na zřízené uzly tainty po spuštění, ale nevyžaduje tolerance podů.
  • NAP funguje nejlépe při použití vzájemně se vylučujících NodePools, jejichž požadavky se nepřekrývají, takže každý pod patří pouze do jednoho fondu. Když se shoduje více NodePools, NAP použije ten s nejvyšší vahou.

Kontrola výchozí konfigurace fondu uzlů

Konfigurace výchozího Karpenteru NodePool vytvořeného default NAP je následující:

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 také vytváří fond uzlů system-surge, který poskytuje na vyžádání kapacitu Linux AMD64 pro kritické systémové doplňky. Když čekající pod toleruje poskvrnu CriticalAddonsOnly=true:NoSchedule a odpovídá požadavkům fondu, může NAP z tohoto fondu zřídit uzel. Uzly vytvořené fondem mají štítek kubernetes.azure.com/mode: system.

Řídit výchozí fondy uzlů

Když vytvoříte nový cluster AKS s povolenou architekturou NAP pomocí Azure CLI, zahrňte --node-provisioning-default-pools příznak, který určuje, jestli AKS vytvoří výchozí architekturu NAP NodePools. Tento příznak můžete také použít společně s az aks update, když povolujete NAP na existujícím clusteru.

Příznak --node-provisioning-default-pools přijímá následující hodnoty:

  • Auto (výchozí): Vytvoří dva standardy NodePools pro okamžité použití.
  • None: Nevytváří žádné NodePools. Musíte definovat vlastní.

Výstraha

Změna z Auto na None: Pokud změníte nastavení z Auto na None existující cluster, výchozí nastavení NodePools se neodstraní automaticky. Než je odstraníte, definujte vhodnou náhradní kapacitu pro důležité doplňky systému. Výchozí nastavení NodePools je nutné odstranit ručně, pokud je už nepotřebujete.

Možnosti konfigurace fondu uzlů

Následující části popisují různé možnosti NodePools konfigurace architektury NAP, včetně známých popisků a selektorů skladových položek, limitů fondu uzlů a váhy fondu uzlů.

Známé popisky a selektory skladových položek

Kubernetes definuje známé štítky, které Azure implementuje. Tyto popisky můžete definovat v spec.requirements části NodePool rozhraní API. Architektura NAP také podporuje označení specifická pro Azure pro pokročilejší plánování.

Následující tabulka uvádí popisky, které můžete použít v spec.requirements části NodePool rozhraní API k definování charakteristik virtuálních počítačů pro uzly:

Selector Description Example
karpenter.sh/capacity-type Typ přidělování virtuálních počítačů (spotový/ na vyžádání) Místo
karpenter.azure.com/sku-family Řada specifikací virtuálního počítače D, F, L atd.
karpenter.azure.com/sku-series Řada SKU virtuálních počítačů Dpls_v6
karpenter.azure.com/sku-name Explicitní název skladové položky Standard_A1_v2
karpenter.azure.com/sku-version SKU verze (bez "v", může použít 1) 1, 2
karpenter.azure.com/sku-cpu Počet procesorů ve virtuálním počítači 16
karpenter.azure.com/sku-memory Velikost paměti ve virtuálním počítači v MiB 131072
karpenter.azure.com/sku-gpu-name Název GPU A100
karpenter.azure.com/sku-gpu-manufacturer Výrobce GPU nvidia
karpenter.azure.com/sku-gpu-count Počet GPU na virtuální počítač 2
karpenter.azure.com/sku-networking-accelerated Jestli má virtuální počítač akcelerované síťové služby [pravda, nepravda]
karpenter.azure.com/sku-storage-premium-capable Jestli virtuální počítač podporuje úložiště Premium IO [pravda, nepravda]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Omezení velikosti dočasného disku s operačním systémem v GB 92
kubernetes.azure.com/sku-cpu Počet procesorů ve virtuálním počítači 16
kubernetes.azure.com/sku-memory Velikost paměti ve virtuálním počítači v MiB 131072
kubernetes.azure.com/cluster Název clusteru AKS my-cluster
kubernetes.azure.com/mode Režim skupiny uzlů [system, user]
kubernetes.azure.com/priority Priorita [bod, běžný]
kubernetes.azure.com/os-sku Skladová položka operačního systému [Ubuntu, AzureLinux]
kubernetes.azure.com/fips_enabled Jestli je povolený protokol FIPS true
topology.kubernetes.io/zone Zóny dostupnosti [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os Operační systém Linux
kubernetes.io/arch Architektura procesoru (AMD64 nebo ARM64) [amd64, arm64]

Hodnoty selektoru paměti v této tabulce jsou hodnoty MiB hlášené na uzlech vytvořených architekturou NAP. Než přidáte selektor, zkontrolujte popisky na uzlech a ověřte hodnotu používanou clusterem.

Příklady skupin skladových položek

Selektor karpenter.azure.com/sku-family umožňuje cílit na konkrétní rodiny virtuálních počítačů.

Rodina Description
řada D Virtuální počítače pro obecné účely s vyváženým poměrem procesoru k paměti
Řada F Virtuální počítače optimalizované pro výpočty s vysokým poměrem procesoru k paměti
Řada E Virtuální počítače optimalizované pro paměť pro aplikace náročné na paměť
Řada L Virtuální počítače optimalizované pro úložiště s vysokou propustností disku
N-series Virtuální počítače s podporou GPU pro úlohy náročné na výpočetní výkon

Příklad konfigurace pomocí řady skladových položek:

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

Příklad skladové položky GPU

Pokud chcete pomocí NAP zřídit uzly GPU NVIDIA, vytvořte NodePool, který vybírá velikosti virtuálních počítačů s podporou GPU. Následující příklad umožňuje NAP vybrat položky SKU grafických procesorů NVIDIA řady N:

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

Pokud chcete, aby AKS na uzlech GPU zřízených pomocí NAP instalovala a spravovala ovladač NVIDIA GPU, modul plug-in zařízení, exportér metrik Data Center GPU Manager (DCGM) a signály o stavu GPU, nakonfigurujte spravované GPU v odkazované položce AKSNodeClass. Další informace najdete v tématu Vytvoření fondu uzlů GPU spravovaných službou AKS.

Příklady názvů skladových položek

Selektor karpenter.azure.com/sku-name umožňuje zadat přesný typ instance virtuálního počítače.

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

Příklady verzí skladové položky

Selektor karpenter.azure.com/sku-version cílí na konkrétní generace skladových položek virtuálních počítačů.

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

Příklad zóny dostupnosti

Selektor topology.kubernetes.io/zone umožňuje určit zóny dostupnosti pro vaše uzly.

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

Poznámka:

Pokud chcete zobrazit seznam velikostí virtuálních počítačů, které podporují zóny dostupnosti v určité oblasti, použijte az vm list-skus příkaz s --location <region> --zone --output table parametry. Ověřte, že vybraná velikost virtuálního počítače podporuje zóny v NodePool požadavku.

Příklad architektury

Selektor kubernetes.io/arch umožňuje určit architekturu procesoru pro uzly. Nap podporuje jak amd64 a arm64 uzly.

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

Příklad operačního systému

Selektor kubernetes.io/os umožňuje zadat operační systém pro vaše uzly.

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

Příklad typu kapacity

Selektor karpenter.sh/capacity-type umožňuje určit, jestli se mají používat spotové instance nebo instance na vyžádání.

Poznámka:

NAP určuje prioritu spotových instancí, když jsou specifikovány jak spotové instance, tak instance na vyžádání.

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

Omezení fondu uzlů

Ve výchozím nastavení se NAP pokusí naplánovat vaše úlohy v rámci Azure quota, kterou máte k dispozici. U dynamického fondu uzlů můžete zadat agregované limity prostředků napříč všemi uzly zřízenými tímto fondem. V následujícím příkladu cpu: "1000" omezuje fond na 1 000 jader virtuálních procesorů a memory: 1000Gi omezuje ho na 1 000 gibibajtů paměti:

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

Váhy skupiny uzlů

Pokud máte definovaných více fondů uzlů, můžete nastavit předvolbu pro to, kde má být úloha naplánována definováním relativní váhy v definicích fondu uzlů. Pole weight přijímá celé číslo od 1 do 100 a vyšší hodnoty dávají fondu uzlů vyšší prioritu. Pokud vynecháte weight, jeho hodnota je účinně 0. Například:

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

Fondy statických uzlů

Statické fondy uzlů udržují pevný počet uzlů zřízených službou NAP zadaný v poli replicas, bez ohledu na požadavky podů. Pokud chcete změnit počet uzlů, explicitně škálujte NodePool, například pomocí .kubectl scalenodepool static-node-pool --replicas=7 Volitelná limits.nodes hodnota omezuje explicitní škálování a dočasnou kapacitu vytvořenou během nahrazení uzlu. U fondů statických uzlů nodes je jediným podporovaným polem v části limits; nemůžete nastavit limity procesoru nebo paměti.

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

Poznámka:

U fondů statických uzlů můžete nastavit pouze nodes v limits poli. Nemůžete nastavit limity prostředků ani weight a funkce konsolidace narušení se nepoužije. Po vytvoření NodePoolnemůžete přepínat mezi statickými a dynamickými režimy přidáním nebo odebráním replicas pole.

Další kroky

Pro více informací o automatickém zřizování uzlů v AKS si přečtěte následující články: