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. Bitová kopie uzlu Azure Linux 2.0 je zmrazená na vydání 202512.06.0. Od 31. října 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ů.

Důležité

Změna nastavení u existujícího AKSNodeClass nepřekonfiguruje spuštěné uzly přímo. NAP označí uzly zřízené z předchozí konfigurace jako vychýlené a nahradí je, v závislosti na omezeních narušení u odkazujících NodePool prostředků. Toto tags pole je jedinou výjimkou, protože změny tagů se použijí na existující prostředky Azure bez nahrazení uzlu. Další informace najdete v tématu Drift a rozpočty narušení podů. Než upravíte AKSNodeClass, které používají produkční úlohy, projděte si tyto pokyny.

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 Container Linux se podporuje s AKS 1.34 a novějšími. Použijte virtuální počítač 2. generace a explicitně povolte obě nastavení důvěryhodného spuštění, i když je nepotřebujete jinak:
    • Nastavte security.trustedLaunch.vtpm na hodnotu true.
    • Nastavte security.trustedLaunch.secureBoot na hodnotu true.
    • Pokud nastavíte osDiskSizeGB, použijte hodnotu alespoň 60.
    • Tuto rodinu obrázků nekombinujte s nastaveními, která tato rodina obrázků nepodporuje. Podrobnosti najdete v tématu Azure Container Linux v AKS.
  • Windows2022: Windows Server 2022 je ve verzi Preview. Vyžaduje architekturu AMD64 a není podporováno s datovou vrstvou Cilium. Windows2022 nepodporuje FIPS ani Trusted Launch. Nenakonfigurujte linuxOSConfig, nepovolujte streamování artefaktů ani nenastavujte LocalDNS na jiný režim než Disabled.
  • Windows2025: Windows Server 2025 je ve verzi Preview. Vyžaduje architekturu AMD64 a není podporována s datovou vrstvou Cilium. Funkce FIPS je povinná a je skutečně povolena i v případě, že fipsMode je vynechána. Nenakonfigurujte linuxOSConfig, nepovolujte streamování artefaktů ani nenastavujte LocalDNS na jiný režim než Disabled.

Příklad konfigurace sady obrazů

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

spec:
  imageFamily: AzureLinux

konfigurace Azure Container Linux

Následující příklad používá Azure Container Linux s požadovaným nastavením Trusted Launch. Vynechá se osDiskSizeGB, aby platforma vybrala podporovanou velikost disku.

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: azure-container-linux
spec:
  imageFamily: AzureContainerLinux
  security:
    trustedLaunch:
      vtpm: true
      secureBoot: true

Podpora operačního systému Windows (preview)

Note

Funkce AKS ve verzi Preview jsou k dispozici na bázi samoobsluhy a dobrovolného přihlášení. Ukázky jsou poskytovány "tak, jak jsou" a "dle dostupnosti" a jsou vyloučeny ze smluv o úrovni služeb a z omezené záruky. Předběžné verze AKS jsou částečně pokryty zákaznickou podporou podle možností. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Architektura NAP podporuje Windows2022 a Windows2025 obrazy.

  • Windows2022: Windows Server 2022 je ve verzi Preview. Vyžaduje architekturu AMD64 a není podporováno s datovou rovinou Cilium. Windows2022 nepodporuje FIPS ani Trusted Launch. Nenakonfigurujte linuxOSConfig, nepovolujte streamování artefaktů ani nenastavujte LocalDNS na jiný režim než Disabled.
  • Windows2025: Windows Server 2025 je ve verzi Preview. Vyžaduje architekturu AMD64 a není podporováno s datovou vrstvou Cilium. Funkce FIPS je povinná a zůstává povolena i v případě, že fipsMode je vynechána. Nenakonfigurujte linuxOSConfig, nepovolujte streamování artefaktů ani nenastavujte LocalDNS na jiný režim než Disabled.

Konfigurace Windows2022

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: windows-2025
spec:
  imageFamily: Windows2025

Konfigurace Windows2025

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: windows-2025
spec:
  imageFamily: Windows2025
  security:
    trustedLaunch:
      vtpm: true
      secureBoot: true

Důležité

Rodiny imagí systému Windows jsou funkcí ve verzi Preview. Použijte Windows NodePool, které vybere kubernetes.io/os: windows a kubernetes.io/arch: amd64 a zajistí, že úlohy také vyberou uzly Windows. Podrobnosti najdete v tématu Konfigurace fondů uzlů pro automatické zřizování uzlů v AKS.

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 veřejné IP adresy na úrovni instance

Veřejnou adresu IPv4 můžete přiřadit každému uzlu provisionovanému pomocí NAP nastavením nodePublicIP.enabled na true. Volitelně můžete zadat ipTags nebo prefixIDs. Použijte jednu nebo druhou, ne obě.

Použití veřejné IP adresy na úrovni instance s předponami

Volitelně můžete zadat jednu předponu veřejné IP adresy IPv4 pomocí prefixIDs. Předpona musí být ve stejné oblasti jako cluster. U zónové předpony omezte odpovídající NodePool na stejnou zónu dostupnosti. Nemůžete zadat ipTags a prefixIDs společně – použijte jen jednu z nich.

Identita clusteru potřebuje oprávnění k použití předpony veřejné IP adresy, pokud je zadána, a k vytvoření a správě prostředků veřejné IP adresy uzlu. Úplné pokyny k nastavení, zabezpečení sítě a ověření najdete v tématu Použití veřejných IP adres uzlů.

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: public-ip-nodes
spec:
  nodePublicIP:
    enabled: true
    # Optional. Specify at most one IPv4 public IP prefix resource ID.
    prefixIDs:
      - /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Network/publicIPPrefixes/<prefix-name>

Použít veřejnou IP adresu na úrovni instance se značkami IP a předvolbou internetového směrování

Následující příklad ukazuje, jak používat veřejnou IP adresu na úrovni instance se značkou IP:

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: public-ip-nodes
spec:
  nodePublicIP:
    enabled: true
    ipTags:
      - ipTagType: RoutingPreference
        tag: Internet
    # Optional. Specify at most one IPv4 public IP prefix resource ID.
    prefixIDs:
      - /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Network/publicIPPrefixes/<prefix-name>

Streamování artefaktů

Streamování artefaktů umožňuje streamovat image kontejnerů z Azure Container Registry (ACR) do Azure Kubernetes Service (AKS). AKS načítá jenom potřebné vrstvy pro počáteční spuštění podu, což zkracuje dobu potřebnou k nasazení úloh.

Předpoklady

  • Streamování artefaktů vyžaduje, abyste měli integrovanou službu ACR úrovně Premium s clusterem AKS.
  • Streamování artefaktů musí být povolené v ACR.

Pokyny k povolení funkce Artifact Streaming v ACR najdete v dokumentaci k Artifact Streaming.

Povolení streamování artefaktů v clusterech NAP

Clustery s povoleným automatickým zřizováním uzlů (NAP) můžou povolit streamování artefaktů pomocí spec.artifactStreaming.enabled pole CRD třídy AKSNodeClass. Nastavením tohoto pole na true povolíte streamování artefaktů pro všechny nové nebo existující uzly spravované službou NAP přidružené k tomuto CRD AKSNodeClass.

apiVersion: karpenter.azure.com/v1beta1
kind: AKSNodeClass
metadata:
  name: my-node-class
spec:
  # Enables artifact streaming; To use this feature container images must also enable artifact streaming on ACR
  # Valid values: true, false; defaults to false if not specified
  artifactStreaming:
    enabled: 
      true

Note

Pokud chcete používat streamování artefaktů na uzlech spravovaných architekturou NAP AKS, musíte také povolit streamování artefaktů v Azure Container Registry (ACR). Pokud tuto možnost ve službě ACR nenastavíte, bude pole ve výchozím nastavení false.

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:
        group: karpenter.azure.com
        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"

Aktualizujte konfiguraci LocalDNS u existující třídy AKSNodeClass

Nastavení localDNS se účastní detekce odchylek stejně jako ostatní nastavení AKSNodeClass. Když změníte spec.localDNS na existujícím AKSNodeClass, na který již odkazují existující uzly, architektura NAP tuto změnu použije prostřednictvím standardního mechanismu Drift. NAP znovu nevytváří bitovou kopii existujících uzlů.

Následující chování platí při změně režimu LocalDNS nebo přepsání, například při změně mode z Disabled na Required:

  • Nové uzly: Každý uzel, který NAP zřídí po aktualizaci AKSNodeClass, použije novou konfiguraci LocalDNS.
  • Existující uzly: NAP označí existující NodeClaim objekty jako vychýlené, protože jejich zaznamenaná konfigurace již neodpovídá AKSNodeClass. Architektura NAP spustí náhradní uzel, který používá novou konfiguraci LocalDNS, pak izoluje, vyprázdní a odebere uzel s odchylkou konfigurace.
  • Bez reimage: Povolení LocalDNS ve fondu spravovaných uzlů AKS provede reimage všech uzlů ve fondu. NAP místo toho nahradí uzel. V obou případech se pody na ovlivněných uzlech vyřadí a přeplánují, takže počítejte se stejným dopadem na pracovní zátěž.

Důležité

Nastavení mode na Disabled nebo AKSNodeClass také změní vyřešenou konfiguraci Preferred a způsobí drift existujících uzlů. Jakákoli změna v oddílu localDNS, včetně hodnot vnetDNSOverrides a kubeDNSOverrides, způsobí nahrazení uzlu.

Při zahájení nahrazování

Vyhodnocení driftu a nahrazení začne, jakmile použijete aktualizovanou AKSNodeClass. Nahrazení se řídí standardním životním cyklem přerušení architektury NAP, takže míra a načasování závisí na ovládacích prvcích přerušení, které nakonfigurujete u prostředků AKSNodeClass, které odkazují na NodePool.

Jak NAP orchestruje nahrazení

Odchylka způsobená změnou LocalDNS se řídí standardními ovládacími prvky přerušení architektury NAP popsanými v následující tabulce:

Ovládací prvek Vliv na nahrazení vyvolané službou LocalDNS
Rozpočty narušení provozu (spec.disruption.budgets) Limit určuje, kolik uzlů NAP najednou nahradí. Pokud nedefinujete rozpočty, architektura NAP ve výchozím nastavení nastaví jeden rozpočet nodes: 10%, takže současně naruší maximálně 10 procent uzlů ve fondu uzlů.
Rozpočet schedule a duration Omezuje náhradu na okno údržby. Nastavte nodes: "0" mimo okno, aby se zablokovalo nahrazení.
Rozpočty narušení podů (PDB) Použije se během drainu uzlu. NAP čeká místo evikce podů, které porušují PDB.
karpenter.sh/do-not-disrupt anotace Vyloučí anotované pody a uzly z dobrovolného přerušení, včetně driftu.
terminationGracePeriod Doba vypouštění. Toto nastavení obchází soubory PDB a anotace karpenter.sh/do-not-disrupt, po uplynutí doby.

Nahrazení není plně sériové ani plně paralelní. Architektura NAP zřizuje náhradní kapacitu před odebráním odchýleného uzlu, ale může nahradit více uzlů, které odkazují na stejný AKSNodeClass souběžně, až do limitu nastaveného rozpočty přerušení.

Warning

Pokud nedefinujete rozpočty přerušení v poolech uzlů a nedefinujete rozpočty přerušení podů pro vaše úlohy, může změna localDNS u vytíženého AKSNodeClass narušit až 10 % vašich uzlů najednou bez ochrany na úrovni aplikace, což může způsobit výpadek úloh. Před změnou localDNS v produkčním clusteru definujte soubory PDB pro kritické úlohy a nastavte konzervativní rozpočet narušení.

Snižte riziko nedostupnosti při povolení LocalDNS

  1. Ověřte, že vaše vlastní servery DNS odpovídají na dotazy přes port 53 pro UDP i TCP z podsítě uzlu. Další informace najdete v tématu Ověření vlastního DNS před povolením LocalDNS.

  2. Definujte pod disruption budgets pro každou kritickou úlohu.

  3. Než změníte NodePool, nastavte na ovlivněných AKSNodeClass prostředcích konzervativní rozpočet přerušení, jak je znázorněno v následujícím příkladu:

    apiVersion: karpenter.sh/v1
    kind: NodePool
    metadata:
      name: default
    spec:
      disruption:
        budgets:
        - nodes: "1"   # Replace one node at a time
    
  4. localDNS Změnu nejprve použijte v neprodukčním AKSNodeClass prostředí. Případně můžete vytvořit AKSNodeClass, která má povolenou službu LocalDNS, a migrovat úlohy na NodePool, která na ni odkazuje.

  5. Sledujte průběh nahrazení výpisem claims uzlu. Nahrazení je dokončeno, když žádný claim uzlu nehlásí podmínku stavu Drifted.

    # List node claims and watch replacements appear as drifted nodes are removed
    kubectl get nodeclaims
    
    # Inspect the status conditions on a specific node claim
    kubectl describe nodeclaim <nodeclaim-name>
    
  6. Ověřte, že je na náhradních uzlech aktivní LocalDNS. Další informace viz Ověření fungování LocalDNS.

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, výchozích hodnotách a důležitých informacích najdete v referenčních informacích o parametrech konfigurace 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

Pomocí následujícího pole povolte 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

Spravované GPU

Pole gpu.mode řídí instalaci ovladače GPU. Přijímá Driver nebo None a výchozí hodnota je Driver. Nastavte None, aby se přeskočila instalace ovladače, například při použití NVIDIA GPU Operator.

Pokud se chcete zapojit do spravovaného prostředí NVIDIA GPU, použijte mode: Driver a nastavte nvidia.managementMode: Managed. Spravované GPU se podporuje pro uzly NVIDIA GPU s Linuxem pomocí režimu zřizování AKS Machine API. Výchozí režim správy NVIDIA je Unmanaged.

spec:
  gpu:
    mode: Driver
    nvidia:
      managementMode: Managed

Úplný příklad GPU spravovaného službou NAP a postup ověření najdete v článku Uzly GPU spravované službou AKS.

Nastavení zabezpečení

Šifrování na hostiteli

Následující pole určuje, jestli je pro zřízené uzly povolené šifrování na úrovni hostitele. Když toto pole nastavíte na true, architektura NAP obsahuje pouze možnosti instance, které podporují šifrování v hostiteli.

spec:
  security:
    encryptionatHost: 
      # acceptable values: [true, false] default(or if not specified): false  
      false

Další informace o šifrování založeném na hostiteli najdete v dokumentaci k šifrování v tématu Šifrování v dokumentaci k hostiteli.

Vlastní klíče a sady šifrování disků

Architektura NAP podporuje clustery, které používají klíče spravované zákazníkem a sady šifrování disků. Povolte tyto možnosti na úrovni clusteru. Nemají AKSNodeClass pole, která potřebujete nastavit. Ujistěte se, že vaše identita clusteru má správné řízení přístupu na základě role (RBAC):

  • Identita clusteru má Reader přístup k sadě šifrování disků.
  • Prostředek sady Disk Encryption má Key Vault Crypto Service Encryption User přístup ke službě Azure Key Vault.

Informace o klíčích spravovaných zákazníkem a sadách šifrování disků povolených při vytváření clusteru najdete v dokumentaci ke klíčům spravovaným zákazníkem.

Povolení důvěryhodného spuštění v clusterech NAP

Clustery s povoleným automatickým zřizováním uzlů (NAP) můžou povolit důvěryhodné spuštění pomocí spec.security.trustedLaunch pole CRD třídy AKSNodeClass. Nastavte pole secureBoot a vTPM na true, aby se povolilo důvěryhodné spuštění pro všechny nové nebo existující uzly spravované architekturou NAP přidružené k tomuto CRD třídy AKSNodeClass.

spec:
  security:
  # Enables trusted lunch
  # Valid values: true, false; defaults to false if not specified
     trustedLaunch:
       secureBoot: true
       vTPM: true   

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:
        group: karpenter.azure.com
        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

  # Artifact Streaming- allows use of artifact streaming feature; To use this feature container images must also enable artifact streaming on ACR
  # Valid values: true, false; defaults to false if not specified
  artifactStreaming:
    enabled: true

  # LocalDNS mode - allows use of LocalDNS feature
  # Default: Disabled
  # Valid values: Preferred, Required, Disabled
  # vnetDNSOverrides and kubeDNSOverrides are both required, even when mode is Disabled
  # Each list must include the "." and "cluster.local" zones, and each zone must set all nine fields
  localDNS:
    mode: Disabled
    # vnetDNSOverrides apply to DNS traffic from pods with dnsPolicy:default and from kubelet
    vnetDNSOverrides:
      - zone: "."
        cacheDuration: "3600s"
        forwardDestination: VnetDNS   # the "." zone can't forward to ClusterCoreDNS in vnetDNSOverrides
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: PreferUDP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
      - zone: "cluster.local"
        cacheDuration: "3600s"
        forwardDestination: ClusterCoreDNS   # cluster.local can't forward to VnetDNS
        forwardPolicy: Sequential
        maxConcurrent: 1000
        protocol: ForceTCP
        queryLogging: Error
        serveStale: Immediate
        serveStaleDuration: "3600s"
    # kubeDNSOverrides apply to DNS traffic from pods with dnsPolicy:ClusterFirst
    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"

  # 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

  security:
  # Enables trusted lunch
  # Valid values: true, false; default(or if not specified): false  
     trustedLaunch:
      secureBoot: true
      vTPM: true
  # Encryption at host
     encryptionatHost: 
      # acceptable values: [true, false] default(or if not specified): false  
      false

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: