Konfigurace prostředků AKSNodeClass pro automatické zřizování uzlů (NAP) v Azure Kubernetes Service (AKS)

Tento článek vysvětluje, jak nakonfigurovat prostředky AKSNodeClass tak, aby definovaly Azure nastavení specifické pro automatické zřizování uzlů (NAP) v Azure Kubernetes Service (AKS) pomocí Karpenteru. AKSNodeClass umožňuje přizpůsobit různé aspekty uzlů, které Karpenter zřizuje, jako je obraz virtuálního počítače, velikost disku operačního systému, maximální počet podů na jeden uzel a konfigurace kubeletu.

Důležité

Počínaje datem 30. listopadu 2025 Azure Kubernetes Service (AKS) již nepodporuje a neposkytuje aktualizace zabezpečení pro Azure Linux 2.0. Image uzlu Azure Linux 2.0 je zmražena ve verzi 202512.06.0. Od 31. března 2026 se image uzlů odeberou a nebudete moct škálovat fondy uzlů. Migrace na podporovanou verzi Azure Linuxu probíhá buď upgradováním vašich fondů uzlů na podporovanou verzi Kubernetes, nebo migrací na osSku AzureLinux3. Další informace najdete v problému GitHub vyřazení a ve vyhlášení o vyřazení aktualizací Azure. Pokud chcete mít přehled o oznámeních a aktualizacích, sledujte poznámky k verzi AKS.

Přehled prostředků AKSNodeClass

prostředky AKSNodeClass vám umožňují konfigurovat nastavení specifická pro Azure v rámci NAP. Každý NodePool prostředek musí odkazovat na AKSNodeClass pomocí spec.template.spec.nodeClassRef. Můžete mít více NodePools, které odkazují na stejnou AKSNodeClass, což vám umožní sdílet společné konfigurace Azure napříč různými fondy uzlů.

Konfigurace rodiny imagí

Pole imageFamily nastaví výchozí image virtuálního počítače a logiku spouštění pro uzly zřízené prostřednictvím nástroje AKSNodeClass. Pokud řadu imagí nezadáte, použije se výchozí verze operačního systému podle vaší verze Kubernetes. GPU jsou podporovány pro obě rodiny obrazů na kompatibilních konfiguracích virtuálních počítačů. Další informace o výchozí verzi operačního systému na verzi Kubernetes najdete v dokumentaci k verzi operačního systému AKS.

Podporované typy obrázků

  • Ubuntu: Ubuntu je výchozí distribuce Linuxu pro uzly AKS.
    • Výchozí verze operačního systému se mění na základě vaší verze Kubernetes. Ubuntu 22.04 je výchozí pro Kubernetes verze 1.25 až 1.33. Ubuntu 24.04 je výchozí pro Kubernetes verze 1.34 a novější.
  • AzureLinux: Azure Linux je alternativní distribuce Linuxu pro AKS úlohy od Microsoftu. Další informace najdete v dokumentaci k Azure Linuxu
  • AzureContainerLinux: Azure Kontejner Linux je Microsoft neměnný operační systém optimalizovaný pro kontejnery pro úlohy AKS. Další informace najdete v dokumentaci ke službě Azure Container Linux.

Příklad konfigurace sady obrazů

Následující příklad nakonfiguruje AKSNodeClass tak, aby používal obrazovou rodinu AzureLinux.

spec:
  imageFamily: AzureLinux

Následující příklad nakonfiguruje AKSNodeClass tak, aby používal obrazovou rodinu AzureContainerLinux.

spec:
  imageFamily: AzureContainerLinux

Konfigurace obrazu uzlu ve shodě se standardem FIPS

Můžete také povolit uzlové obrazy v souladu se standardy FIPS (Federal Information Processing Standards). Další informace o FIPS v AKS najdete v dokumentaci k FIPS.

Pole fipsMode je ve výchozím nastavení nastaveno na Zakázáno a lze ho nastavit na následující možnosti:

  • FIPS – výběr imagí uzlů kompatibilních s FIPS
  • Zakázáno – nepoužívejte image uzlů kompatibilní se standardem FIPS

Následující příklad nakonfiguruje AKSNodeClass pro výběr imagí uzlů kompatibilních s FIPS nastavením fipsMode na FIPS:

