Personalizzare la configurazione dei nodi per i pool di nodi nel servizio Azure Kubernetes
La personalizzazione della configurazione dei nodi consente di modificare le impostazioni del sistema operativo o i parametri kubelet in base alle esigenze dei carichi di lavoro. Quando si crea un cluster nel servizio Azure Kubernetes o si aggiunge un pool di nodi al cluster, è possibile personalizzare un subset di impostazioni del sistema operativo e kubelet di uso comune. Per configurare altre impostazioni oltre a quelle del subset, è possibile usare un set di daemon per personalizzare le configurazioni necessarie senza rinunciare al supporto del servizio Azure Kubernetes per i nodi.
Creare un cluster nel servizio Azure Kubernetes con una configurazione del nodo personalizzata
Creare file config
Le modifiche al sistema operativo e alla configurazione di kubelet richiedono la creazione di un nuovo file di configurazione con i parametri e le impostazioni desiderate. Se il valore di un parametro non è specificato, verrà impostato il valore predefinito.
Configurazione del kubelet
Creare un file linuxkubeletconfig.json
con i contenuti seguenti:
{
"cpuManagerPolicy": "static",
"cpuCfsQuota": true,
"cpuCfsQuotaPeriod": "200ms",
"imageGcHighThreshold": 90,
"imageGcLowThreshold": 70,
"topologyManagerPolicy": "best-effort",
"allowedUnsafeSysctls": [
"kernel.msg*",
"net.*"
],
"failSwapOn": false
}
Configurazione del sistema operativo
Creare un file linuxosconfig.json
con i contenuti seguenti:
{
"transparentHugePageEnabled": "madvise",
"transparentHugePageDefrag": "defer+madvise",
"swapFileSizeMB": 1500,
"sysctls": {
"netCoreSomaxconn": 163849,
"netIpv4TcpTwReuse": true,
"netIpv4IpLocalPortRange": "32000 60000"
}
}
Creare un nuovo cluster usando file di configurazione personalizzati
Quando si crea un nuovo cluster, è possibile usare i file di configurazione personalizzati creati nei passaggi precedenti per specificare la configurazione kubelet, la configurazione del sistema operativo o entrambi.
Nota
Se si specifica una configurazione durante la creazione di un cluster, tale configurazione verrà applicata solo ai nodi nel pool di nodi iniziale. Tutte le impostazioni non configurate nel file JSON manterranno il valore predefinito. CustomLinuxOsConfig
non è supportato per il tipo di sistema operativo: Windows.
Creare un nuovo cluster usando i file di configurazione personalizzati con il comando az aks create
e specificando i file di configurazione. Il comando di esempio seguente crea un nuovo cluster con i file ./linuxkubeletconfig.json
e ./linuxosconfig.json
personalizzati:
az aks create --name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json
Aggiungere un pool di nodi usando file di configurazione personalizzati
Quando si aggiunge un pool di nodi a un cluster, è possibile usare il file di configurazione personalizzato creato nel passaggio precedente per specificare la configurazione kubelet. CustomKubeletConfig
è supportato per i pool di nodi Linux e Windows.
Nota
Quando si aggiunge un pool di nodi Linux a un cluster esistente, è possibile specificare la configurazione kubelet, la configurazione del sistema operativo o entrambi. Quando si aggiunge un pool di nodi Windows a un cluster esistente, è possibile specificare solo la configurazione kubelet. Se si specifica una configurazione quando si aggiunge un pool di nodi, tale configurazione verrà applicata solo ai nodi nel nuovo pool di nodi. Tutte le impostazioni non configurate nel file JSON manterranno il valore predefinito.
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json
Altre configurazioni
Per modificare altre impostazioni del sistema operativo, è possibile usare le impostazioni seguenti:
Messaggio del giorno
Passare il flag --message-of-the-day
con il percorso del file per sostituire il messaggio del giorno nei nodi Linux al momento della creazione del cluster o del pool di nodi.
az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
Creazione del pool di nodi
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
Risoluzione dei problemi relativi alle configurazioni dei nodi personalizzate
Verificare che le impostazioni siano state applicate
Dopo aver applicato la configurazione personalizzata dei nodi, è possibile verificare che le impostazioni siano state applicate ai nodi connettendosi all'host e verificando che sysctl
o le modifiche alla configurazione siano state apportate al file system.
Parametri supportati per la configurazione personalizzata del nodo
Configurazione kubelet personalizzata
La configurazione kubelet personalizzata è supportata per i pool di nodi Linux e Windows. I parametri supportati differiscono e sono documentati di seguito.
Configurazione kubelet personalizzata per Linux
Parametro | Valori/intervallo consentiti | Default | Descrizione |
---|---|---|---|
cpuManagerPolicy |
none, static | Nessuno | I criteri statici consentono ai contenitori nei pod garantiti con richieste di CPU integer di accedere a CPU esclusive nel nodo. |
cpuCfsQuota |
true, false | true | Abilitare/disabilitare l'imposizione della quota CFS della CPU 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 attiverà l'operazione di Garbage Collection. 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 |
none, best-effort, restricted, single-numa-node | Nessuno | Ottimizzare l'allineamento dei nodi NUMA. Per altre informazioni, vedere qui. |
allowedUnsafeSysctls |
kernel.shm* , kernel.msg* , kernel.sem , fs.mqueue.* net.* |
None | 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 | 5 | Numero massimo di file di log del contenitore che possono essere presenti per un contenitore. |
podMaxPids |
Da -1 al limite PID del kernel | -1 (∞) | 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 avranno esito negativo. Unconfined non comporta restrizioni sulle chiamate di sistema e tutte le chiamate di sistema sono consentite, riducendo così la sicurezza. Per altre informazioni, vedere il profilo seccomp predefinito containerD. Questo parametro è in anteprima. Registrare il flag di funzionalità "KubeletDefaultSeccompProfilePreview" usando il az feature register comando con --namespace "Microsoft.ContainerService". |
Configurazione kubelet personalizzata per Windows
Parametro | Valori/intervallo consentiti | Default | Descrizione |
---|---|---|---|
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 attiverà l'operazione di Garbage Collection. 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 | 5 | Numero massimo di file di log del contenitore che possono essere presenti per un contenitore. |
Impostazioni di configurazione del sistema operativo personalizzate per 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 per l’uso di maiuscole e minuscole camelCase.
Ad esempio, se si modifica "vm.max_map_count setting", è necessario riformattare "vmMaxMapCount" nel file JSON di configurazione.
Limiti relativi all'handle di file
Quando si gestisce molto 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 la gestione di più traffico, a costo della memoria di sistema.
Impostazione | Valori/intervallo consentiti | Default | Descrizione |
---|---|---|---|
fs.file-max |
8192 - 12000500 | 709620 | Numero massimo di handle di file allocati dal kernel Linux. Se si aumenta questo valore è possibile aumentare il numero massimo consentito di file aperti. |
fs.inotify.max_user_watches |
781250 - 2097152 | 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 | 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 | Numero massimo di handle di file che un processo può allocare. |
Socket e ottimizzazione della rete
Per i nodi dell'agente, che devono gestire un numero molto elevato di sessioni simultanee, è possibile usare il subset di opzioni TCP e di rete seguenti che è possibile modificare per ogni pool di nodi.
Impostazione | Valori/intervallo consentiti | Default | Descrizione |
---|---|---|---|
net.core.somaxconn |
4096 - 3240000 | 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 | 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 | 212992 | Dimensione massima del buffer del socket di ricezione in byte. |
net.core.wmem_max |
212992 - 134217728 | 212992 | Dimensione massima del buffer del socket di invio in byte. |
net.core.optmem_max |
20480 - 4194304 | 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 | Numero massimo di richieste di connessione in coda che non hanno ancora ricevuto un riconoscimento dal client di connessione. Se questo numero viene superato, il kernel inizierà a eliminare le richieste. |
net.ipv4.tcp_max_tw_buckets |
8000 - 1440000 | 32768 | Numero massimo di socket timewait 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 | Il periodo di tempo in cui una connessione orfana (a cui nessuna applicazione fa più riferimento) rimarrà nello stato FIN_WAIT_2 prima che venga interrotta sul lato locale. |
net.ipv4.tcp_keepalive_time |
30 - 432000 | 7200 | Frequenza con cui TCP invia messaggi keepalive quando keepalive è abilitato. |
net.ipv4.tcp_keepalive_probes |
1 - 15 | 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 | Frequenza con cui vengono inviati i probe. Se moltiplicato per tcp_keepalive_probes , indica il tempo necessario per terminare una connessione che non risponde, dopo l'avvio dei probe. |
net.ipv4.tcp_tw_reuse |
0 o 1 | 0 | Consente di riutilizzare i socket TIME-WAIT per le nuove connessioni quando non ci sono problemi di sicurezza a livello di protocollo. |
net.ipv4.ip_local_port_range |
Primo: 1024 - 60999 e Ultimo: 32768 - 65535] | Primo: 32768 e Ultimo: 60999 | Intervallo di porte locale utilizzato dal traffico TCP e UDP per scegliere la porta locale. Costituito da due numeri: il primo numero rappresenta la prima porta locale consentita per il traffico TCP e UDP nel nodo dell'agente, il secondo è l'ultimo numero di porta locale. |
net.ipv4.neigh.default.gc_thresh1 |
128 - 80000 | 4096 | Numero minimo di voci che possono essere presenti nella cache ARP. L'operazione di Garbage Collection non verrà attivata se il numero di voci è inferiore a questa impostazione. |
net.ipv4.neigh.default.gc_thresh2 |
512 - 90000 | 8192 | Numero software massimo di voci che possono essere presenti nella cache ARP. Questa impostazione è probabilmente la più importante, poiché l’operazione di Garbage Collection ARP verrà attivata circa 5 secondi dopo che è stato raggiunto questo limite software massimo. |
net.ipv4.neigh.default.gc_thresh3 |
1024 - 100000 | 16384 | Numero hardware massimo di voci nella cache ARP. |
net.netfilter.nf_conntrack_max |
131072 - 2097152 | 131072 | 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. |
net.netfilter.nf_conntrack_buckets |
65536 - 524288 | 65536 | 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. |
Limiti del ruolo di lavoro
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.
Impostazione | Valori/intervallo consentiti | Default | Descrizione |
---|---|---|---|
kernel.threads-max |
20 - 513785 | 55601 | 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. |
Memoria virtuale
È possibile usare le impostazioni seguenti per ottimizzare il funzionamento del sottosistema di memoria virtuale (VM) del kernel Linux e dei writeout
dati dirty su disco.
Impostazione | Valori/intervallo consentiti | Default | Descrizione |
---|---|---|---|
vm.max_map_count |
65530 - 262144 | 65530 | Questo file contiene il numero massimo di aree della mappa di memoria che un processo può includere. Le aree della mappa di memoria vengono usate come effetto collaterale della chiamata di malloc , direttamente da mmap , mprotect e madvise , nonché durante il caricamento di librerie condivise. |
vm.vfs_cache_pressure |
1 - 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 | Questo controllo viene usato per definire l'aggressività con cui il kernel scambia le pagine di memoria. I valori più elevati aumentano l'aggressività, i valori inferiori riducono il numero di pagine scambiate. 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) | None | SwapFileSizeMB specifica le dimensioni in MB di un file di scambio creato nei nodi dell'agente dal pool di nodi. |
transparentHugePageEnabled |
always , madvise , never |
always |
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 la funzionalità è abilitata, il kernel tenta di allocare hugepages quando possibile e qualsiasi processo Linux riceverà 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 finiscono talvolta per allocare più risorse di memoria. Un'applicazione può essere associata a un’area mmap di grandi dimensioni, ma usarne solo 1 byte. In tal caso è possibile che per nessun motivo valido venga allocata una pagina di 2 MB anziché una pagina di 4k. 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 , madvise never |
madvise |
Questo valore controlla se il kernel deve usare in modo aggressivo la compattazione della memoria per rendere più hugepages disponibile. |
Passaggi successivi
- Informazioni su come configurare il cluster del servizio Azure Kubernetes.
- Informazioni su come aggiornare le immagini del nodo in un cluster.
- Per informazioni su come aggiornare il cluster alla versione più recente di Kubernetes, vedere Aggiornare un cluster del servizio Azure Kubernetes.
- Per trovare le risposte ad alcune domande comuni su AKS, vedere l'elenco delle domande frequenti su AKS.
Azure Kubernetes Service