Questo documento mostra come personalizzare la configurazione del nodo Google Kubernetes Engine (GKE) utilizzando un file di configurazione chiamato configurazione di sistema del nodo.
Panoramica
Puoi personalizzare la configurazione del nodo utilizzando vari metodi. Ad esempio, quando crei un pool di nodi, puoi specificare parametri come il tipo di macchina e la piattaforma CPU minima.
Una configurazione del sistema di nodi è un file di configurazione che consente di regolare un insieme limitato di impostazioni di sistema. Puoi utilizzare una configurazione del sistema di nodi per specificare impostazioni personalizzate per l'agente del nodo Kubernetes (kubelet
) e le configurazioni del kernel Linux a basso livello (sysctl
) nei pool di nodi.
Puoi anche personalizzare il runtime del container containerd sui tuoi nodi GKE utilizzando un altro file chiamato file di configurazione del runtime. Per istruzioni, consulta Personalizzare la configurazione di containerd nei nodi GKE.
Puoi anche utilizzare i DaemonSet per personalizzare i nodi, ad esempio in Avvio automatico dei nodi GKE con i DaemonSet.
Utilizzo di una configurazione del sistema di nodi
Per utilizzare una configurazione del sistema di nodi:
- Crea un file di configurazione. Questo file contiene le configurazioni di
kubelet
esysctl
. - Aggiungi la configurazione quando crei un cluster o quando crei o aggiorni un pool di nodi.
Creazione di un file di configurazione
Scrivi il file di configurazione del sistema del nodo in YAML. L'esempio seguente mostra come aggiungere configurazioni per le opzioni kubelet
e sysctl
:
kubeletConfig:
cpuManagerPolicy: static
linuxConfig:
sysctl:
net.core.somaxconn: '2048'
net.ipv4.tcp_rmem: '4096 87380 6291456'
In questo esempio:
cpuManagerPolicy: static
configurakubelet
in modo che utilizzi il criterio di gestione della CPU statica.net.core.somaxconn: '2048'
limita la codasocket listen()
a 2048 byte.net.ipv4.tcp_rmem: '4096 87380 6291456'
imposta il valore minimo, predefinito e massimo del buffer di ricezione della socket TCP rispettivamente su 4096 byte, 87.380 byte e 6.291.456 byte.
Se vuoi aggiungere configurazioni solo per kubelet
o sysctl
, includi solo quella sezione nel file di configurazione. Ad esempio, per aggiungere una configurazione kubelet
, crea il seguente file:
kubeletConfig:
cpuManagerPolicy: static
Per un elenco completo dei campi che puoi aggiungere al file di configurazione, consulta le sezioni Opzioni di configurazione di Kubelet e Opzioni di configurazione di sysctl.
Aggiunta della configurazione a un pool di nodi
Dopo aver creato il file di configurazione, aggiungi il flag
--system-config-from-file
utilizzando Google Cloud CLI. Puoi aggiungere questo flag quando crei un cluster o quando crei o aggiorni un pool di nodi. Non puoi aggiungere una configurazione del sistema di nodi con la console Google Cloud.
Per aggiungere una configurazione di sistema del nodo, esegui il seguente comando:
Crea cluster
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del clusterLOCATION
: la zona di computing o la regione del clusterSYSTEM_CONFIG_PATH
: il percorso del file che contiene le configurazionikubelet
esysctl
Dopo aver applicato una configurazione di sistema del nodo, il pool di nodi predefinito del cluster utilizza le impostazioni che hai definito.
Crea node pool
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
``` Replace the following:
POOL_NAME
: il nome del pool di nodiCLUSTER_NAME
: il nome del cluster a cui vuoi aggiungere un pool di nodiLOCATION
: la zona di computing o la regione del clusterSYSTEM_CONFIG_PATH
: il percorso del file che contiene le configurazionikubelet
esysctl
Aggiorna il pool di nodi
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
Sostituisci quanto segue:
POOL_NAME
: il nome del pool di nodi da aggiornareCLUSTER_NAME
: il nome del cluster da aggiornareLOCATION
: la zona di computing o la regione del clusterSYSTEM_CONFIG_PATH
: il percorso del file che contiene le configurazionikubelet
esysctl
Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni dei carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, individua la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi senza rispettare le norme di manutenzione. Per scoprire di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni per gli aggiornamenti dei nodi.
Modificare una configurazione del sistema di nodi
Per modificare una configurazione del sistema di nodi, puoi creare un nuovo pool di nodi con la configurazione che preferisci o aggiornare la configurazione del sistema di nodi di un pool di nodi esistente.
Modifica mediante la creazione di un pool di nodi
Per modificare la configurazione del sistema di un nodo creando un pool di nodi:
- Crea un file di configurazione con la configurazione che preferisci.
- Aggiungi la configurazione a un nuovo pool di nodi.
- Esegui la migrazione dei tuoi carichi di lavoro al nuovo pool di nodi.
- Elimina il vecchio node pool.
Modifica tramite aggiornamento di un pool di nodi esistente
Per modificare la configurazione di sistema del nodo di un pool di nodi esistente, segui le istruzioni riportate nella scheda Aggiorna pool di nodi per aggiungere la configurazione a un pool di nodi. L'aggiornamento di una configurazione del sistema di nodi sostituisce la configurazione del sistema del pool di nodi con la nuova configurazione, che richiede la ricreazione dei nodi. Se ometti uno o più parametri durante un aggiornamento, questi vengono impostati sui rispettivi valori predefiniti.
Se vuoi ripristinare i valori predefiniti della configurazione di sistema del nodo, aggiorna il file di configurazione con valori vuoti per kubelet
e sysctl
. Ad
esempio:
kubeletConfig: {}
linuxConfig:
sysctl: {}
Eliminazione di una configurazione del sistema di nodi
Per rimuovere una configurazione del sistema di nodi:
- Crea un pool di nodi.
- Esegui la migrazione dei tuoi carichi di lavoro al nuovo pool di nodi.
- Elimina il node pool con la vecchia configurazione del sistema di nodi.
Opzioni di configurazione di Kubelet
La tabella seguente mostra le opzioni kubelet
che puoi modificare.
Impostazioni di configurazione del kubelet | Limitazioni | Impostazione predefinita | Descrizione |
---|---|---|---|
cpuManagerPolicy |
Il valore deve essere none o static
|
none
|
Questa impostazione controlla il Criterio di gestione della CPU di kubelet. Il valore predefinito è none , che è lo schema di affinità della CPU predefinito e non fornisce alcuna affinità oltre a quella eseguita automaticamente dallo schedulatore del sistema operativo.L'impostazione di questo valore su static consente di assegnare l'uso esclusivo delle CPU ai pod della classe QoS garantita con richieste di CPU intere. |
cpuCFSQuota |
Il valore deve essere true o false
|
true
|
Questa impostazione applica il
limite della CPU del pod. Se imposti questo valore su false ,
i limiti della CPU per i pod vengono ignorati.L'ignorare i limiti della CPU potrebbe essere auspicabile in determinati scenari in cui i pod sono sensibili ai limiti della CPU. Il rischio di disattivare cpuCFSQuota è
che un pod malintenzionato possa consumare più risorse della CPU del previsto.
|
cpuCFSQuotaPeriod | Il valore deve essere una durata |
"100ms"
|
Questa impostazione imposta il valore del periodo della quota CFS della CPU, cpu.cfs_period_us ,
che specifica la frequenza con cui l'accesso di un cgroup alle risorse della CPU deve essere riallocato. Questa opzione ti consente di ottimizzare il comportamento di throttling della CPU. |
insecureKubeletReadonlyPortEnabled |
Il valore deve essere un valore booleano (true o false ) |
true |
Questa impostazione disattiva la porta di sola lettura non sicura di kubelet 10255
su ogni nuovo pool di nodi nel cluster. Se configuri questa impostazione in questo
file, non puoi utilizzare un client API GKE per modificarla
a livello di cluster. |
podPidsLimit | Il valore deve essere compreso tra 1024 e 4194304 |
none
|
Questa impostazione imposta il numero massimo di ID processo (PID) che ogni pod può utilizzare. |
Opzioni di configurazione sysctl
Per ottimizzare il rendimento del sistema, puoi modificare i seguenti attributi del kernel:
kernel.shmmni
kernel.shmmax
kernel.shmall
net.core.busy_poll
net.core.busy_read
net.core.netdev_max_backlog
net.core.rmem_max
net.core.wmem_default
net.core.wmem_max
net.core.optmem_max
net.core.somaxconn
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.ipv4.tcp_tw_reuse
net.ipv6.conf.all.disable_ipv6
net.ipv6.conf.default.disable_ipv6
vm.max_map_count
Spazi dei nomi Linux diversi possono avere valori univoci per un determinato sysctl
, mentre altri sono globali per l'intero nodo. L'aggiornamento delle opzioni sysctl
utilizzando una configurazione di sistema del nodo garantisce che sysctl
venga applicato a livello globale sul nodo e in ogni spazio dei nomi, con il risultato che ogni pod avrà valori sysctl
identici in ogni spazio dei nomi Linux.
Opzioni di configurazione della modalità cgroup di Linux
Kubelet e il runtime del container utilizzano la funzionalità cgroups del kernel Linux per la gestione delle risorse, ad esempio per limitare la quantità di CPU o memoria a cui può accedere ogni container in un pod. Esistono
due versioni del sottosistema cgroup nel kernel: cgroupv1
e cgroupv2
.
Il supporto di Kubernetes per cgroupv2
è stato introdotto come alpha nella versione 1.18 di Kubernetes, come beta nella versione 1.22 e come versione GA nella versione 1.25. Per ulteriori dettagli, consulta la documentazione di Kubernetes su cgroup v2.
La configurazione del sistema di nodi ti consente di personalizzare la configurazione del cgroup dei tuoi
pool di nodi. Puoi utilizzare cgroupv1
o cgroupv2
. GKE utilizza cgroupv2
per i nuovi pool di nodi standard che eseguono la versione 1.26 e successive e cgroupv1
per le versioni precedenti alla 1.26. Per i node pool creati con il provisioning automatico dei nodi, la configurazione del cgroup dipende dalla versione del cluster iniziale, non dalla versione del pool di nodi.
Puoi utilizzare la configurazione di sistema del nodo per modificare l'impostazione di un pool di nodi in modo che utilizzi cgroupv1
o cgroupv2
in modo esplicito. L'upgrade di un pool di nodi esistente alla versione 1.26 non modifica l'impostazione su cgroupv2
, poiché i node pool esistenti creati con una versione precedente alla 1.26, senza una configurazione cgroup personalizzata, continuano a utilizzare cgroupv2
, a meno che non specifichi esplicitamente diversamente.cgroupv1
Ad esempio, per configurare il pool di nodi in modo che utilizzi cgroupv2
, utilizza un file di configurazione del sistema di nodi come:
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
Le opzioni cgroupMode
supportate sono:
CGROUP_MODE_V1
: utilizzacgroupv1
nel pool di nodi.CGROUP_MODE_V2
: utilizzacgroupv2
nel pool di nodi.CGROUP_MODE_UNSPECIFIED
: utilizza la configurazione predefinita del cgroup GKE.
Per utilizzare cgroupv2
, si applicano i seguenti requisiti e limitazioni:
- Per un pool di nodi con una versione precedente alla 1.26, devi utilizzare la versione 408.0.0 o successive di gcloud CLI. In alternativa, utilizza gcloud beta con la versione 395.0.0 o successive.
- Il cluster e i pool di nodi devono eseguire la versione GKE 1.24.2-gke.300 o successiva.
- Devi utilizzare l'immagine del nodo Container-Optimized OS con Containerd.
- Se uno dei tuoi workload dipende dalla lettura del file system cgroup
(
/sys/fs/cgroup/...
), assicurati che sia compatibile con l'APIcgroupv2
.- Assicurati che eventuali strumenti di monitoraggio o di terze parti siano compatibili con
cgroupv2
.
- Assicurati che eventuali strumenti di monitoraggio o di terze parti siano compatibili con
- Se utilizzi JDK (carico di lavoro Java), ti consigliamo di utilizzare le versioni che supportano completamente cgroupv2, tra cui JDK
8u372
, JDK 11.0.16 o versioni successive o JDK 15 o versioni successive.
Verifica la configurazione del cgroup
Quando aggiungi una configurazione di sistema del nodo, GKE deve ricreare i nodi per implementare le modifiche. Dopo aver aggiunto la configurazione a un node pool e aver ricreato i nodi, puoi verificare la nuova configurazione.
Puoi verificare la configurazione del cgroup per i nodi di un pool di nodi con gcloud CLI o lo strumento a riga di comando kubectl
:
Interfaccia a riga di comando gcloud
Controlla la configurazione del cgroup per un pool di nodi:
gcloud container node-pools describe POOL_NAME \
--format='value(Config.effectiveCgroupMode)'
Sostituisci POOL_NAME
con il nome del tuo pool di nodi.
L'output potenziale è uno dei seguenti:
EFFECTIVE_CGROUP_MODE_V1
: i nodi utilizzanocgroupv1
EFFECTIVE_CGROUP_MODE_V2
: i nodi utilizzanocgroupv2
L'output mostra la nuova configurazione del cgroup solo dopo la ricreazione dei nodi nel pool di nodi. L'output è vuoto per i pool di nodi Windows Server, che non supportano cgroup.
kubectl
Per verificare la configurazione del cgroup per i nodi in questo pool di nodi con kubectl
,
scegli un nodo e connettiti utilizzando le seguenti istruzioni:
- Crea un guscio interattivo con qualsiasi nodo del pool di nodi. Sostituisci
mynode
nel comando con il nome di un nodo del pool di nodi. - Identifica la versione del cgroup sui nodi Linux.
Opzioni di configurazione delle pagine enormi di Linux
Puoi utilizzare il file di configurazione di sistema del nodo per utilizzare la funzionalità huge pages del kernel Linux.
Kubernetes supporta pagine enormi sui nodi come tipo di risorsa, in modo simile alla CPU o alla memoria. Utilizza i seguenti parametri per indicare ai nodi Kubernetes di preallocare pagine enormi per il consumo da parte dei pod. Per gestire il consumo di pagine enormi da parte dei pod, consulta Gestire HugePages.
Per preallocare pagine enormi per i tuoi nodi, specifica le quantità e le dimensioni. Per esempio, per configurare i nodi in modo che allochino tre pagine enormi di 1 gigabyte e 1024 pagine enormi di 2 megabyte, utilizza una configurazione di sistema del nodo come la seguente:
linuxConfig:
hugepageConfig:
hugepage_size2m: 1024
hugepage_size1g: 3
Per utilizzare le pagine di grandi dimensioni, si applicano le seguenti limitazioni e requisiti:
- Per assicurarti che il nodo non sia completamente occupato da pagine enormi, le dimensioni complessive delle pagine enormi allocate non possono superare il 60% della memoria totale. Ad esempio, con una macchina e2-standard-2 con 8 GB di memoria, non puoi allocare più di 4, 8 GB per le pagine enormi.
- Le pagine enormi di 1 gigabyte sono disponibili solo sui tipi di macchine A3, C2D, C3, C3A, C3D, C4, CT5E, CT5L, CT5LP, CT6E, H3, M2, M3 o Z3.