spec:
  fipsMode: FIPS

Konfigurace podsítě virtuální sítě

Pole vnetSubnetID určuje, která podsíť virtuální sítě Azure se má použít ke zřizování síťových rozhraní uzlů. Toto pole je volitelné. Pokud nezadáte podsíť, architektura NAP použije výchozí podsíť nakonfigurovanou během instalace Karpenteru. Další informace najdete v tématu Konfigurace podsítí pro architekturu NAP.

Příklad konfigurace podsítě

ID podsítě musí být v plném formátu Azure Resource Manager (ARM), jak je znázorněno v následujícím příkladu:

spec:
  vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"

Konfigurace velikosti disku s operačním systémem

Pole osDiskSizeGB určuje velikost disku s operačním systémem v gigabajtech. Výchozí hodnota je 128 GB a minimální hodnota je 30 GB.

U úloh zvažte větší velikosti disků s operačním systémem, které:

  • Ukládat významná data místně.
  • Vyžadovat další místo pro obrazy kontejnerů.
  • Mají vysoké požadavky na vstupně-výstupní operace disku.

Příklad konfigurace velikosti disku s operačním systémem

spec:
  osDiskSizeGB: 256  # 256 GB OS disk

Konfigurace dočasného disku s operačním systémem

Architektura NAP automaticky používá dočasné disky s operačním systémem , pokud jsou k dispozici a vhodné pro požadovanou velikost disku. Dočasné disky s operačním systémem poskytují lepší výkon a nižší náklady oproti spravovaným diskům.

Kritéria výběru dočasného disku

Systém automaticky zvolí dočasné disky v následujících scénářích:

  • Typ instance virtuálního počítače podporuje dočasné disky s operačním systémem.
  • Kapacita efemérního disku je větší nebo rovna požadovanému osDiskSizeGB.
  • Virtuální počítač má dostatečnou dočasné kapacitu úložiště.

Pokud tyto podmínky nejsou splněné, systém se vrátí k používání spravovaných disků.

Dočasné typy disků a stanovení priorit

Azure virtuální počítače můžou mít různé typy dočasného úložiště. Systém používá následující pořadí priority:

  • Disky NVMe (nejvyšší výkon)
  • Disky mezipaměti (vyvážený výkon)
  • Disky prostředků (základní výkon)

Příklad konfigurace dočasného disku

Požadavky na fond uzlů můžete použít k zajištění dostatečné dočasné diskové kapacity uzlů, jak je znázorněno v následujícím příkladu:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: ephemeral-disk-pool
spec:
  template:
    spec:
      requirements:
        - key: karpenter.azure.com/sku-storage-ephemeralos-maxsize
          operator: Gt
          values: ["128"]  # Require ephemeral disk larger than 128 GB
      nodeClassRef:
        apiVersion: karpenter.azure.com/v1beta1
        kind: AKSNodeClass
        name: my-node-class
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: my-node-class
spec:
  osDiskSizeGB: 128  # This will use ephemeral disk if available and large enough

Tato konfigurace zajišťuje, že jsou vybrány pouze typy instancí virtuálních počítačů s dočasnými disky většími než 128 GB, což zaručuje dočasné využití disku pro zadanou velikost disku s operačním systémem.

Maximální konfigurace podů

Pole maxPods určuje maximální počet podů, které lze naplánovat na uzlu. Toto nastavení má vliv na hustotu clusteru i konfiguraci sítě.

Minimální hodnota pro maxPods hodnotu 10 a maximální hodnota je 250.

Výchozí chování pro maxPods

Výchozí chování maxPods závisí na konfiguraci síťového modulu plug-in. Následující tabulka shrnuje výchozí hodnoty:

Konfigurace síťového pluginu Výchozí maxPods pro uzel
Azure CNI se standardní sítí (v1 nebo NodeSubnet) 30
Azure CNI s překryvnými sítěmi 250
Žádné (žádný síťový modul plug-in) 250
Další konfigurace 110 (výchozí Kubernetes)

Příklad konfigurace maximálního počtu podů

spec:
  maxPods: 50  # Allow up to 50 pods per node

Konfigurace LocalDNS

