Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come configurare AKSNodeClass le risorse per definire impostazioni specifiche di Azure per il provisioning automatico dei nodi (NAP) nel servizio Azure Kubernetes usando Karpenter.
AKSNodeClass consente di personalizzare vari aspetti dei nodi di cui Karpenter esegue il provisioning, ad esempio l'immagine della macchina virtuale ( VM), le dimensioni del disco del sistema operativo , il numero massimo di pod per nodo e le configurazioni kubelet.
Importante
A partire dal 30 novembre 2025, il servizio Azure Kubernetes non supporta più o fornisce aggiornamenti della sicurezza per Azure Linux 2.0. L'immagine del nodo Linux 2.0 di Azure è bloccata alla versione 202512.06.0. A partire dal 31 marzo 2026, le immagini dei nodi verranno rimosse e non sarà possibile ridimensionare i pool di nodi. Eseguire la migrazione a una versione di Linux di Azure supportata aggiornando i pool di nodi a una versione di Kubernetes supportata o eseguendo la migrazione ad osSku AzureLinux3. Per altre informazioni, vedere il problema di ritiro di GitHub e l'annuncio di ritiro degli aggiornamenti di Azure. Per rimanere informati sugli annunci e sugli aggiornamenti, seguire le note di rilascio di AKS.
Panoramica delle risorse AKSNodeClass
Le risorse AKSNodeClass consentono di configurare impostazioni specifiche di Azure per la Protezione accesso alla rete. Ogni NodePool risorsa deve fare riferimento a un AKSNodeClass usando spec.template.spec.nodeClassRef. È possibile avere più NodePools che puntano allo stesso AKSNodeClass, consentendo di condividere configurazioni comuni di Azure tra pool di nodi diversi.
Configurazione della famiglia di immagini
Il imageFamily campo determina l'immagine della macchina virtuale predefinita e la logica di bootstrap per i nodi di cui è stato effettuato il provisioning tramite .AKSNodeClass Se non si specifica una famiglia di immagini, il valore predefinito è Ubuntu2204. Le GPU sono supportate con entrambe le famiglie di immagini in macchine virtuali compatibili.
Famiglie di immagini supportate
-
Ubuntu: Ubuntu 22.04 Long Term Support (LTS) è la distribuzione Linux predefinita per i nodi del servizio Azure Kubernetes. -
AzureLinux: Azure Linux è la distribuzione linux alternativa di Microsoft per i carichi di lavoro del servizio Azure Kubernetes. Per altre informazioni, vedere la documentazione di Azure Linux
Configurazione della famiglia di immagini di esempio
L'esempio seguente configura il AKSNodeClass per utilizzare la famiglia di immagini AzureLinux.
spec:
imageFamily: AzureLinux
Configurazione dell'immagine del nodo conforme a FIPS
È anche possibile abilitare immagini dei nodi conformi a FIPS (Federal Information Process Standard). Per maggiori informazioni su FIPS in AKS, consulta la documentazione di FIPS
Il fipsMode campo è impostato per impostazione predefinita su Disabilitato e può essere impostato sulle opzioni seguenti:
- FIPS: selezionare immagini dei nodi conformi a FIPS
- Disabilitato: non usare immagini dei nodi conformi a FIPS
L'esempio seguente configura "AKSNodeClass" per selezionare immagini di nodi conformi a FIPS impostando fipsMode su FIPS:
spec:
fipsMode: FIPS
Configurazione della subnet della rete virtuale
Il vnetSubnetID campo specifica la subnet della rete virtuale di Azure da usare per il provisioning delle interfacce di rete del nodo. Questo campo è facoltativo. Se non si specifica una subnet, NAP usa la subnet predefinita configurata durante l'installazione di Karpenter. Per ulteriori informazioni, vedere Configurazioni della subnet per NAP.
Configurazione di subnet di esempio
L'ID subnet deve essere nel formato di Azure Resource Manager completo, come illustrato nell'esempio seguente:
spec:
vnetSubnetID: "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/virtualNetworks/{vnet-name}/subnets/{subnet-name}"
Configurazione delle dimensioni del disco del sistema operativo
Il campo osDiskSizeGB specifica le dimensioni del disco del sistema operativo in gigabyte. Il valore predefinito è 128 GB e il valore minimo è 30 GB.
Prendere in considerazione dimensioni del disco del sistema operativo maggiori per i carichi di lavoro che:
- Archiviare dati significativi in locale.
- Richiedi spazio aggiuntivo per le immagini del contenitore.
- Requisiti elevati di I/O del disco.
Configurazione delle dimensioni del disco del sistema operativo di esempio
spec:
osDiskSizeGB: 256 # 256 GB OS disk
Configurazione temporanea del disco del sistema operativo
NAP usa automaticamente dischi del sistema operativo temporanei se disponibili e se adatti alle dimensioni del disco richieste. I dischi temporanei del sistema operativo offrono prestazioni migliori e costi inferiori rispetto ai dischi gestiti.
Criteri di selezione dei dischi temporanei
Il sistema sceglie automaticamente i dischi temporanei negli scenari seguenti:
- Il tipo di istanza di macchina virtuale supporta i dischi temporanei del sistema operativo.
- La capacità del disco effimero è maggiore o uguale alla richiesta
osDiskSizeGB. - La macchina virtuale ha una capacità di archiviazione temporanea sufficiente.
Se queste condizioni non vengono soddisfatte, il sistema esegue il fallback per l'uso di dischi gestiti.
Tipi di disco temporanei e definizione delle priorità
Le VM di Azure possono avere tipi diversi di archiviazione temporanea. Il sistema usa l'ordine di priorità seguente:
- Dischi NVMe (prestazioni più elevate)
- Dischi della cache (prestazioni bilanciate)
- Dischi delle risorse (prestazioni di base)
Esempio di configurazione temporanea del disco
È possibile usare i requisiti del pool di nodi per garantire che i nodi dispongano di capacità temporanea del disco sufficiente, come illustrato nell'esempio seguente:
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
Questa configurazione garantisce che vengano selezionati solo i tipi di istanza di VM con dischi temporanei di dimensioni superiori a 128 GB, garantendo l'utilizzo temporaneo del disco per le dimensioni del disco del sistema operativo specificate.
Configurazione massima dei pod
Il campo maxPods specifica il numero massimo di pod che possono essere pianificati in un nodo. Questa impostazione influisce sia sulla densità del cluster che sulla configurazione di rete.
Il valore minimo per maxPods è 10 e il valore massimo è 250.
Comportamento predefinito per maxPods
Il comportamento predefinito per maxPods dipende dalla configurazione del plug-in di rete. La tabella seguente riepiloga le impostazioni predefinite:
| Configurazione del plug-in di rete | Impostazione predefinita maxPods per nodo |
|---|---|
| Azure CNI con rete standard (v1 o NodeSubnet) | 30 |
| Azure CNI con rete di sovrapposizione | 250 |
| Nessuno (nessun plug-in di rete) | 250 |
| Altre configurazioni | 110 (impostazione predefinita di Kubernetes standard) |
Configurazione di esempio per il numero massimo di pod
spec:
maxPods: 50 # Allow up to 50 pods per node
Configurazione localDNS
LocalDNS distribuisce un proxy DNS a livello di nodo che risolve le query DNS più vicine ai carichi di lavoro, riducendo la latenza delle query e migliorando la resilienza durante le interruzioni DNS temporanee. Per altre informazioni, vedere la documentazione di LocalDNS. Per impostazione predefinita, LocalDNS è impostato su Disabilitato e può essere configurato per le opzioni seguenti:
-
Disabled(impostazione predefinita): disabilita la funzionalità LocalDNS. Le query DNS non vengono risolte localmente nel nodo. -
Preferred, AKS gestisce l'abilitazione di LocalDNS in base alla versione Kubernetes del pool di nodi. La configurazione viene sempre convalidata e inclusa, ma LocalDNS non è abilitata a meno che non venga usata la versione corretta di Kubernetes. -
Required- LocalDNS viene applicato al pool di nodi se tutti i prerequisiti sono soddisfatti. Se i requisiti non sono soddisfatti, la distribuzione ha esito negativo.
Esempio di configurazione LocalDNS
È possibile personalizzare le configurazioni LocalDNS, vnetDNSOverrides ad esempio e kubeDNSOverrides. Per altri dettagli sui plug-in supportati, vedere Personalizzare 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"
Configurazione del kubelet
La sezione kubelet consente di configurare vari parametri kubelet che influiscono sul comportamento del nodo. Questi parametri sono argomenti kubelet tipici, quindi il provider di Azure li passa semplicemente al kubelet nel nodo.
Importante
Configurare attentamente le impostazioni kubelet e testare prima le modifiche apportate agli ambienti non di produzione.
Gestione della CPU
Le impostazioni seguenti controllano il comportamento di gestione della CPU per kubelet:
spec:
kubelet:
cpuManagerPolicy: "static" # or "none"
cpuCFSQuota: true
cpuCFSQuotaPeriod: "100ms"
-
cpuManagerPolicy: controlla il modo in cui kubelet alloca le risorse della CPU. Impostare su"static"per l'associazione della CPU nei carichi di lavoro sensibili alla latenza. -
cpuCFSQuota: abilita la tutela della quota di Utilità di pianificazione completamente equa (CFS) della CPU per i contenitori che specificano i limiti della CPU. -
cpuCFSQuotaPeriod: imposta il periodo di quota di CPU CFS.
GC delle immagini
Le impostazioni seguenti controllano il comportamento della raccolta dei rifiuti delle immagini per il kubelet:
spec:
kubelet:
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
Queste impostazioni controllano quando kubelet esegue la GC delle immagini del contenitore:
-
imageGCHighThresholdPercent: percentuale di utilizzo del disco che attiva l'operazione di GC delle immagini. -
imageGCLowThresholdPercent: Percentuale di utilizzo del disco di destinazione dopo la raccolta dei rifiuti.
Gestione della topologia
L'impostazione seguente controlla i criteri di gestione della topologia per kubelet:
spec:
kubelet:
topologyManagerPolicy: "best-effort" # none, restricted, best-effort, single-numa-node
Il gestore della topologia consente di coordinare l'allocazione delle risorse per i carichi di lavoro sensibili alla latenza tra le risorse della CPU e del dispositivo (ad esempio GPU).
Configurazione del sistema
Le impostazioni seguenti consentono di configurare parametri di sistema aggiuntivi per kubelet:
spec:
kubelet:
allowedUnsafeSysctls:
- "kernel.msg*"
- "net.ipv4.route.min_pmtu"
containerLogMaxSize: "50Mi"
containerLogMaxFiles: 5
podPidsLimit: 4096
-
allowedUnsafeSysctls: elenco di sysctls non sicuri consentiti che i pod possono usare. -
containerLogMaxSize: dimensione massima dei file di log del contenitore prima della rotazione. -
containerLogMaxFiles: numero massimo di file di log del contenitore da conservare. -
podPidsLimit: numero massimo di processi consentiti in qualsiasi pod.
Configurazione dei tag delle risorse di Azure
È possibile specificare i tag delle risorse di Azure che si applicano a tutte le istanze di macchina virtuale create usando una determinata AKSNodeClass risorsa. I tag sono utili per tenere traccia di costi, organizzazione delle risorse e requisiti di conformità.
Limitazioni dei tag
- I tag delle risorse di Azure hanno un limite di 50 tag per risorsa.
- I nomi dei tag non fanno distinzione tra maiuscole e minuscole, mentre i valori dei tag distinguono maiuscole e minuscole.
- Azure riserva alcuni nomi di tag che non possono essere usati. Per altre informazioni, vedere Linee guida e limiti per i tag.
Configurazione dei tag di esempio
spec:
tags:
Environment: "production"
Team: "platform"
Application: "web-service"
CostCenter: "engineering"
Esempio di configurazione completo AKSNodeClass
L'esempio seguente illustra una configurazione completa AKSNodeClass che include tutte le impostazioni descritte in questo articolo:
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
Passaggi successivi
Per altre informazioni sul provisioning automatico dei nodi in AKS (Azure Kubernetes Service), vedere gli articoli seguenti: