Questo documento mostra come personalizzare Google Kubernetes Engine (GKE) configurazione dei nodi utilizzando un file di configurazione configurazione del sistema di nodi.
Panoramica
Puoi personalizzare la configurazione del nodo utilizzando vari metodi. Per Ad esempio, puoi specificare parametri come il tipo di macchina e il numero CPU quando crei un pool di nodi.
Una configurazione del sistema di nodi è un file di configurazione che fornisce una
per regolare un insieme limitato di impostazioni di sistema. Puoi utilizzare un sistema di nodi
configurazione per specificare le impostazioni personalizzate per l'agente del nodo Kubernetes (
kubelet
)
e configurazioni kernel Linux di basso livello
(sysctl
) nei tuoi pool di nodi.
Puoi anche personalizzare il runtime del containerd container nei tuoi cluster GKE utilizzando un file diverso denominato file di configurazione del runtime. Per istruzioni, vedi Personalizza la configurazione containerd nei nodi GKE.
Puoi anche utilizzare gli oggetti DaemonSet per personalizzare i nodi, ad esempio Eseguire automaticamente il bootstrap dei nodi GKE con i DaemonSet.
Utilizzo di una configurazione di sistema di nodi
Per utilizzare una configurazione di sistema con nodi:
- Crea un file di configurazione. Questo file contiene le tue
kubelet
esysctl
. - Aggiungi la configurazione quando crei un cluster o quando crea o aggiorna 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 criterio di gestione della CPU staticonet.core.somaxconn: '2048'
limita il backlogsocket listen()
a 2048 byte.net.ipv4.tcp_rmem: '4096 87380 6291456'
imposta il valore minimo, predefinito e il valore massimo del buffer di ricezione del socket TCP a 4.096 byte, 87.380 rispettivamente 6.291.456 byte e 6.291.456 byte.
Se vuoi aggiungere configurazioni esclusivamente per kubelet
o sysctl
,
includi questa sezione nel tuo file di configurazione. Ad esempio, per aggiungere kubelet
configurazione, crea il file seguente:
kubeletConfig:
cpuManagerPolicy: static
Per un elenco completo dei campi che puoi aggiungere al file di configurazione, vedi le opzioni di configurazione di Kubelet e nelle sezioni delle opzioni di configurazione di Sysctl.
Aggiunta della configurazione a un pool di nodi
Dopo aver creato il file di configurazione, aggiungi il parametro
--system-config-from-file
utilizzando Google Cloud CLI. Puoi aggiungere questo flag quando crei un
o quando crei o aggiorni un pool di nodi. Non puoi aggiungere un sistema di nodi
configurazione con la console Google Cloud.
Per aggiungere una configurazione di sistema dei nodi, esegui questo 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 o la regione di computing del clusterSYSTEM_CONFIG_PATH
: il percorso del file che contiene Configurazionikubelet
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 \
--location=LOCATION \
--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 una pool di nodi versoLOCATION
: la zona o la regione di computing del clusterSYSTEM_CONFIG_PATH
: il percorso del file che contiene Configurazionikubelet
esysctl
Aggiorna 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 che vuoi aggiornareCLUSTER_NAME
: il nome del cluster che vuoi aggiornaLOCATION
: la zona o la regione di computing del clusterSYSTEM_CONFIG_PATH
: il percorso del file che contiene Configurazionikubelet
esysctl
Modifica della configurazione di un sistema di nodi
Per modificare una configurazione di sistema di nodi, puoi creare un nuovo pool di nodi con configurazione desiderata o aggiorna la configurazione del sistema di nodi pool di nodi esistente.
Modifica mediante la creazione di un pool di nodi
Per modificare una configurazione del sistema di nodi 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 carichi di lavoro al nuovo pool di nodi.
- Elimina il vecchio pool di nodi.
Modifica tramite l'aggiornamento di un pool di nodi esistente
Per modificare una configurazione di sistema di nodi aggiornando un pool di nodi esistente, la configurazione del sistema di nodi con i valori che vuoi. Aggiornamento di un nodo la configurazione di sistema sostituisce la configurazione di sistema del pool di nodi con il nuovo configurazione. Se ometti dei parametri durante un aggiornamento, questi vengono impostati su le rispettive impostazioni predefinite.
Se vuoi ripristinare la configurazione predefinita del sistema dei nodi, aggiorna
il tuo file di configurazione con valori vuoti per kubelet
e sysctl
. Per
esempio:
kubeletConfig: {}
linuxConfig:
sysctl: {}
Eliminazione di una configurazione di sistema dei nodi
Per rimuovere una configurazione di sistema dei nodi:
- Crea un pool di nodi.
- Esegui la migrazione dei carichi di lavoro al nuovo pool di nodi.
- Elimina il pool di nodi che ha la vecchia configurazione del sistema di nodi.
Opzioni di configurazione kubelet
La tabella seguente mostra le opzioni che puoi modificare (kubelet
).
Impostazioni di configurazione kubelet | Limitazioni | Impostazione predefinita | Descrizione |
---|---|---|---|
cpuManagerPolicy |
Il valore deve essere none o static
|
none
|
Questa impostazione controlla il livello
CPU
Norme relative al gestore. Il valore predefinito è none , ovvero
schema di affinità CPU predefinito, che non fornisce alcuna affinità oltre a quella del sistema operativo
scheduler lo fa automaticamente.Se questo valore viene impostato su static , i pod nella classe QoS garantita con
di richieste di CPU intere a cui assegnare l'utilizzo esclusivo delle CPU. |
cpuCFSQuota |
Il valore deve essere true o false
|
true
|
Questa impostazione applica in modo forzato
Limite di CPU del pod. Se imposti questo valore su false ,
vengono ignorati i limiti di CPU per i pod.Potrebbe essere preferibile ignorare i limiti di CPU in alcuni scenari in cui i pod sensibili ai limiti della CPU. Il rischio di disattivazione di cpuCFSQuota è
che un pod rogue può consumare più risorse della CPU del previsto.
|
cpuCFSQuotaPeriod | Il valore deve essere una durata di tempo |
"100ms"
|
Questa impostazione imposta il valore cpu.cfs_period_us del periodo di quota CFS della CPU
che specifica il periodo di frequenza con cui un cgroup accede alle risorse della CPU
deve essere riassegnato. Questa opzione ti consente di ottimizzare il comportamento di limitazione della CPU. |
insecureKubeletReadonlyPortEnabled |
Il valore deve essere booleano (true o false ) |
true |
Questa impostazione disabilita la porta di sola lettura kubelet non sicura 10255
su ogni nuovo pool di nodi nel tuo cluster. Se configuri questa impostazione in questo
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) che ogni pod può utilizzare. |
Opzioni di configurazione Sysctl
Per ottimizzare le prestazioni del sistema, puoi modificare il seguente kernel attributi:
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. Aggiornamento delle opzioni di sysctl
mediante una configurazione di sistema dei nodi
garantisce che sysctl
venga applicato a livello globale sul nodo e in ogni spazio dei nomi,
in modo che ogni pod abbia valori sysctl
identici in ogni spazio dei nomi Linux.
Opzioni di configurazione della modalità cgroup Linux
kubelet e runtime del container usano il kernel Linux
cgroups per la gestione delle risorse, ad esempio
come limitare la quantità di CPU o memoria a cui può accedere ciascun container in un pod. Esistono
due versioni del sottosistema cgroup nel kernel: cgroupv1
e cgroupv2
.
Il supporto 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 Kubernetes
cgroups v2
documentazione.
La configurazione del sistema dei nodi ti consente di personalizzare la configurazione
pool di nodi. Puoi utilizzare cgroupv1
o cgroupv2
. GKE utilizza
cgroupv2
per i nuovi pool di nodi che eseguono versione 1.26 e successive e cgroupv1
per
precedenti alla 1.26.
Puoi utilizzare la configurazione del sistema dei nodi per modificare l'impostazione di un pool di nodi in
usa cgroupv1
o cgroupv2
in modo esplicito. Basta eseguire l'upgrade di un pool di nodi esistente
1.26 non modifica l'impostazione in cgroupv2
, poiché i pool di nodi esistenti sono stati creati
esegue una versione precedente alla 1.26, senza un cgroup personalizzato
configurazione: continua a utilizzare cgroupv1
a meno che non specifichi esplicitamente
negli altri casi.
Ad esempio, per configurare il pool di nodi in modo che utilizzi cgroupv2
, usa un sistema di nodi
di configurazione 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
: usa il gruppo di istanze GKE predefinito configurazione.
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 più recente. In alternativa, utilizza gcloud beta con versione 395.0.0 o successiva.
- Il cluster e i pool di nodi devono eseguire la versione GKE 1.24.2-gke.300 o versioni successive.
- Devi utilizzare Container-Optimized OS con containerd immagine del nodo.
- Se uno o più carichi di lavoro dipendono dalla lettura del file system cgroup
(
/sys/fs/cgroup/...
), assicurati che siano compatibili 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
supportare completamente cgroupv2,
inclusi JDK
8u372
, JDK 11.0.16 o versioni successive oppure JDK 15 o versioni successive.
Verifica configurazione cgroup
Quando aggiungi una configurazione di sistema con nodi, GKE deve ricreare il nodi per implementare le modifiche. Dopo aver aggiunto la configurazione a un nodo pool e i nodi sono stati ricreati, puoi verificare il nuovo configurazione.
Per verificare la configurazione cgroup per i nodi in questo pool di nodi, scegli un nodo e segui queste istruzioni:
- Crea un evento interattivo
guscio
con qualsiasi nodo nel pool di nodi. Sostituisci
mynode
nel comando con nome di qualsiasi nodo nel pool di nodi. - Identificare la versione cgroup su Linux nodi.
Opzioni di configurazione delle pagine di grandi dimensioni Linux
Puoi usare il file di configurazione del sistema dei nodi per usare la funzionalità kernel di Linux. enorme pagine.
Kubernetes supporta pagine di grandi dimensioni sui nodi come tipo di risorsa, come le CPU la memoria. Usa i parametri seguenti per indicare ai nodi Kubernetes di preallocano pagine enormi per il consumo da parte dei pod. Per gestire i pod, il consumo di pagine di grandi dimensioni, consulta l'articolo su come gestire HugePages.
Per preallocare pagine di grandi dimensioni per i nodi, specifica importi e dimensioni. Per ad esempio per configurare i nodi allo scopo di allocare tre pagine enormi di 1 gigabyte, e 1024 pagine enormi da 2 MB, usano una configurazione di sistema nodo come le seguenti:
linuxConfig:
hugepageConfig:
hugepage_size2m: 1024
hugepage_size1g: 3
Per utilizzare pagine di grandi dimensioni, sono previste le seguenti limitazioni si applicano requisiti:
- Per garantire che il nodo non sia occupato completamente da pagine di grandi dimensioni, lo spazio le dimensioni complessive delle pagine non possono superare il 60% della memoria totale. Ad esempio: con una macchina e2-standard-2, che ha 8 GB di memoria, non è possibile allocare più di 4,8 GB per pagine molto grandi.
- Le pagine enormi di 1 gigabtye sono disponibili solo su A3, C2D, C3, C3A, C3D, Macchina C4, CT5E, CT5L, CT5LP, CT6E, H3, M2, M3 o Z3 di classificazione.