LocalDNS nasadí proxy DNS na úrovni uzlu, který překládá dotazy DNS blíže k úlohám, snižuje latenci dotazů a zlepšuje odolnost při přechodných přerušeních DNS. Další informace najdete v dokumentaci k LocalDNS. Ve výchozím nastavení je LocalDNS nastavená na Zakázáno a dá se nakonfigurovat na následující možnosti:

  • Disabled (výchozí) – Zakáže funkci LocalDNS. Dotazy DNS nejsou na uzlu vyřešeny lokálně.
  • Preferred – AKS spravuje povolení Local DNS na základě verze Kubernetes pro skupinu uzlů. Konfigurace je vždy ověřena a zahrnuta, ale localDNS není povolená, pokud se nepoužívá správná verze Kubernetes.
  • Required – LocalDNS se ve fondu uzlů vynucuje, pokud jsou splněny všechny požadavky. Pokud požadavky nejsou splněné, nasazení selže.

Příklad konfigurace LocalDNS

Můžete přizpůsobit konfigurace LocalDNS, například vnetDNSOverrides a kubeDNSOverrides. Další podrobnosti o podporovaných modulech plug-in najdete v tématu Přizpůsobení localDNS.

spec:
  LocalDNS:
    mode: Required
    vnetDNSOverrides:
      - zone: "."
        cacheDuration: "3600s"
        forwardDestination: VnetDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: PreferUDP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
      - zone: "cluster.local"
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: ForceTCP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
    kubeDNSOverrides:
      - zone: "."
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: PreferUDP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
      - zone: "cluster.local"
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: ForceTCP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"

Konfigurace Kubeletu

V kubelet této části můžete nakonfigurovat různé parametry kubeletu, které ovlivňují chování uzlu. Tyto parametry jsou typické argumenty kubeletu, takže Azure zprostředkovatel je jednoduše předává do kubeletu na uzlu.

Důležité

Pečlivě nakonfigurujte nastavení kubeletu a nejprve otestujte všechny změny v neprodukčních prostředích.

Správa procesoru

Následující nastavení řídí chování správy procesoru pro kubelet:

spec:
  kubelet:
    cpuManagerPolicy: "static"  # or "none"
    cpuCFSQuota: true
    cpuCFSQuotaPeriod: "100ms"
  • cpuManagerPolicy: Určuje, jak kubelet přiděluje prostředky procesoru. Nastavte na "static" pro připnutí procesoru v úlohách, které jsou citlivé na latenci.
  • cpuCFSQuota: Povolí vynucení kvóty plně spravedlivého plánovače procesoru (CFS) pro kontejnery, které určují limity procesoru.
  • cpuCFSQuotaPeriod: Nastaví dobu kvóty CFS procesoru.

Odstranění nepotřebných obrázků

Následující nastavení řídí chování vyžazování obrazů pro kubelet:

spec:
  kubelet:
    imageGCHighThresholdPercent: 85
    imageGCLowThresholdPercent: 80

Tato nastavení řídí, kdy kubelet provádí odstraňování obrazů kontejneru:

  • imageGCHighThresholdPercent: Procento využití disku, které aktivuje pročištění obrazů.
  • imageGCLowThresholdPercent: Procento využití cílového disku po provedení garbage collection.

Správa topologie

Následující nastavení řídí zásady správce topologie pro kubelet:

spec:
  kubelet:
    topologyManagerPolicy: "best-effort"  # none, restricted, best-effort, single-numa-node

Správce topologie pomáhá koordinovat přidělování prostředků pro úlohy citlivé na latenci napříč prostředky procesoru a zařízení (například GPU).

Konfigurace systému

Následující nastavení umožňují konfigurovat další systémové parametry pro kubelet:

spec:
  kubelet:
    allowedUnsafeSysctls:
      - "kernel.msg*"
      - "net.ipv4.route.min_pmtu"
    containerLogMaxSize: "50Mi"
    containerLogMaxFiles: 5
    podPidsLimit: 4096
  • allowedUnsafeSysctls: Seznam povolených nebezpečných sysctlů, které mohou pody používat.
  • containerLogMaxSize: Maximální velikost souborů protokolu kontejneru před obměnou.
  • containerLogMaxFiles: Maximální počet souborů protokolu kontejneru, které se mají zachovat.
  • podPidsLimit: Maximální počet procesů povolených v libovolném podu.

Vlastní nastavení konfigurace operačního systému Linux

V LinuxOSConfig této části můžete nakonfigurovat různé parametry kubeletu, které ovlivňují chování uzlu. Tyto parametry jsou typické vlastní argumenty operačního systému, takže je NAP jednoduše předá kubeletu v uzlu.

Další informace o vlastních nastaveních konfigurace operačního systému Linux, úplných podrobnostech o výchozích hodnotách a důležitých informacích najdete v naší dokumentaci ke konfiguraci vlastních uzlů.

Důležité

Pečlivě nakonfigurujte nastavení operačního systému Linux a nejprve otestujte všechny změny v neprodukčních prostředích.

Nastavení omezení zpracování souborů v Linuxu

K nastavení systému souborů použijte následující nastavení.

spec:
  linuxOSConfig: 
    # Sysctl Settings  
    sysctls:  
      # File System Settings  
      fsFileMax: 2000000               # Range: 8192-12000500  Default: Max of available range
      fsInotifyMaxUserWatches: 1000000 # Range: 781250-2097152 Default: 1048576
      fsAioMaxNr: 1000000              # Range: 65536-6553500  Default: 65536
      fsNrOpen: 1000000                # Range: 8192-20000500  Default: 1048576

Nastavení linuxových soketů a ladění sítě

K nastavení protokolu TCP a sítě použijte následující nastavení.

spec:
  linuxOSConfig:
      # Network Settings  
      netCoreSomaxconn: 65535          # Range: 4096-3240000  Default: 16384
      netCoreNetdevMaxBacklog: 5000    # Range: 1000-3240000  Default: 1000
      netCoreRmemMax: 134217728        # Range: 212992-134217728  Default: 1048576
      netCoreOptmemMax: 102400         # Range: 20480-4194304     Default: 131072 
      netCoreWmemMax: 134217728        # Range: 212992-134217728  Default: 212992
      netCoreRmemDefault: 212992       # Range: 212992-134217728  
      netCoreWmemDefault: 212992       # Range: 212992-134217728  
      netIPv4IPLocalPortRange: "1024 65535" # Format: "first last", first: 1024-60999, last: 32768-65535  

      # Neighbor Table GC Thresholds  
      netIPv4NeighDefaultGcThresh1: 1024   # Range: 128-80000  Default: 4096
      netIPv4NeighDefaultGcThresh2: 2048   # Range: 512-80000  Default: 8192
      netIPv4NeighDefaultGcThresh3: 4096   # Range: 1024-80000  Default: 16384
      # Note: thresh1 <= thresh2 <= thresh3  

      # Connection Tracking  
      netNetfilterNfConntrackBuckets: 131072  # Range: 65536-524288   Default: dynamically calculated 
      netNetfilterNfConntrackMax: 262144       # Range: 131072-2097152 Default: dynamically calculated 

Nastavení limitu pracovních procesů v Linuxu

K nastavení jádra použijte následující nastavení.

spec:
  linuxOSConfig:
      # Kernel Settings  
      kernelThreadsMax: 100000         # Range: 20-513785  Default: Dynamically calculated

Nastavení virtuální paměti linuxu

Pomocí následujících možností můžete ladit provoz subsystému virtuální paměti Linuxu jádra Linuxu a zápisu zašpiněných dat na disk.

spec:
  linuxOSConfig:
      # Memory Management  
      vmMaxMapCount: 262144          # Range: 65530-262144 Default: Max of available range
      vmVfsCachePressure: 100        # Range: 0-100  Default: 100
      vmSwappiness: 60               # Range: 0-100  Default: 60

      # Swap File Configuration  
      swapFileSize: "2Gi"             # Default: (not set) | Pattern: quantity with units Note: Requires kubelet.failSwapOn: false  

      # Transparent Huge Pages  
      transparentHugePageEnabled: "madvise"    # Values: [always, madvise, never]  Default: always
      transparentHugePageDefrag: "defer+madvise" # Values: [always, defer, defer+madvise, madvise, never]  Default: madvise

Nastavení GPU

Následující pole umožňuje uživateli povolit instalaci vlastního ovladače GPU, například pomocí operátoru NVIDIA GPU.

spec:
  gpu:
    mode: 
      # acceptable values: [driver, none] default(or if not specified): driver
      # none skips gpu driver installation, driver has NAP manage the GPU driver installation  
      none

konfigurace značek pro prostředky Azure

Můžete zadat Azure tagy prostředků, které se vztahují na všechny instance virtuálních počítačů vytvořené s použitím konkrétního prostředku AKSNodeClass. Značky jsou užitečné pro sledování nákladů, organizaci prostředků a požadavky na dodržování předpisů.

Omezení značek

  • Azure značky prostředků mají omezení na 50 značek na jeden prostředek.
  • Názvy značek nerozlišují malá a velká písmena, ale u hodnot značek se rozlišují malá a velká písmena.
  • Azure si vyhrazuje některé značky, které nelze použít. Další informace najdete v pokynech ke značkám a jejich omezeních.

Příklad konfigurace značek

spec:
  tags:
    Environment: "production"
    Team: "platform"
    Application: "web-service"
    CostCenter: "engineering"

Příklad komplexní AKSNodeClass konfigurace

Následující příklad ukazuje komplexní AKSNodeClass konfiguraci, která zahrnuje všechna nastavení probíraná v tomto článku:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  template:
    spec:
      nodeClassRef:
        apiVersion: karpenter.azure.com/v1beta1
        kind: AKSNodeClass
        name: comprehensive-example
---
apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: comprehensive-example
spec:
  # Image family configuration
  # Default: Ubuntu
  # Valid values: Ubuntu, AzureLinux, AzureContainerLinux
  imageFamily: Ubuntu

  # FIPS compliant mode - allows support for FIPS-compliant node images
  # Default: Disabled
  # Valid values: FIPS, Disabled
  fipsMode: Disabled

  # LocalDNS mode - allows use of LocalDNS feature
  # Default: Disabled
  # Valid values: Preferred, Required, Disabled
  LocalDNS:
    mode: Disabled
    # additional details on vnetDNSOverrides and kubeDNSOverrides can be added here

  # Virtual network subnet configuration (optional)
  # If not specified, uses the default --vnet-subnet-id from Karpenter installation
  vnetSubnetID: "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet"

  # OS disk size configuration
  # Default: 128 GB
  # Minimum: 30 GB
  osDiskSizeGB: 128

  # Maximum pods per node configuration
  # Default behavior depends on network plugin:
  # - Azure CNI with standard networking: 30 pods
  # - Azure CNI with overlay networking: 250 pods
  # - Other configurations: 110 pods
  # Range: 10-250
  maxPods: 30

  # GPU driver installation (optional)
  # Default: driver - NAP manages gpu driver installation
  # none skips gpu driver installation
  # Valid values: driver, none
  gpu:
    mode: 
      driver

  # Azure resource tags (optional)
  # Applied to all VM instances created with this AKSNodeClass
  tags:
    Environment: "production"
    Team: "platform-team"
    Application: "web-service"
    CostCenter: "engineering"

  # Kubelet configuration (optional)
  # All fields are optional with sensible defaults
  kubelet:
    # CPU management policy
    # Default: "none"
    # Valid values: none, static
    cpuManagerPolicy: "static"

    # CPU CFS quota enforcement
    # Default: true
    cpuCFSQuota: true

    # CPU CFS quota period
    # Default: "100ms"
    cpuCFSQuotaPeriod: "100ms"

    # Image garbage collection thresholds
    # imageGCHighThresholdPercent must be greater than imageGCLowThresholdPercent
    # Range: 0-100
    imageGCHighThresholdPercent: 85
    imageGCLowThresholdPercent: 80

    # Topology manager policy
    # Default: "none"
    # Valid values: none, restricted, best-effort, single-numa-node
    topologyManagerPolicy: "best-effort"

    # Allowed unsafe sysctls (optional)
    # Comma-separated list of unsafe sysctls or patterns
    allowedUnsafeSysctls:
      - "kernel.msg*"
      - "net.ipv4.route.min_pmtu"

    # Container log configuration
    # containerLogMaxSize default: "50Mi"
    containerLogMaxSize: "50Mi"
    
    # containerLogMaxFiles default: 5, minimum: 2
    containerLogMaxFiles: 5

    # Pod process limits
    # Default: -1 (unlimited)
    podPidsLimit: 4096

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: