Parametri di configurazione dei nodi personalizzati per Servizio Azure Kubernetes (AKS)

Questo articolo elenca i parametri di configurazione dei nodi personalizzati supportati per i pool di nodi Servizio Azure Kubernetes (AKS). Per informazioni su come creare e applicare file di configurazione, vedere Personalizzare la configurazione del nodo per i pool di nodi del servizio Azure Kubernetes.

Parametri di configurazione personalizzati kubelet

Importante

Quando si abilitano sysctls non sicuri, si assume la responsabilità della stabilità dei nodi e del comportamento del carico di lavoro. Gli sysctls non sicuri possono potenzialmente causare instabilità del nodo o vulnerabilità di sicurezza se non sono configurati correttamente. Assicurati di comprendere le implicazioni dell'abilitazione di sysctls non sicuri specifici e di monitorare attentamente l'integrità del cluster dopo aver apportato le modifiche.

Configurazione personalizzata di Kubelet per Linux

Parametro Valori/intervallo consentiti Predefinito Description
cpuManagerPolicy nessuno, statico none La politica statica consente ai contenitori in pod garantiti con richieste di CPU intere di accedere alle CPU esclusive nel nodo.
cpuCfsQuota vero, falso true Abilitare/disabilitare l'imposizione della quota di CPU CFS per i contenitori che specificano i limiti della CPU.
cpuCfsQuotaPeriod Intervallo in millisecondi (ms) 100ms Imposta il valore del periodo di quota CFS della CPU.
imageGcHighThreshold 0-100 85 Percentuale di utilizzo del disco dopo la quale viene sempre eseguita l'operazione di Garbage Collection dell'immagine. Utilizzo minimo del disco che attiva il processo di Garbage Collection (pulizia automatica della memoria). Per disabilitare l'operazione di Garbage Collection delle immagini, impostare su 100.
imageGcLowThreshold 0-100, non superiore a imageGcHighThreshold 80 Percentuale di utilizzo del disco prima dell'esecuzione dell’operazione di Garbage Collection delle immagini. Utilizzo minimo del disco che può attivare l’operazione di Garbage Collection.
topologyManagerPolicy nessuno, miglior tentativo, ristretto, singolo nodo NUMA none Ottimizzare l'allineamento dei nodi NUMA. Per altre informazioni, vedere Controllare i criteri di gestione della topologia in un nodo.
allowedUnsafeSysctls kernel.shm*, kernel.msg*, kernel.sem, fs.mqueue.*net.* Nessuno Elenco consentito di sysctls non sicuri o modelli sysctl non sicuri.
containerLogMaxSizeMB Dimensione in megabyte (MB) 50 Dimensioni massime ( ad esempio, 10 MB) di un file di log del contenitore prima della rotazione.
containerLogMaxFiles 2 o superiore 5 Numero massimo di file di log del contenitore da conservare per un contenitore.
podMaxPids Da -1 al limite PID del kernel -1 (infinito) Numero massimo di ID di processo che possono essere eseguiti in un pod.
seccompDefault Unconfined, RuntimeDefault Unconfined Imposta il profilo seccomp predefinito per tutti i carichi di lavoro. RuntimeDefault usa il profilo seccomp predefinito di containerd, limitando determinate chiamate di sistema per migliorare la sicurezza. Le chiamate di sistema con restrizioni hanno esito negativo. Unconfined non applica restrizioni alle chiamate di sistema, consentendo tutte le chiamate di sistema e riducendo la sicurezza. Per ulteriori informazioni, vedere il profilo seccomp predefinito di containerd. Questo parametro è in versione di anteprima. Registrare il flag di funzionalità "KubeletDefaultSeccompProfilePreview" utilizzando il comando con az feature register.
kubeReserved.cpuMillicores 1 alla capacità della CPU del pool di nodi in millicore Nessuno Riserva la CPU per i daemon di sistema Kubernetes nei pool di nodi Linux. Questo parametro è in anteprima e richiede il flag della funzionalità CustomNodeConfigPreview.
kubeReserved.memoryMB Da 1 alla capacità di memoria del pool di nodi in MiB Nessuno Riserva memoria per i daemon di sistema Kubernetes nei pool di nodi Linux. Questo parametro è in anteprima e richiede il flag della funzionalità CustomNodeConfigPreview.
hardEvictionThreshold.memoryAvailable <number>Ki, <number>Mi, <number>Gio <number>% dove percentuale non è superiore a 100 Nessuno Imposta la soglia di espulsione rigida del kubelet per la memoria disponibile nei pool di nodi Linux. Questo parametro è in anteprima e richiede il flag della funzionalità CustomNodeConfigPreview.
hardEvictionThreshold.nodeFsAvailable <number>Ki, <number>Mi, <number>Gio <number>% dove percentuale non è superiore a 100 Nessuno Impostare la soglia di espulsione forzata di kubelet per lo spazio disponibile del file system del nodo nei pool di nodi Linux. Questo parametro è in anteprima e richiede il flag della funzionalità CustomNodeConfigPreview.
hardEvictionThreshold.nodeFsInodesFree <number> o <number>% dove percentuale non è superiore a 100 Nessuno Imposta la soglia di espulsione forza del kubelet per i nodi liberi del file system del nodo nei pool di nodi Linux. Questo parametro è in anteprima e richiede il flag della funzionalità CustomNodeConfigPreview.

Configurazione personalizzata di Windows kubelet

Parametro Valori/intervallo consentiti Predefinito Description
imageGcHighThreshold 0-100 85 Percentuale di utilizzo del disco dopo la quale viene sempre eseguita l'operazione di Garbage Collection dell'immagine. Utilizzo minimo del disco che attiva il processo di Garbage Collection (pulizia automatica della memoria). Per disabilitare l'operazione di Garbage Collection delle immagini, impostare su 100.
imageGcLowThreshold 0-100, non superiore a imageGcHighThreshold 80 Percentuale di utilizzo del disco prima dell'esecuzione dell’operazione di Garbage Collection delle immagini. Utilizzo minimo del disco che può attivare l’operazione di Garbage Collection.
containerLogMaxSizeMB Dimensione in megabyte (MB) 10 Dimensioni massime ( ad esempio, 10 MB) di un file di log del contenitore prima della rotazione.
containerLogMaxFiles 2 o superiore 5 Numero massimo di file di log del contenitore da conservare per un contenitore.

Parametri di configurazione del sistema operativo personalizzati linux

Importante

Per semplificare la ricerca e la leggibilità, le impostazioni del sistema operativo vengono visualizzate in questo articolo in base al nome, ma devono essere aggiunte al file JSON di configurazione o all'API del servizio Azure Kubernetes usando la convenzione di maiuscola camelCase.

Ad esempio, se si modifica l'impostazione vm.max_map_count , è necessario riformattarla vmMaxMapCount in nel file JSON di configurazione.

Limiti di gestione dei file in Linux

Quando si servono quantità elevate di traffico, il traffico proviene in genere da un numero elevato di file locali. È possibile modificare le impostazioni del kernel e i limiti predefiniti seguenti per consentire di gestire di più, a costo di memoria di sistema.

La tabella seguente elenca i limiti di handle di file che è possibile personalizzare per ogni pool di nodi:

Setting Valori/intervallo consentiti Ubuntu 22.04 predefinito Ubuntu 24.04 default Azure Linux 3.0 predefinito Description
fs.file-max 8192 - 9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 Numero massimo di handle di file allocati dal kernel Linux. Questo valore è impostato sul valore massimo possibile (2^63-1) per evitare l'esaurimento del descrittore di file e garantire handle di file a livello di sistema illimitati per i carichi di lavoro in contenitori.
fs.inotify.max_user_watches 781250 - 2097152 1048576 1048576 1048576 Numero massimo di espressioni di controllo file consentite dal sistema. Ogni espressione di controllo è di circa 90 byte in un kernel a 32 bit e di circa 160 byte in un kernel a 64 bit.
fs.aio-max-nr 65536 - 6553500 65536 65536 65536 L'aio-nr mostra il numero corrente di richieste di I/O asincrone a livello di sistema. aio-max-nr consente di modificare il valore massimo che può acquisire aio-nr.
fs.nr_open 8192 - 20000500 1048576 1048576 1073741816 Numero massimo di handle di file che un processo può allocare.

Note

Il fs.file-max parametro è impostato su 9223372036854775807 (valore massimo per un intero con segno a 64 bit) in Ubuntu e Linux di Azure in base alle impostazioni predefinite upstream. Questa configurazione:

  • Impedisce attacchi Denial of Service basati sull'esaurimento del descrittore di file a livello di sistema.
  • Assicura che i carichi di lavoro dei contenitori non subiscano mai un collo di bottiglia dovuti ai limiti di handle di file a livello di sistema.
  • Mantiene la sicurezza tramite limiti per processo (fs.nr_open e ulimit) che si applicano ancora ai singoli processi.
  • Ottimizza per le piattaforme contenitore in cui molti contenitori possono essere eseguiti contemporaneamente, ognuno potenzialmente aprendo molti file e connessioni di rete.

Socket Linux e ottimizzazione di rete

Per i nodi dell'agente, che devono gestire un numero elevato di sessioni simultanee, è possibile usare le opzioni TCP e di rete seguenti e modificarle per ogni pool di nodi:

Setting Valori/intervallo consentiti Ubuntu 22.04 predefinito Ubuntu 24.04 default Azure Linux 3.0 predefinito Description
net.core.somaxconn 4096 - 3240000 16384 16384 16384 Numero massimo di richieste di connessione che possono essere accodate per qualsiasi socket di ascolto specificato. Limite superiore per il valore del parametro backlog passato alla funzione listen(2). Se l'argomento backlog è maggiore di somaxconn, viene troncato automaticamente a questo limite.
net.core.netdev_max_backlog 1000 - 3240000 1000 1000 1000 Numero massimo di pacchetti, accodati sul lato INPUT, quando l'interfaccia riceve pacchetti più velocemente di quanto il kernel possa elaborarli.
net.core.rmem_max 212992 - 134217728 1048576 1048576 212992 Dimensione massima del buffer del socket di ricezione in byte.
net.core.wmem_max 212992 - 134217728 212992 212992 212992 Dimensione massima del buffer del socket di invio in byte.
net.core.optmem_max 20480 - 4194304 20480 131072 20480 Dimensioni massime del buffer ausiliario (buffer di memoria delle opzioni) consentite per socket. In alcuni casi la memoria dell'opzione socket viene usata per archiviare strutture aggiuntive relative all'utilizzo del socket.
net.ipv4.tcp_max_syn_backlog 128 - 3240000 16384 16384 16384 Numero massimo di richieste di connessione in coda che non hanno ricevuto un riconoscimento dal client di connessione. Se questo numero viene superato, il kernel inizia a eliminare le richieste.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 262144 262144 131072 Numero massimo di TIME-WAIT socket mantenuti contemporaneamente dal sistema. Se questo numero viene superato, il socket di attesa del tempo viene eliminato immediatamente e viene stampato un avviso.
net.ipv4.tcp_fin_timeout 5 - 120 60 60 60 Il periodo di tempo in cui una connessione orfana (a cui non si fa più riferimento da alcuna applicazione) rimane nello stato FIN_WAIT_2 prima che venga interrotta sul lato locale.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 7200 7200 Frequenza con cui TCP invia messaggi keepalive quando keepalive è abilitato.
net.ipv4.tcp_keepalive_probes 1 - 15 9 9 9 Il numero di probe keepalive inviati da TCP fino a quando non decide che la connessione non viene interrotta.
net.ipv4.tcp_keepalive_intvl 10 - 90 75 75 75 Frequenza con cui vengono inviati i probe. Moltiplicato per tcp_keepalive_probes, determina il tempo necessario per terminare una connessione che non risponde, dopo l'avvio dei probe.
net.ipv4.tcp_tw_reuse 2 2 2 Consente il riutilizzo dei TIME-WAIT socket per le nuove connessioni quando è sicuro da un punto di vista del protocollo.
net.ipv4.ip_local_port_range Primo: 1024 - 60999 e Ultimo: 32768 - 65535] Primo: 32768 e Ultimo: 60999 Primo: 32768 e Ultimo: 60999 Primo: 32768 e Ultimo: 60999 Intervallo di porte locale utilizzato dal traffico TCP e UDP per scegliere la porta locale. L'intervallo è composto da due numeri: la prima porta locale consentita per il traffico TCP e UDP nel nodo dell'agente e l'ultimo numero di porta locale.
net.ipv4.neigh.default.gc_thresh1 128 - 80000 4096 4096 4096 Numero minimo di voci che possono trovarsi nella cache ARP. Garbage Collection non viene attivata se il numero di elementi è inferiore a questa configurazione.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 8192 8192 Numero massimo flessibile di voci che possono trovarsi nella cache ARP. Questa impostazione è probabilmente la più importante, perché la raccolta dei rifiuti ARP si attiva circa 5 secondi dopo aver raggiunto questa soglia massima.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 16384 16384 Numero hardware massimo di voci nella cache ARP.
net.netfilter.nf_conntrack_max 131072 - 2097152 Calcolo dinamico Calcolo dinamico Calcolo dinamico nf_conntrack è un modulo che tiene traccia delle voci di connessione per NAT in Linux. Il modulo nf_conntrack usa una tabella hash per registrare il record di connessione stabilita del protocollo TCP. nf_conntrack_max è il numero massimo di nodi nella tabella hash, ovvero il numero massimo di connessioni supportate dal modulo nf_conntrack o le dimensioni della tabella di rilevamento delle connessioni. Il valore predefinito viene calcolato in modo dinamico in base alla memoria di sistema usando la formula : RAM_in_bytes / 16384 (o RAM_in_MB * 64). Ad esempio, una macchina virtuale con 8 GB di RAM ha un valore predefinito di circa 524.288 connessioni. I valori effettivi variano in base alle dimensioni della macchina virtuale e alla memoria disponibile.
net.netfilter.nf_conntrack_buckets 65536 - 524288 Calcolo dinamico Calcolo dinamico Calcolo dinamico nf_conntrack è un modulo che tiene traccia delle voci di connessione per NAT in Linux. Il modulo nf_conntrack usa una tabella hash per registrare il record di connessione stabilita del protocollo TCP. nf_conntrack_buckets è la dimensione della tabella hash. Il valore predefinito viene calcolato in modo dinamico in base alla memoria di sistema usando la formula : RAM_in_bytes / 16384, con un minimo di 1.024 bucket e un massimo di 262.144 bucket. Il valore predefinito nf_conntrack_max è in genere impostato su nf_conntrack_buckets * 4. I valori effettivi variano in base alle dimensioni della macchina virtuale e alla memoria disponibile.

Limiti del ruolo di lavoro Linux

Analogamente ai limiti del descrittore di file, il numero di ruoli di lavoro o thread che un processo può creare è limitato da un'impostazione del kernel e dai limiti utente. Il limite utente per il servizio Azure Kubernetes è illimitato. La tabella seguente elenca l'impostazione del kernel che è possibile personalizzare per ogni pool di nodi:

Setting Ubuntu 22.04 predefinito Ubuntu 24.04 default Azure Linux 3.0 predefinito Description
kernel.threads-max Calcolo dinamico Calcolo dinamico Calcolo dinamico I processi possono attivare thread di lavoro. Il numero massimo di tutti i thread che è possibile creare viene impostato con l'impostazione kernel.threads-max del kernel. Il valore predefinito viene calcolato in modo dinamico in base alla memoria di sistema usando la formula : total_ram_pages / 4 (dove ogni pagina è in genere di 4 KB). I valori effettivi variano in base alle dimensioni della macchina virtuale e alla memoria disponibile.

Memoria virtuale Linux

La tabella seguente elenca le impostazioni del kernel che è possibile personalizzare per ogni pool di nodi per ottimizzare il funzionamento del sottosistema di memoria virtuale (VM) del kernel Linux e dei writeout dati dirty su disco:

Setting Valori/intervallo consentiti Ubuntu 22.04 predefinito Ubuntu 24.04 default Azure Linux 3.0 predefinito Description
vm.max_map_count 65530 1048576 1048576 Questo file contiene il numero massimo di aree della mappa di memoria che un processo può avere. Le aree della mappa di memoria vengono usate come effetto collaterale della chiamata di malloc, direttamente da mmap, mprotecte madvise, nonché durante il caricamento di librerie condivise.
vm.vfs_cache_pressure 1 - 100 100 100 100 Questo valore percentuale controlla la tendenza del kernel a recuperare la memoria, usata per la memorizzazione nella cache di oggetti directory e inode.
vm.swappiness 0 - 100 60 60 60 Questo controllo viene utilizzato per definire il livello di aggressività con cui il kernel scambia le pagine di memoria. I valori più elevati aumentano l'aggressività, i valori inferiori riducono la quantità di scambio. Il valore 0 indica al kernel di non avviare lo scambio fino a quando il numero di pagine gratuite e supportate da file è minore del limite massima in una zona.
swapFileSizeMB 1 MB - Dimensioni del disco temporaneo (/dev/sdb) Nessuno Nessuno Nessuno SwapFileSizeMB specifica le dimensioni in MB di un file di scambio da creare nei nodi dell'agente da questo pool di nodi.
transparentHugePageEnabled always, madvise, never always always madvise Transparent Hugepages è una funzionalità del kernel Linux progettata per migliorare le prestazioni rendendo più efficiente l'uso dell'hardware di mapping della memoria del processore. Se abilitato, il kernel tenta di allocare hugepages quando possibile e qualsiasi processo Linux riceve pagine da 2 MB se l'area mmap è allineata naturalmente a 2 MB. In alcuni casi quando hugepages sono abilitati a livello di sistema, le applicazioni potrebbero finire per allocare più risorse di memoria. Un'applicazione potrebbe mmap avere un'area di grandi dimensioni ma toccarne solo 1 byte, in tal caso una pagina da 2 MB potrebbe essere allocata anziché una pagina di 4k per nessun motivo valido. Questo scenario è il motivo per cui è possibile disabilitare hugepages a livello di sistema o solo all'interno di MADV_HUGEPAGE madvise delle aree.
transparentHugePageDefrag always, defer, defer+madvise, madvisenever madvise madvise madvise Questo valore controlla se il kernel deve usare in modo aggressivo la compattazione della memoria per rendere più hugepages disponibile.