Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek vysvětluje, jak nakonfigurovat AKSNodeClass prostředky pro definování nastavení specifické pro Azure pro automatické zřizování uzlů (NAP) ve službě 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é
Od 30. listopadu 2025 už Azure Kubernetes Service (AKS) nepodporuje ani neposkytuje aktualizace zabezpečení pro Azure Linux 2.0. Image uzlu Azure Linux 2.0 je zafixována u verze 202512.06.0. Od 31. března 2026 se image uzlů odeberou a nebudete moct škálovat fondy uzlů. Přejděte na podporovanou verzi Azure Linuxu aktualizací poolů uzlů na podporovanou verzi Kubernetes nebo migrací na osSku AzureLinux3. Další informace najdete v tématu Problém s vyřazením z GitHubu a oznámení o vyřazení aktualizací Azure. Pokud chcete mít přehled o oznámeních a aktualizacích, postupujte podle poznámek k verzi AKS.
Přehled prostředků AKSNodeClass
AKSNodeClass Prostředky umožňují konfigurovat nastavení specifická pro Azure pro architekturu NAP. Každý NodePool prostředek musí odkazovat na AKSNodeClass pomocí spec.template.spec.nodeClassRef. Můžete mít více NodePools odkazů, které odkazují na stejný AKSNodeClass, což vám umožní sdílet běžné konfigurace Azure mezi různými fondy uzlů.
Konfigurace rodiny imagí
Toto imageFamily pole určuje 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 obrázků nezadáte, výchozí hodnota je Ubuntu2204. Gpu jsou podporována s oběma rodinami imagí na kompatibilních velikostech virtuálních počítačů.
Podporované rodiny obrázků
-
Ubuntu: Ubuntu 22.04 Long Term Support (LTS) je výchozí linuxová distribuce pro uzly AKS. -
AzureLinux: Azure Linux je alternativní distribuce Linuxu od Microsoftu pro úlohy AKS. Další informace najdete v dokumentaci k Azure Linuxu.
Příklad konfigurace sady obrazů
Následující příklad nakonfiguruje AKSNodeClass tak, aby používal obrazovou rodinu AzureLinux.
spec:
imageFamily: AzureLinux
Konfigurace obrazu uzlu ve shodě se standardem FIPS
Můžete také povolit uzlové image kompatibilní se standardem FIPS (Federal Information Process Standard). Další informace o FIPS v AKS najdete v naší 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 Manageru (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
Virtuální počítače Azure 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ími sítěmi (v1 nebo NodeSubnet) | 30 |
| Azure CNI s překryvným síťováním | 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: "30s"
forwardDestination: VnetDNS
forwardPolicy: Random
maxConcurrent: 80
protocol: ForceTCP
queryLogging: Log
serveStale: Immediate
serveStaleDuration: "100s"
- zone: "cluster.local"
cacheDuration: "40s"
forwardDestination: VnetDNS
forwardPolicy: Sequential
maxConcurrent: 70
protocol: PreferUDP
queryLogging: Error
serveStale: Disable
serveStaleDuration: "30s"
kubeDNSOverrides:
- zone: "."
cacheDuration: "30s"
forwardDestination: ClusterCoreDNS
forwardPolicy: RoundRobin
maxConcurrent: 100
protocol: PreferUDP
queryLogging: Log
serveStale: Immediate
serveStaleDuration: "60s"
- zone: "cluster.local"
cacheDuration: "10s"
forwardDestination: ClusterCoreDNS
forwardPolicy: Sequential
maxConcurrent: 50
protocol: PreferUDP
queryLogging: Error
serveStale: Disable
serveStaleDuration: "30s"
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 je poskytovatel Azure 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.
Uvolňování paměti obrázku
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í uvolňování paměti imagí 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.
Konfigurace značek prostředků Azure
Můžete zadat značky prostředků Azure, které se vztahují na všechny instance virtuálních počítačů vytvořené pomocí konkrétního AKSNodeClass prostředku. 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
- Značky prostředků Azure mají limit 50 značek na 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é názvy štítků, 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
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
# 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: