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 AKSNodeClass resurser för att definiera Azure-specifika inställningar för automatisk nodetablering (NAP) i Azure Kubernetes Service (AKS) med Karpenter.
AKSNodeClass gör att du kan anpassa olika aspekter av de noder som Karpenter etablerar, till exempel VM-avbildningen, operativsystemdiskstorleken (OS), maximalt antal poddar per nod och kubelet-konfigurationer.
Viktigt!
Från och med November 30, 2025 Azure Kubernetes Service (AKS) inte längre stöder eller tillhandahåller säkerhetsuppdateringar för Azure Linux 2.0. Nodbilden Azure Linux 2.0 är fryst på 202512.06.0 release. Från och med den 31 mars 2026 tas nodbilder bort och du kan inte skala dina nodpooler. Migrera till en Azure Linux-version som stöds genom att uppgradera dina nodpooler till en Kubernetes-version som stöds eller migrera till osSku AzureLinux3. Mer information finns i pensionsfrågan på GitHub och pensionsmeddelandet från Azure Updates. För att hålla dig informerad om meddelanden och uppdateringar, följ AKS-versionsinformation.
Översikt över AKSNodeClass-resurser
AKSNodeClass resurser gör att du kan konfigurera Azure-specifika inställningar för NAP. Varje NodePool resurs måste hänvisa till en AKSNodeClass med spec.template.spec.nodeClassRef. Du kan ha flera NodePools som pekar på samma AKSNodeClass, så att du kan dela vanliga Azure konfigurationer i olika nodpooler.
Konfiguration av bildfamilj
Fältet imageFamily anger standardlogik för vm-avbildning och bootstrapping för noder som etablerats via AKSNodeClass. Om du inte anger en avbildningsfamilj används standardversionen av operativsystemet enligt kubernetes-versionen. GPU:er stöds med båda avbildningsfamiljerna i kompatibla VM-storlekar. Mer information om standardversionen av operativsystemet per Kubernetes-version finns i dokumentationen om AKS OS-version.
Bildfamiljer som stöds
-
Ubuntu: Ubuntu är standarddistributionen av Linux för AKS-noder.- Os-versionen ändras som standard baserat på din Kubernetes-version. Ubuntu 22.04 är standard för Kubernetes version 1.25 till 1.33. Ubuntu 24.04 är standard för Kubernetes version 1.34 och senare.
-
AzureLinux: Azure Linux är Microsoft alternativa Linux-distribution för AKS-arbetsbelastningar. Mer information finns i dokumentationen om Azure Linux.
Exempel på konfiguration av bildfamilj
I följande exempel konfigureras AKSNodeClass att använda avbildningsfamiljen AzureLinux :
spec:
imageFamily: AzureLinux
Konfiguration av FIPS-kompatibel nodbild
Du kan också aktivera FIPS-kompatibla nodbilder (Federal Information Processing Standards). Mer information om FIPS i AKS finns i FIPS-dokumentationen.
Fältet fipsMode är som standard inställt på Inaktiverad och kan ställas in på följande alternativ:
- FIPS – välj FIPS-kompatibla nodbilder
- Inaktiverad – använd inte FIPS-kompatibla nodbilder
I följande exempel konfigureras AKSNodeClass för att välja FIPS-kompatibla nodavbildningar genom att ange fipsMode till FIPS:
spec:
fipsMode: FIPS
Artefaktströmning
Med Artefaktströmning kan du strömma containeravbildningar från Azure Container Registry (ACR) till Azure Kubernetes Service (AKS). AKS hämtar bara de nödvändiga lagren för den första poddstarten, vilket minskar den tid det tar att distribuera dina arbetsbelastningar.
Förutsättningar
- Artefaktströmning kräver att du har en Premium-nivå-ACR integrerad med ditt AKS-kluster.
- Artefaktströmning måste vara aktiverat i ACR.
Mer information om hur du aktiverar artefaktströmning i ACR finns i dokumentationen för artefaktströmning .
Aktivera artefaktströmning i NAP-kluster
Kluster med NAP (Node Auto Provisioning) aktiverat kan aktivera artefaktströmning med hjälp spec.artifactStreaming.enabled av fältet i AKSNodeClass CRD. Ange det här fältet till true för att aktivera artefaktströmning för alla nya eller befintliga NAP-hanterade noder som är associerade med denna AKSNodeClass CRD.
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
Om du vill använda artefaktströmning på AKS NAP-hanterade noder måste du även aktivera artefaktströmning i Azure Container Registry (ACR). Om du inte anger det här alternativet i ACR är fältet som standard falskt.
Konfiguration av virtuellt nätverk (VNet) undernät
Fältet vnetSubnetID anger vilka Azure VNet-undernät som ska användas för etablering av nodnätverksgränssnitt. Det här fältet är valfritt. Om du inte anger något undernät använder NAP det standardundernät som konfigurerades under Karpenter-installationen. Mer information finns i Undernätskonfigurationer för NAP.
Exempel på konfiguration av undernät
Undernäts-ID:t måste vara i fullständigt Azure Resource Manager (ARM)-format, som du ser i följande exempel:
spec:
vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"
Konfiguration av os-diskstorlek
Fältet osDiskSizeGB anger storleken på OS-disken i gigabyte. Standardvärdet är 128 GB och minimivärdet är 30 GB.
Överväg större os-diskstorlekar för arbetsbelastningar som:
- Lagra betydande data lokalt.
- Kräv extra utrymme för containeravbildningar.
- Har höga I/O-krav för diskar.
Exempel på konfiguration av os-diskstorlek
spec:
osDiskSizeGB: 256 # 256 GB OS disk
Tillfälliga os-diskkonfigurationer
NAP använder automatiskt tillfälliga OS-diskar när de är tillgängliga och lämpliga för den begärda diskstorleken. Tillfälliga OS-diskar ger bättre prestanda och lägre kostnad jämfört med hanterade diskar.
Tillfälliga urvalsvillkor för diskar
Systemet väljer automatiskt tillfälliga diskar i följande scenarier:
- Vm-instanstypen stöder tillfälliga OS-diskar.
- Den tillfälliga diskkapaciteten är större än eller lika med den begärda
osDiskSizeGB. - Den virtuella datorn har tillräckligt med tillfällig lagringskapacitet.
Om dessa villkor inte uppfylls återgår systemet till att använda hanterade diskar.
Tillfälliga disktyper och prioritering
Azure virtuella datorer kan ha olika typer av tillfällig lagring. Systemet använder följande prioritetsordning:
- NVMe-diskar (högsta prestanda)
- Cachediskar (balanserade prestanda)
- Resursdiskar (grundläggande prestanda)
Exempel på tillfällig diskkonfiguration
Du kan använda nodpoolkrav för att säkerställa att noderna har tillräcklig tillfällig diskkapacitet, som du ser i följande exempel:
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
Den här konfigurationen säkerställer att endast vm-instanstyper med tillfälliga diskar som är större än 128 GB väljs, vilket garanterar tillfällig diskanvändning för den angivna os-diskstorleken.
Maximal konfiguration för pods
Fältet maxPods anger det maximala antalet poddar som kan schemaläggas på en nod. Den här inställningen påverkar både klusterdensitet och nätverkskonfiguration.
Minimivärdet för maxPods är 10 och det maximala värdet är 250.
Standardbeteende för maxPods
Standardbeteendet för maxPods beror på nätverkskonfigurationen för plugin-programmet. I följande tabell sammanfattas standardvärdena:
| Konfiguration av plugin-program för nätverk | Standard maxPods per nod |
|---|---|
| Azure CNI med standardnätverk (v1 eller NodeSubnet) | 30 |
| Azure CNI med överläggsnätverk | 250 |
| Ingen (inget plugin-program för nätverk) | 250 |
| Andra konfigurationer | 110 (standardinställning för Kubernetes) |
Exempel på maximal poddkonfiguration
spec:
maxPods: 50 # Allow up to 50 pods per node
LocalDNS-konfiguration
LocalDNS distribuerar en DNS-proxy på nodnivå som löser DNS-frågor närmare arbetsbelastningar, vilket minskar frågesvarstiden och förbättrar återhämtning under tillfälliga DNS-avbrott. Mer information finns i LocalDNS-dokumentationen. Som standard är LocalDNS inställt på Inaktiverad och kan konfigureras till följande alternativ:
-
Disabled(standard) – Inaktiverar funktionen LocalDNS. DNS-frågor löses inte upp lokalt på noden. -
Preferred– AKS hanterar LocalDNS-aktivering baserat på Kubernetes-versionen av nodpoolen. Konfigurationen verifieras och ingår alltid, men LocalDNS är inte aktiverat om inte rätt Kubernetes-version används. -
Required– LocalDNS tillämpas på nodpoolen om alla krav är uppfyllda. Om kraven inte uppfylls misslyckas distributionen.
Exempel på LocalDNS-konfiguration
Du kan anpassa LocalDNS-konfigurationer som vnetDNSOverrides och kubeDNSOverrides. Mer information om plugin-program som stöds finns i Anpassa 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"
Kubelet-konfiguration
I kubelet avsnittet kan du konfigurera olika kubelet-parametrar som påverkar nodbeteendet. Dessa parametrar är typiska kubelet-argument, så Azure-providern skickar dem helt enkelt till kubeleten på noden.
Viktigt!
Konfigurera kubelet-inställningar noggrant och testa eventuella ändringar i icke-produktionsmiljöer först.
CPU-hantering
Följande inställningar styr cpu-hanteringsbeteendet för kubelet:
spec:
kubelet:
cpuManagerPolicy: "static" # or "none"
cpuCFSQuota: true
cpuCFSQuotaPeriod: "100ms"
-
cpuManagerPolicy: Styr hur kubelet allokerar CPU-resurser. Ange till"static"för CPU-pinning i svarstidskänsliga arbetsbelastningar. -
cpuCFSQuota: Aktiverar kvottillämpning av CPU Completely Fair Scheduler (CFS) för containrar som anger CPU-gränser. -
cpuCFSQuotaPeriod: Ställer in CPU CFS kvotperioden.
Avbildningsavfallsinsamling
Följande inställningar styr beteendet för skräpinsamling av avbildningar för kubelet:
spec:
kubelet:
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
De här inställningarna styr när kubelet utför skräpinsamling av containeravbildningar:
-
imageGCHighThresholdPercent: Diskanvändningsprocent som utlöser skräpinsamling av avbildningar. -
imageGCLowThresholdPercent: Måldiskanvändning i procent efter skräpinsamling.
Topologihantering
Följande inställning styr topologihanterarens princip för kubelet:
spec:
kubelet:
topologyManagerPolicy: "best-effort" # none, restricted, best-effort, single-numa-node
Topologihanteraren hjälper till att samordna resursallokering för svarstidskänsliga arbetsbelastningar mellan processor- och enhetsresurser (till exempel GPU).
Systemkonfiguration
Med följande inställningar kan du konfigurera extra systemparametrar för kubelet:
spec:
kubelet:
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
containerLogMaxSize: "50Mi"
containerLogMaxFiles: 5
podPidsLimit: 4096
-
allowedUnsafeSysctls: Lista över tillåtna osäkra sysctls som poddar kan använda. -
containerLogMaxSize: Maximal storlek på containerloggfiler före rotation. -
containerLogMaxFiles: Maximalt antal containerloggfiler som ska behållas. -
podPidsLimit: Maximalt antal processer som tillåts i alla poddar.
Konfigurationsinställningar för anpassade Linux-operativsystem
I LinuxOSConfig avsnittet kan du konfigurera olika kubelet-parametrar som påverkar nodbeteendet. Dessa parametrar är typiska anpassade OS-argument, så NAP skickar dem helt enkelt till kubeleten på noden.
Mer information om anpassade konfigurationsinställningar för Linux-operativsystem, standardvärden och överväganden finns i referensen för anpassade nodkonfigurationsparametrar.
Viktigt!
Konfigurera inställningarna för Linux-operativsystemet noggrant och testa eventuella ändringar i icke-produktionsmiljöer först.
Inställningar för gränser för Linux-filhandtag
Använd följande inställningar för att ange inställningarna för filsystemet.
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
Inställningar för Linux-socket och nätverksjustering
Använd följande inställningar för att ange TCP- och nätverksinställningen.
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
Inställningar för Gränsen för Linux-arbetare
Använd följande inställningar för att ange kernelinställningen.
spec:
linuxOSConfig:
# Kernel Settings
kernelThreadsMax: 100000 # Range: 20-513785 Default: Dynamically calculated
Inställningar för virtuellt Linux-minne
Använd följande alternativ för att justera driften av linux-undersystemet för virtuellt minne i Linux-kerneln och skrivning av smutsiga data till 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
GPU-inställningar
Använd följande fält för att aktivera anpassad GPU-drivrutinsinstallation, till exempel med NVIDIA GPU-operatorn.
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
Säkerhetsinställningar
Kryptering på värd
Följande fält anger om kryptering på värdnivå är aktiverat för etablerade noder. När du anger det här fältet till true, tas bara instanstyper som stöder kryptering på värdnivå med i NAP.
spec:
security:
encryptionatHost:
# acceptable values: [true, false] default(or if not specified): false
false
Mer information om värdbaserad kryptering finns i Dokumentation om kryptering på värd.
Kundhanterade nycklar och diskkrypteringsuppsättningar
NAP stöder kluster som använder kundhanterade nycklar och diskkrypteringsuppsättningar. Aktivera dessa alternativ på klusternivå. De har AKSNodeClass inte fält som du behöver ange. Se till att klusteridentiteten har rätt rollbaserad åtkomstkontroll (RBAC):
- Klusteridentiteten har
Readeråtkomst till diskkrypteringsuppsättningen. - Diskkrypteringsuppsättningsresursen har
Key Vault Crypto Service Encryption Useråtkomst till Azure Key Vault.
Mer information om kundhanterade nycklar och diskkrypteringsuppsättningar som aktiveras när klustret skapas finns i dokumentationen om kundhanterade nycklar.
Azure konfiguration av resurstaggar
Du kan ange Azure resurstaggar som gäller för alla VM-instanser som skapats med hjälp av en viss AKSNodeClass resurs. Taggar är användbara för kostnadsspårning, resursorganisation och efterlevnadskrav.
Taggbegränsningar
- Azure resurstaggar har en gräns på 50 taggar per resurs.
- Taggnamn är inte skiftlägeskänsliga, men taggvärden är skiftlägeskänsliga.
- Azure reserverar vissa taggnamn som inte kan användas. Mer information finns i Taggvägledning och begränsningar.
Konfiguration av exempeltaggar
spec:
tags:
Environment: "production"
Team: "platform"
Application: "web-service"
CostCenter: "engineering"
Omfattande AKSNodeClass konfigurationsexempel
I följande exempel visas en omfattande AKSNodeClass konfiguration som innehåller alla inställningar som beskrivs i den här artikeln:
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
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
Nästa steg
Mer information om automatisk nodetablering i AKS finns i följande artiklar: