Questo documento mostra come personalizzare la configurazione dei nodi di Google Kubernetes Engine (GKE) utilizzando un file di configurazione chiamato configurazione del sistema di nodi.
Panoramica
Puoi personalizzare la configurazione dei nodi utilizzando vari metodi. Ad esempio, puoi specificare parametri come il tipo di macchina e la piattaforma CPU minima quando crei un pool di nodi.
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 dei nodi per specificare impostazioni personalizzate per le configurazioni dell'agente nodo Kubernetes (
kubelet
)
e per le configurazioni kernel Linux di basso livello
(sysctl
) nei pool di nodi.
Puoi anche personalizzare il runtime dei container containerd sui nodi GKE utilizzando un file diverso chiamato file di configurazione di runtime. Per le istruzioni, consulta Personalizzare la configurazione containerd nei nodi GKE.
Puoi anche eseguire ulteriori personalizzazioni utilizzando i seguenti metodi:
- Sostituisci i componenti di sistema, ad esempio in Personalizzazione dei log di Cloud Logging per GKE con Fluentd
- Utilizza i DaemonSet per personalizzare i nodi, ad esempio in Avvio automatico dei nodi GKE con 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
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 di nodi 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
configura ilkubelet
in modo che utilizzi il criterio di gestione della CPU statica.net.core.somaxconn: '2048'
limita il backlogsocket listen()
a 2048 byte.net.ipv4.tcp_rmem: '4096 87380 6291456'
imposta il valore minimo, predefinito e massimo del buffer di ricezione del socket TCP su 4096 byte, 87.380 byte e 6.291.456 byte, rispettivamente.
Se vuoi aggiungere configurazioni esclusivamente 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 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 di sistema
dei nodi con la console Google Cloud.
Per aggiungere una configurazione del sistema dei nodi, esegui questo comando:
Crea cluster
gcloud container clusters create CLUSTER_NAME \
--system-config-from-file=SYSTEM_CONFIG_PATH
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del clusterSYSTEM_CONFIG_PATH
: il percorso del file che contiene le configurazioni dikubelet
esysctl
Dopo aver applicato una configurazione del sistema di nodi, il pool di nodi predefinito del cluster utilizza le impostazioni che hai definito.
Crea pool di nodi
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--system-config-from-file=SYSTEM_CONFIG_PATH
Sostituisci quanto segue:
POOL_NAME
: il nome del pool di nodiCLUSTER_NAME
: il nome del cluster a cui vuoi aggiungere un pool di nodiSYSTEM_CONFIG_PATH
: il percorso del file che contiene le configurazioni dikubelet
esysctl
Aggiorna pool di nodi
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--system-config-from-file=SYSTEM_CONFIG_PATH
Sostituisci quanto segue:
POOL_NAME
: il nome del pool di nodi che vuoi aggiornareCLUSTER_NAME
: il nome del cluster che vuoi aggiornareSYSTEM_CONFIG_PATH
: il percorso del file che contiene le configurazioni dikubelet
esysctl
Modifica della configurazione del sistema di nodi
Per modificare la configurazione di un sistema di nodi, puoi creare un nuovo pool di nodi con la configurazione che preferisci o aggiornare la configurazione del sistema dei nodi di un pool di nodi esistente.
Modifica mediante la creazione di un pool di nodi
Per modificare la configurazione del sistema di nodi creando un pool di nodi:
- Crea un file di configurazione con la configurazione che ti interessa.
- Aggiungi la configurazione a un nuovo pool di nodi.
- Esegui la migrazione dei carichi di lavoro al nuovo pool di nodi.
- Elimina il vecchio pool di nodi.
Modifica mediante l'aggiornamento di un pool di nodi esistente
Per modificare la configurazione di un sistema di nodi aggiornando un pool di nodi esistente, aggiorna la configurazione del sistema dei nodi con i valori che preferisci. L'aggiornamento di una configurazione del sistema di nodi sostituisce la configurazione di sistema del pool di nodi con la nuova configurazione. Se ometti dei parametri durante un aggiornamento, vengono impostati i rispettivi valori predefiniti.
Se vuoi ripristinare le impostazioni predefinite del sistema dei nodi, aggiorna
il file di configurazione con valori vuoti per kubelet
e sysctl
. Ad
esempio:
kubeletConfig: {}
linuxConfig:
sysctl: {}
Eliminazione della configurazione del sistema di nodi
Per rimuovere la configurazione del sistema di nodi:
- Crea un pool di nodi.
- Esegui la migrazione dei carichi di lavoro al nuovo pool di nodi.
- Elimina il pool di nodi contenente la vecchia configurazione del sistema di nodi.
Opzioni di configurazione kubelet
La tabella seguente mostra le opzioni di kubelet
che puoi modificare.
Impostazioni di configurazione kubelet | Limitazioni | Impostazione predefinita | Descrizione |
---|---|---|---|
cpuManagerPolicy |
Il valore deve essere none o static
|
none
|
Questa impostazione controlla il criterio del gestore delle CPU del kubelet. Il valore predefinito è none , che è lo schema di affinità della CPU predefinito, che non fornisce alcuna affinità oltre a ciò che fa automaticamente lo scheduler del sistema operativo.L'impostazione di questo valore su static consente di assegnare un uso esclusivo delle CPU ai pod della classe QoS garantita con
richieste di CPU interi. |
cpuCFSQuota |
Il valore deve essere true o false
|
true
|
Questa impostazione applica il limite di CPU del pod. Se questo valore è impostato su false , i limiti di CPU per i pod vengono ignorati.Ignorare i limiti di CPU può essere preferibile in determinati scenari in cui i pod sono sensibili ai limiti della CPU. Il rischio di disabilitare cpuCFSQuota è che un pod rogue può consumare più risorse della CPU del previsto.
|
cpuCFSQuotaPeriod | Il valore deve essere un periodo di tempo |
"100ms"
|
Questa impostazione imposta il valore del periodo di quota della CPU CFS, cpu.cfs_period_us , che specifica il periodo in cui l'accesso di un cgroup alle risorse della CPU deve essere riallocato. Questa opzione consente di ottimizzare il comportamento di limitazione della CPU. |
insecureKubeletReadonlyPortEnabled |
Il valore deve essere un valore booleano (true o false ) |
true |
Questa impostazione disabilita la porta kubelet di sola lettura non sicura 10255 su ogni nuovo pool di nodi nel cluster. Se configuri questa impostazione in questo file, non puoi utilizzare un client API GKE per modificare l'impostazione a livello di cluster. |
podPidsLimit | Il valore deve essere compreso tra 1024 e 4194304 |
none
|
Questa impostazione imposta il numero massimo di ID di processo (PID) utilizzabili da ciascun pod. |
Opzioni di configurazione simboli
Per ottimizzare le prestazioni del sistema, puoi modificare i seguenti attributi del kernel:
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 potrebbero avere valori univoci per un determinato sysctl
, mentre altri sono globali per l'intero nodo. L'aggiornamento delle opzioni sysctl
mediante una configurazione del sistema di nodi assicura che sysctl
venga applicato a livello globale sul nodo e in ogni spazio dei nomi. Di conseguenza, 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 il kernel Linux
cgroups per la gestione delle risorse, ad esempio
limitando la quantità di CPU o memoria a cui può accedere ogni container in un pod. Nel kernel esistono due versioni del sottosistema cgroup: cgroupv1
e cgroupv2
.
Il supporto di Kubernetes per cgroupv2
è stato introdotto come alpha in Kubernetes versione 1.18, beta nella versione 1.22 e GA nella versione 1.25. Per ulteriori dettagli, consulta la documentazione di Kubernetes cgroups v2.
La configurazione del sistema di nodi consente di personalizzare la configurazione cgroup dei pool di nodi. Puoi usare cgroupv1
o cgroupv2
. GKE utilizza cgroupv2
per i nuovi pool di nodi che eseguono la versione 1.26 e successive e cgroupv1
per le versioni precedenti alla 1.26.
Puoi utilizzare la configurazione del sistema dei nodi per modificare l'impostazione di un pool di nodi in modo da
utilizzare in modo esplicito cgroupv1
o cgroupv2
. L'upgrade di un pool di nodi esistente alla versione 1.26 non comporta la modifica dell'impostazione in cgroupv2
, poiché i pool di nodi esistenti creati eseguendo una versione precedente alla 1.26, senza una configurazione cgroup personalizzata, continueranno a utilizzare cgroupv1
, a meno che non venga specificato esplicitamente in altro modo.
Ad esempio, per configurare il tuo pool di nodi in modo che utilizzi cgroupv2
, utilizza un file di configurazione del sistema dei nodi come:
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
Le opzioni di 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 gruppo c di GKE.
Per utilizzare cgroupv2
, si applicano i seguenti requisiti e limitazioni:
- Per un pool di nodi che esegue una versione precedente alla 1.26, devi utilizzare gcloud CLI versione 408.0.0 o successiva. In alternativa, utilizza gcloud beta con la versione 395.0.0 o successiva.
- I pool di cluster e nodi devono eseguire GKE versione 1.24.2-gke.300 o successiva.
- Devi utilizzare Container-Optimized OS con immagine del nodo containerd.
- Se uno qualsiasi dei tuoi carichi di lavoro dipende dalla lettura del file system cgroup (
/sys/fs/cgroup/...
), assicurati che sia compatibile con l'APIcgroupv2
.- Assicurati che tutti gli strumenti di monitoraggio o di terze parti siano compatibili con
cgroupv2
.
- Assicurati che tutti gli strumenti di monitoraggio o di terze parti siano compatibili con
- Se utilizzi JDK (carico di lavoro Java), ti consigliamo di utilizzare versioni che
supportano completamente cgroupv2,
tra cui JDK
8u372
, JDK 11.0.16 o versione successiva oppure JDK 15 o versione successiva.
Verifica configurazione cgroup
Quando aggiungi una configurazione del sistema dei nodi, GKE deve ricreare i nodi per implementare le modifiche. Dopo aver aggiunto la configurazione a un pool di nodi e che i nodi sono stati ricreati, puoi verificare la nuova configurazione.
Per verificare la configurazione cgroup per i nodi in questo pool di nodi, scegli un nodo e connettiti utilizzando le seguenti istruzioni:
- Crea una shell interattiva con qualsiasi nodo nel pool di nodi. Sostituisci
mynode
nel comando con il nome di qualsiasi nodo nel pool di nodi. - Identifica la versione cgroup sui nodi Linux.
Opzioni di configurazione delle pagine enormi di Linux
Puoi utilizzare il file di configurazione del sistema dei nodi per usare le pagine giganti della funzionalità del kernel Linux.
Kubernetes supporta pagine enormi sui nodi come tipo di risorsa, simili a CPU o memoria. Usa i parametri seguenti per indicare ai nodi Kubernetes di preallocare pagine enormi per il consumo da parte dei pod. Per gestire il consumo di pagine di grandi dimensioni da parte dei pod, consulta Gestire HuugePages.
Per preallocare pagine enormi per i tuoi nodi, specifica quantità e dimensioni. Ad esempio, per configurare i nodi per l'allocazione di tre pagine enormi di 1 gigabyte e 1024 pagine di dimensioni enormi da 2 MB, utilizza una configurazione di sistema di nodi come la seguente:
linuxConfig:
hugepageConfig:
hugepage_size2m: 1024
hugepage_size1g: 3
Per utilizzare pagine di grandi dimensioni, si applicano le seguenti limitazioni e requisiti:
- Per garantire che il nodo non sia completamente occupato da pagine di dimensioni enormi, le dimensioni complessive delle pagine enormi allocate non possono superare il 60% della memoria totale. Ad esempio, con una macchina e2-standard-2, che ha 8 GB di memoria, non puoi allocare più di 4,8 GB per pagine di grandi dimensioni.
- Le pagine di dimensioni da 1 gigabit sono disponibili solo sui tipi di macchine A3, C2D, C3, C3A, C3D, C4, CT5E, CT5L, CT5LP, CT6E, H3, M2, M3 o Z3.