Personalizzazione della configurazione del sistema di nodi


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. 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 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, consulta Personalizzare la configurazione di containerd nei nodi GKE.

Puoi anche utilizzare i DaemonSet per personalizzare i nodi, ad esempio per il bootstrap automatico dei nodi GKE con i DaemonSet.

Utilizzo di una configurazione del sistema di nodi

Per utilizzare una configurazione di sistema con nodi:

  1. Crea un file di configurazione. Questo file contiene le tue kubelet e sysctl.
  2. 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 configura kubelet in modo che utilizzi criterio di gestione della CPU statico
  • net.core.somaxconn: '2048' limita la coda di socket 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 esclusivamente per kubelet o sysctl, includi questa sezione nel tuo 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, 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 cluster 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 cluster
  • LOCATION: la zona di calcolo o la regione del cluster
  • SYSTEM_CONFIG_PATH: il percorso del file che contiene Configurazioni kubelet e sysctl

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 nodi
  • CLUSTER_NAME: il nome del cluster a cui vuoi aggiungere un pool di nodi
  • LOCATION: la zona o la regione di computing del cluster
  • SYSTEM_CONFIG_PATH: il percorso del file contenente le configurazioni kubelet e sysctl

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 che vuoi aggiornare
  • CLUSTER_NAME: il nome del cluster da aggiornare
  • LOCATION: la zona o la regione di computing del cluster
  • SYSTEM_CONFIG_PATH: il percorso del file contenente le configurazioni kubelet e sysctl

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 una configurazione del sistema di nodi creando un pool di nodi:

  1. Crea un file di configurazione con la configurazione che preferisci.
  2. Aggiungi la configurazione a un nuovo pool di nodi.
  3. Esegui la migrazione dei carichi di lavoro al nuovo pool di nodi.
  4. Elimina il vecchio pool di nodi.

Modifica tramite aggiornamento di un pool di nodi esistente

Per modificare una configurazione del sistema di nodi aggiornando un pool di nodi esistente, aggiorna la configurazione del sistema di 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 uno o più 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. Ad esempio:

kubeletConfig: {}
linuxConfig:
  sysctl: {}

Eliminazione di una configurazione di sistema dei nodi

Per rimuovere una configurazione del sistema di nodi:

  1. Crea un pool di nodi.
  2. Esegui la migrazione dei carichi di lavoro al nuovo pool di nodi.
  3. Elimina il pool di nodi che ha la vecchia configurazione del sistema di nodi.

Opzioni di configurazione kubelet

La tabella seguente mostra le opzioni kubelet che puoi modificare.

Impostazioni di configurazione di 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.

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, 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 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 limitazione della CPU.
insecureKubeletReadonlyPortEnabled Il valore deve essere 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:

Spazi dei nomi Linux diversi possono 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 di 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 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 pool di nodi. Puoi utilizzare cgroupv1 o cgroupv2. GKE utilizza cgroupv2 per i nuovi pool di nodi standard che eseguono 1.26 e versioni successive, e cgroupv1 per le versioni precedenti alla 1.26. Per i pool di nodi creati con il provisioning automatico dei nodi, la configurazione del cgroup dipende dalla versione iniziale del cluster, non dalla versione del pool di nodi.

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. L'upgrade di un pool di nodi esistente alla versione 1.26 non modifica l'impostazione su cgroupv2, poiché i pool di nodi esistenti creati con una versione precedente alla 1.26, senza una configurazione cgroup personalizzata, continuano a utilizzare cgroupv1, a meno che non specifichi esplicitamente diversamente.

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 di cgroupMode supportate sono:

  • CGROUP_MODE_V1: utilizza cgroupv1 nel pool di nodi.
  • CGROUP_MODE_V2: utilizza cgroupv2 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 con una versione precedente alla 1.26, devi utilizzare la versione 408.0.0 o successive dell'interfaccia a riga di comando gcloud. 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 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'API cgroupv2.
    • Assicurati che eventuali strumenti di monitoraggio o di terze parti siano compatibili con cgroupv2.
  • 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 pool di nodi e aver ricreato i nodi, puoi verificare la nuova configurazione.

Puoi verificare la configurazione cgroup per i nodi in un pool di nodi con gcloud CLI o lo strumento a riga di comando kubectl:

Interfaccia a riga di comando gcloud

Controlla la configurazione cgroup per un pool di nodi:

gcloud container node-pools describe POOL_NAME \
    --format='value(Config.effectiveCgroupMode)'

Sostituisci POOL_NAME con il nome del pool di nodi.

L'output potenziale è uno dei seguenti:

  • EFFECTIVE_CGROUP_MODE_V1: i nodi utilizzano cgroupv1
  • EFFECTIVE_CGROUP_MODE_V2: i nodi utilizzano cgroupv2

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:

  1. 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.
  2. Identifica la versione del cgroup sui nodi Linux.

Opzioni di configurazione delle pagine di grandi dimensioni Linux

Puoi utilizzare il file di configurazione del sistema di nodi 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 pre-allocare 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 a nodi come le seguenti:

linuxConfig:
  hugepageConfig:
    hugepage_size2m: 1024
    hugepage_size1g: 3

Per utilizzare le pagine di grandi dimensioni, si applicano le seguenti limitazioni e 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 con 8 GB di memoria, non puoi allocare più di 4,8 GB per le pagine enormi.
  • Le pagine enormi da 1 gigabtye sono disponibili solo su A3, C2D, C3, C3A, C3D, Macchina C4, CT5E, CT5L, CT5LP, CT6E, H3, M2, M3 o Z3 di classificazione.

Passaggi successivi