Personalizzazione della configurazione del sistema di nodi

Questo documento mostra come personalizzare la configurazione dei nodi di Google Kubernetes Engine (GKE) utilizzando un file di configurazione chiamato configurazione di sistema dei nodi.

Una configurazione di sistema del nodo è un file di configurazione che consente di modificare un insieme limitato di impostazioni di sistema. Nel tuo pool di nodi, puoi utilizzare una configurazione di sistema del nodo per specificare impostazioni personalizzate per l'agente del nodo Kubernetes kubelet e per le configurazioni del kernel Linux di basso livello sysctl.

Questo documento descrive in dettaglio le configurazioni disponibili per una configurazione del sistema di nodi e come applicarle ai node pool GKE Standard. Tieni presente che, poiché i cluster GKE Autopilot hanno un ambiente dei nodi più gestito, le loro opzioni di configurazione diretta del sistema dei nodi sono limitate rispetto ai pool di nodi GKE Standard.

Perché utilizzare le configurazioni del sistema di nodi

Le configurazioni del sistema di nodi offrono i seguenti vantaggi:

  • Ottimizzazione delle prestazioni:ottimizza le prestazioni dello stack di rete, la gestione della memoria, la pianificazione della CPU o il comportamento I/O per applicazioni esigenti come l'addestramento o il servizio di AI, i database, i server web con traffico elevato o i servizi sensibili alla latenza.
  • Rafforzamento della sicurezza:applica impostazioni di sicurezza specifiche a livello di kernel o limita determinati comportamenti del sistema per ridurre la superficie di attacco.
  • Gestione delle risorse:perfeziona il modo in cui kubelet gestisce PID, spazio su disco, garbage collection delle immagini o risorse di CPU e memoria.
  • Compatibilità del workload:contribuisce a garantire che l'ambiente dei nodi soddisfi prerequisiti specifici per software specializzati o applicazioni meno recenti che richiedono impostazioni del kernel particolari.

Altre opzioni per personalizzare le configurazioni dei nodi

Puoi anche personalizzare la configurazione dei nodi utilizzando altri metodi:

Le configurazioni di sistema dei nodi non sono supportate nei nodi Windows Server.

Prima di iniziare

Prima di iniziare, assicurati di:

  • Installa gli strumenti a riga di comando:
    • Se utilizzi gli esempi di gcloud CLI in questo documento, assicurati di installare e configurare Google Cloud CLI.
    • Se utilizzi gli esempi di Terraform, assicurati di installare e configurare Terraform.
  • Concedi autorizzazioni: devi disporre delle autorizzazioni IAM appropriate per creare e aggiornare i cluster GKE e i node pool, ad esempio container.clusterAdmin o un ruolo diverso con autorizzazioni equivalenti.
  • Pianifica potenziali interruzioni del carico di lavoro: le configurazioni dei nodi personalizzate vengono applicate a livello di pool di nodi. In genere le modifiche attivano un aggiornamento in sequenza dei nodi nel pool, che comporta la ricreazione dei nodi. Pianifica potenziali interruzioni del workload e utilizza i budget di interruzione dei pod (PDB) se appropriato.
  • Esegui il backup e testa tutte le modifiche: testa sempre le modifiche alla configurazione in un ambiente di staging o di sviluppo prima di applicarle alla produzione. Impostazioni errate possono causare l'instabilità dei nodi o errori dei workload.
  • Controlla le impostazioni predefinite di GKE: le immagini dei nodi GKE vengono fornite con configurazioni predefinite ottimizzate. Personalizza i parametri solo se hai un'esigenza specifica e comprendi l'impatto delle modifiche.

Utilizzare una configurazione del sistema di nodi in modalità GKE Standard

Quando utilizzi una configurazione di sistema dei nodi, utilizzi un file YAML che contiene i parametri di configurazione per kubelet e il kernel Linux. Sebbene le configurazioni del sistema dei nodi siano disponibili anche in modalità GKE Autopilot, i passaggi descritti in questo documento mostrano come creare e utilizzare un file di configurazione per la modalità GKE Standard.

Per utilizzare una configurazione di sistema dei nodi in modalità GKE Standard, procedi nel seguente modo:

  1. Crea un file di configurazione. Questo file contiene le configurazioni di kubelet e sysctl.
  2. Aggiungi la configurazione quando crei un cluster o quando crei o aggiorni un pool di nodi.

Creare un file di configurazione

Scrivi la configurazione del sistema dei nodi in YAML. L'esempio seguente aggiunge le configurazioni per le opzioni kubelet e sysctl:

kubeletConfig:
  cpuManagerPolicy: static
  allowedUnsafeSysctls:
    - 'kernel.shm*'
    - 'kernel.msg*'
    - 'kernel.sem'
    - 'fs.mqueue*'
    - 'net.*'
linuxConfig:
  sysctl:
    net.core.somaxconn: '2048'
    net.ipv4.tcp_rmem: '4096 87380 6291456'

In questo esempio, si applica quanto segue:

  • Il campo cpuManagerPolicy: static configura kubelet per utilizzare la policy di gestione statica della CPU. + Il campo net.core.somaxconn: '2048' limita il backlog socket listen() a 2048 byte.
  • Il campo net.ipv4.tcp_rmem: '4096 87380 6291456' imposta il valore minimo, predefinito e massimo del buffer di ricezione del 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 nella configurazione di sistema del nodo. Ad esempio, per aggiungere una configurazione kubelet, crea il seguente file:

kubeletConfig:
  cpuManagerPolicy: static

Per un elenco completo dei campi che puoi aggiungere alla configurazione del sistema di nodi, consulta le sezioni Opzioni di configurazione di Kubelet e Opzioni di configurazione di Sysctl.

Aggiungi la configurazione a un pool di nodi Standard

Dopo aver creato la configurazione del sistema dei nodi, 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 del nodo utilizzando la console Google Cloud .

Crea un cluster con la configurazione di sistema del nodo

Puoi aggiungere una configurazione di sistema dei nodi durante la creazione del cluster utilizzando gcloud CLI o Terraform. Le seguenti istruzioni applicano la configurazione del sistema dei nodi al pool di nodi predefinito:

Interfaccia a riga di comando gcloud

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 computing o la regione del cluster
  • SYSTEM_CONFIG_PATH: il percorso del file che contiene le configurazioni di 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.

Terraform

Per creare un cluster regionale con una configurazione di sistema dei nodi personalizzata utilizzando Terraform, consulta il seguente esempio:

resource "google_container_cluster" "default" {
  name     = "gke-standard-regional-cluster"
  location = "us-central1"

  initial_node_count = 1

  node_config {
    # Kubelet configuration
    kubelet_config {
      cpu_manager_policy = "static"
    }

    linux_node_config {
      # Sysctl configuration
      sysctls = {
        "net.core.netdev_max_backlog" = "10000"
      }

      # Linux cgroup mode configuration
      cgroup_mode = "CGROUP_MODE_V2"

      # Linux huge page configuration
      hugepages_config {
        hugepage_size_2m = "1024"
      }
    }
  }
}

Per saperne di più sull'utilizzo di Terraform, consulta Supporto di Terraform per GKE.

Crea un nuovo pool di nodi con la configurazione del sistema dei nodi

Puoi aggiungere una configurazione di sistema dei nodi quando utilizzi gcloud CLI o Terraform per creare un nuovo pool di nodi.

Le seguenti istruzioni applicano la configurazione del sistema di nodi a un nuovo node pool:

Interfaccia a riga di comando gcloud

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 di computing o la regione del cluster
  • SYSTEM_CONFIG_PATH: il percorso del file che contiene le configurazioni di kubelet e sysctl

Terraform

Per creare un pool di nodi con una configurazione del sistema di nodi personalizzata utilizzando Terraform, consulta il seguente esempio:

resource "google_container_node_pool" "default" {
  name    = "gke-standard-regional-node-pool"
  cluster = google_container_cluster.default.name

  node_config {
    # Kubelet configuration
    kubelet_config {
      cpu_manager_policy = "static"
    }

    linux_node_config {
      # Sysctl configuration
      sysctls = {
        "net.core.netdev_max_backlog" = "10000"
      }

      # Linux cgroup mode configuration
      cgroup_mode = "CGROUP_MODE_V2"

      # Linux huge page configuration
      hugepages_config {
        hugepage_size_2m = "1024"
      }
    }
  }
}

Per saperne di più sull'utilizzo di Terraform, consulta Supporto di Terraform per GKE.

Aggiorna la configurazione del sistema di nodi di un pool di nodi esistente

Puoi aggiornare la configurazione del sistema di nodi di un pool di nodi esistente eseguendo il seguente comando:

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

Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni ai carichi di lavoro in esecuzione. Per saperne di più su questa modifica specifica, trova 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 ulteriori informazioni sugli aggiornamenti dei nodi, consulta Pianificazione delle interruzioni dell'aggiornamento 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 oppure aggiornare la configurazione del sistema di nodi di unpool di nodiol esistente.

Modifica creando un pool di nodi

Per modificare la configurazione di un 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 workload al nuovo pool di nodi.
  4. Elimina il vecchio node pool.

Modifica aggiornando un pool di nodi esistente

Per modificare la configurazione del sistema dei nodi di un pool di nodi esistente, segui le istruzioni nella scheda Aggiorna node pool per aggiungere la configurazione a un node pool. Quando aggiorni una configurazione del sistema dei nodi e la nuova configurazione sostituisce quella esistente del sistema depool di nodiol, i nodi devono essere ricreati. Se ometti dei parametri durante un aggiornamento, questi vengono impostati sui rispettivi valori predefiniti.

Se vuoi ripristinare la configurazione del sistema del nodo ai valori predefiniti, aggiorna il file di configurazione con valori vuoti per i campi kubelet e sysctl, ad esempio:

kubeletConfig: {}
linuxConfig:
  sysctl: {}

Eliminare una configurazione del sistema di nodi

Per rimuovere una configurazione del sistema di nodi:

  1. Crea un node pool.
  2. Esegui la migrazione dei workload al nuovo pool di nodi.
  3. Elimina il node pool con la vecchia configurazione del sistema dei nodi.

Opzioni di configurazione per kubelet

Le tabelle in questa sezione descrivono le opzioni kubelet che puoi modificare.

Gestione della CPU

La tabella seguente descrive le opzioni di gestione della CPU per kubelet.

Impostazioni di configurazione kubelet Limitazioni Impostazione predefinita Descrizione
cpuCFSQuota Deve essere true o false. true Questa impostazione applica il limite della CPU del pod. Se imposti questo valore su false, i limiti di CPU per i pod vengono ignorati.

Ignorare i limiti di CPU potrebbe essere utile in alcuni scenari in cui i pod sono sensibili a questi limiti. Il rischio di disattivare cpuCFSQuota è che un pod non autorizzato possa consumare più risorse CPU del previsto.
cpuCFSQuotaPeriod Deve essere una durata di tempo. "100ms" Questa impostazione imposta il valore del periodo di quota CFS della CPU, cpu.cfs_period_us, che specifica la frequenza con cui deve essere riassegnato l'accesso di un cgroup alle risorse della CPU. Questa opzione ti consente di ottimizzare il comportamento di limitazione della CPU.

Gestione della memoria e rimozione

La tabella seguente descrive le opzioni modificabili per la gestione della memoria e l'eliminazione. Questa sezione contiene anche una tabella separata che descrive le opzioni modificabili per il flag evictionSoft.

Impostazioni di configurazione kubelet Limitazioni Impostazione predefinita Descrizione
evictionSoft Mappa dei nomi degli indicatori. Per le limitazioni dei valori, consulta la tabella seguente. none Questa impostazione mappa i nomi dei segnali a una quantità o una percentuale che definisce le soglie di rimozione temporanea. Una soglia di sfratto temporaneo deve avere un periodo di tolleranza. kubelet non espelle i pod finché non viene superato il periodo di tolleranza.
evictionSoftGracePeriod Mappa dei nomi degli indicatori. Per ogni nome dell'indicatore, il valore deve essere una durata positiva inferiore a 5m. Le unità di tempo valide sono ns, us (o µs), ms, s o m. none Questa impostazione mappa i nomi dei segnali alle durate che definiscono i periodi di tolleranza per le soglie di espulsione temporanea. Ogni soglia di sfratto soft deve avere un periodo di tolleranza corrispondente.
evictionMinimumReclaim Mappa dei nomi degli indicatori. Per ogni nome dell'indicatore, il valore deve essere una percentuale positiva inferiore a 10%. none Questa impostazione mappa i nomi dei segnali alle percentuali che definiscono la quantità minima di una determinata risorsa che kubelet recupera quando esegue l'espulsione di un pod.
evictionMaxPodGracePeriodSeconds Il valore deve essere un numero intero compreso tra 0 e 300. 0 Questa impostazione definisce, in secondi, il periodo di tolleranza massimo per la terminazione del pod durante l'espulsione.

La tabella seguente mostra le opzioni modificabili per il flag evictionSoft. Le stesse opzioni si applicano anche ai flag evictionSoftGracePeriod e evictionMinimumReclaim con restrizioni diverse.

Impostazioni di configurazione kubelet Limitazioni Impostazione predefinita Descrizione
memoryAvailable Il valore deve essere una quantità maggiore di 100Mi e inferiore a 50% della memoria del nodo. none Questa impostazione rappresenta la quantità di memoria disponibile prima dell'eliminazione temporanea. Definisce la quantità di segnale memory.available in kubelet .
nodefsAvailable Il valore deve essere compreso tra 10% e 50%. none Questa impostazione rappresenta il nodo file system disponibile prima dell'espulsione temporanea. Definisce la quantità di segnale nodefs.available in kubelet .
nodefsInodesFree Il valore deve essere compreso tra 5% e 50%. none Questa impostazione rappresenta gli inode nodefs liberi prima dell'eliminazione temporanea. Definisce la quantità di segnale nodefs.inodesFree in kubelet .
imagefsAvailable Il valore deve essere compreso tra 15% e 50%. none Questa impostazione rappresenta imagefs disponibile prima dell'eliminazione temporanea. Definisce la quantità di indicatore imagefs.available nel kubelet .
imagefsInodesFree Il valore deve essere compreso tra 5% e 50%. none Questa impostazione rappresenta gli inode imagefs liberi prima dell'eliminazione temporanea. Definisce la quantità di segnale imagefs.inodesFree nel kubelet.
pidAvailable Il valore deve essere compreso tra 10% e 50%. none Questa impostazione rappresenta i PID disponibili prima dell'eliminazione temporanea. Definisce la quantità di segnale pid.available in kubelet.
singleProcessOOMKill Il valore deve essere true o false. true per i nodi cgroupv1, false per i nodi cgroupv2. Questa impostazione determina se i processi nel container vengono terminati individualmente o come gruppo.

Disponibile nelle versioni 1.32.4-gke.1132000, 1.33.0-gke.1748000 o successive di GKE.

Gestione PID

La tabella seguente descrive le opzioni modificabili per la gestione dei PID.

Impostazioni di configurazione kubelet Limitazioni Impostazione predefinita Descrizione
podPidsLimit Il valore deve essere compreso tra 1024 e 4194304. none Questa impostazione definisce il numero massimo di ID processo (PID) che ogni pod può utilizzare.

Logging

La tabella seguente descrive le opzioni modificabili per la registrazione.

Impostazioni di configurazione kubelet Limitazioni Impostazione predefinita Descrizione
containerLogMaxSize Il valore deve essere un numero positivo e un suffisso di unità compreso tra 10Mi e 500Mi inclusi. 10Mi Questa impostazione controlla l'impostazione containerLogMaxSize del criterio di rotazione dei log dei container, che consente di configurare le dimensioni massime per ogni file di log. Il valore predefinito è 10Mi. Le unità valide sono Ki, Mi e Gi.
containerLogMaxFiles Il valore deve essere un numero intero compreso tra 2 e 10 inclusi. 5 Questa impostazione controlla l'impostazione containerLogMaxFiles del criterio di rotazione dei file di log del contenitore, che consente di configurare il numero massimo di file consentiti per ogni contenitore rispettivamente. Il valore predefinito è 5. La dimensione totale dei log (container_log_max_size*container_log_max_files) per contenitore non può superare l'1% dello spazio di archiviazione totale del nodo.

Garbage collection delle immagini

La seguente tabella descrive le opzioni modificabili per la garbage collection delle immagini.

Impostazioni di configurazione kubelet Limitazioni Impostazione predefinita Descrizione
imageGCHighThresholdPercent Il valore deve essere un numero intero compreso tra 10 e 85 inclusi e superiore a imageGcLowThresholdPercent. 85 Questa impostazione definisce la percentuale di utilizzo del disco al di sopra della quale viene eseguita la garbage collection delle immagini. Rappresenta l'utilizzo del disco più elevato per l'esecuzione della garbage collection. La percentuale viene calcolata dividendo il valore di questo campo per 100.
imageGCLowThresholdPercent Il valore deve essere un numero intero compreso tra 10 e 85 inclusi e inferiore a imageGcHighThresholdPercent. 80 Questa impostazione definisce la percentuale di utilizzo del disco prima della quale non viene mai eseguita la garbage collection delle immagini. Rappresenta l'utilizzo del disco più basso da raccogliere. La percentuale viene calcolata dividendo il valore di questo campo per 100.
imageMinimumGcAge Il valore deve essere una durata di tempo non superiore a 2m. Le unità di tempo valide sono ns, us (o µs), ms, s, m o h. 2m Questa impostazione definisce l'età minima di un'immagine inutilizzata prima che venga eseguita la garbage collection.
imageMaximumGcAge Il valore deve essere una durata di tempo. 0s

Questa impostazione definisce l'età massima di un'immagine prima che venga sottoposta alla garbage collection. Il valore predefinito di questo campo è 0s, che lo disattiva. Pertanto, le immagini non verranno eliminate in base al fatto che non vengono utilizzate. Se specificato, questo valore deve essere maggiore del valore del campo imageMinimumGcAge.

Disponibile nelle versioni GKE 1.30.7-gke.1076000, 1.31.3-gke.1023000 o successive.

Pull delle immagini

La tabella seguente descrive le opzioni modificabili per il pull delle immagini.

Impostazioni di configurazione kubelet Limitazioni Impostazione predefinita Descrizione
maxParallelImagePulls Il valore deve essere un numero intero compreso tra 2 e 5 inclusi. 2 o 3 in base al tipo di disco. Questa impostazione definisce il numero massimo di pull di immagini in parallelo. Il valore predefinito è determinato dal tipo di disco di avvio.

Sicurezza e operazioni non sicure

La tabella seguente descrive le opzioni modificabili per configurare la sicurezza e la gestione delle operazioni non sicure.

Impostazioni di configurazione kubelet Limitazioni Impostazione predefinita Descrizione
allowedUnsafeSysctls

Elenco di sysctl nomi o gruppi. I gruppi sysctl consentiti sono i seguenti:

  • kernel.shm*
  • kernel.msg*
  • kernel.sem
  • fs.mqueue.*
  • net.*.
none Questa impostazione definisce una lista consentita separata da virgole di nomi di sysctl non sicuri o gruppi di sysctl che possono essere impostati sui pod.
insecureKubeletReadonlyPortEnabled Il valore deve essere booleano, ovvero true o false. true Questa impostazione disabilita la kubelet porta di sola lettura non sicura 10255 in ogni nuovo pool di nodi del cluster. Se configuri questa impostazione in questo file, non puoi utilizzare un client API GKE per modificarla a livello di cluster.

Resource Manager

Kubernetes offre una suite di Resource Manager. Puoi configurare questi Resource Manager per coordinare e ottimizzare l'allineamento delle risorse dei nodi per i pod configurati con requisiti specifici per CPU, dispositivi e risorse di memoria (hugepages).

La tabella seguente descrive le opzioni modificabili per Resource Manager.

Impostazioni di configurazione kubelet Limitazioni Impostazione predefinita Descrizione
cpuManagerPolicy Il valore deve essere none o static. none Questa impostazione controlla il kubelet criterio di gestione della CPU. Il valore predefinito è none, ovvero lo schema di affinità della CPU predefinito, che non fornisce affinità oltre a quella eseguita automaticamente dallo scheduler del sistema operativo.

Se imposti questo valore su static, i pod che si trovano sia nella classe QoS Guaranteed sia con richieste di CPU intere possono essere assegnati a CPU esclusive.
memoryManager.policy Il valore deve essere None o Static. None

Questa impostazione controlla il kubelet criterio di gestione della memoria. Con il valore predefinito di None, Kubernetes si comporta come se Memory Manager non fosse presente.

Se imposti questo valore su Static, il criterio Memory Manager invia suggerimenti sulla topologia che dipendono dal tipo di pod. Per maggiori dettagli, consulta Norme statiche.

Questa impostazione è supportata per i cluster con il control plane che esegue GKE versione 1.32.3-gke.1785000 o successive.

topologyManager

Il valore deve essere una delle impostazioni supportate per ciascuno dei rispettivi campi.

Non puoi impostare il campo topologyManager quando utilizzi le istruzioni Terraform per aggiungere la configurazione a un node pool Standard.

  • policy: none
  • scope: container

Queste impostazioni controllano la configurazione di kubelet Topology Manager utilizzando i campi secondari policy e scope. Topology Manager coordina l'insieme di componenti responsabili delle ottimizzazioni delle prestazioni relative a isolamento della CPU, memoria e località del dispositivo.

Puoi impostare le impostazioni di criteri e ambito in modo indipendente l'una dall'altra. Per saperne di più su queste impostazioni, consulta Ambiti e policy di Topology Manager.

Le seguenti risorse GKE supportano questa impostazione:

  • Cluster con il control plane che esegue GKE versione 1.32.3-gke.1785000 o successive. Per i cluster con il control plane e i nodi che eseguono la versione 1.33.0-gke.1712000 o successive, Topology Manager riceve anche informazioni sulla topologia della GPU.
  • Nodi con i seguenti tipi di macchine: A2, A3, A4, C3, C4, C4A, G2, G4, M3, N4

Opzioni di configurazione sysctl

Per ottimizzare le prestazioni del sistema, puoi modificare i parametri del kernel Linux. Le tabelle in questa sezione descrivono i vari parametri del kernel che puoi configurare.

Parametri del file system (fs.*)

La tabella seguente descrive i parametri modificabili per il file system Linux. Queste impostazioni controllano il comportamento del file system Linux, ad esempio i limiti di gestione dei file e il monitoraggio degli eventi.

Parametro Sysctl Limitazioni Descrizione
fs.aio-max-nr Deve essere compreso tra [65536, 4194304]. Questa impostazione definisce il numero massimo a livello di sistema di richieste I/O asincrone.
fs.file-max Deve essere compreso tra [104857, 67108864]. Questa impostazione definisce il numero massimo di handle di file che il kernel Linux può allocare.
fs.inotify.max_user_instances Deve essere compreso tra [8192, 1048576]. Questa impostazione definisce il numero massimo di istanze inotify che un utente può creare.
fs.inotify.max_user_watches Deve essere compreso tra [8192, 1048576]. Questa impostazione definisce il numero massimo di inotify watch che un utente può creare.
fs.nr_open Deve essere compreso tra [1048576, 2147483584]. Questa impostazione definisce il numero massimo di descrittori di file che possono essere aperti da un processo.

Parametri del kernel (kernel.*)

La seguente tabella descrive i parametri modificabili per il kernel Linux. Queste impostazioni configurano le funzionalità principali del kernel, inclusa l'allocazione della memoria condivisa.

Parametro sysctl Limitazioni Descrizione
kernel.shmmni Deve essere compreso tra [4096, 32768]. Questa impostazione definisce il numero massimo di segmenti di memoria condivisa a livello di sistema. Se questo valore non è impostato, il valore predefinito è 4096.
kernel.shmmax Il valore deve essere compreso tra [0, 18446744073692774399]. Questa impostazione definisce le dimensioni massime, in byte, di un singolo segmento di memoria condivisa consentito dal kernel. Questo valore viene ignorato se è maggiore della quantità effettiva di RAM, il che significa che tutta la RAM disponibile può essere condivisa.
kernel.shmall Il valore deve essere compreso tra [0, 18446744073692774399]. Questa impostazione definisce la quantità totale di pagine di memoria condivisa che possono essere utilizzate sul sistema contemporaneamente. Una pagina è di 4096 byte sull'architettura AMD64 e Intel 64.
kernel.perf_event_paranoid Deve essere compreso tra -1 e 3. Questa impostazione controlla l'utilizzo del sistema di eventi di prestazioni da parte di utenti senza privilegi senza CAP_PERFMON. Il valore predefinito è 2 nel kernel.
kernel.sched_rt_runtime_us Il valore deve essere compreso tra -1 e 1.000.000. Questa impostazione definisce un limite globale alla quantità di tempo che può essere utilizzata dalla pianificazione in tempo reale.
kernel.softlockup_panic Facoltativo (booleano). Questa impostazione controlla se il kernel va in panico quando viene rilevato un soft lockup.
kernel.yama.ptrace_scope Deve essere compreso tra [0, 3].

Questa impostazione definisce l'ambito e le limitazioni per la chiamata di sistema ptrace(), influendo sul debug e sul tracciamento dei processi. I valori supportati includono:

  • 0: autorizzazioni ptrace classiche.
  • 1: ptrace con limitazioni, che è l'impostazione predefinita in molte distribuzioni. Solo processi secondari o CAP_SYS_PTRACE.
  • 2: ptrace solo per amministratori. Solo processi con CAP_SYS_PTRACE.
  • 3: no ptrace. Le chiamate ptrace non sono consentite.
kernel.kptr_restrict Deve essere compreso tra [0, 2]. Questa impostazione indica se vengono imposte limitazioni all'esposizione degli indirizzi del kernel tramite /proc e altre interfacce.
kernel.dmesg_restrict Facoltativo (booleano). Questa impostazione indica se gli utenti senza privilegi possono utilizzare dmesg(8) per visualizzare i messaggi del buffer di log del kernel.
kernel.sysrq Deve essere compreso tra [0, 511].

Questa impostazione controlla le funzioni che possono essere richiamate tramite il tasto SysRq. I valori possibili includono:

  • 0: disattiva completamente sysrq.
  • 1: attiva tutte le funzioni sysrq.
  • >1: maschera di bit delle funzioni sysrq consentite. Per ulteriori informazioni, consulta Linux Magic System Request Key Hacks.

Parametri di rete (net.*)

La tabella seguente descrive i parametri modificabili per il networking. Queste impostazioni ottimizzano le prestazioni e il comportamento dello stack di rete, dai buffer dei socket al monitoraggio delle connessioni.

Parametro Sysctl Limitazioni Descrizione
net.core.busy_poll Qualsiasi numero intero positivo inferiore a 2147483647. Questa impostazione definisce il timeout di polling occupato a bassa latenza per il polling e la selezione. Rappresenta il tempo approssimativo in µs per il ciclo di attesa occupato per gli eventi.
net.core.busy_read Qualsiasi numero intero positivo inferiore a 2147483647. Questa impostazione definisce il timeout di polling occupato a bassa latenza per le letture dei socket. Rappresenta il tempo approssimativo in µs per l'attesa del ciclo occupato per i pacchetti nella coda del dispositivo.
net.core.netdev_max_backlog Qualsiasi numero intero positivo inferiore a 2147483647. Questa impostazione definisce il numero massimo di pacchetti in coda sul lato INPUT quando l'interfaccia riceve pacchetti più velocemente di quanto il kernel possa elaborarli.
net.core.rmem_default Qualsiasi numero intero positivo inferiore a 2147483647. Questa impostazione definisce la dimensione predefinita del buffer del socket di ricezione, in byte.
net.core.rmem_max Qualsiasi numero intero positivo inferiore a 2147483647. Questa impostazione definisce la dimensione massima del buffer del socket di ricezione, in byte.
net.core.wmem_default Qualsiasi numero intero positivo inferiore a 2147483647. Questa impostazione definisce l'impostazione predefinita, in byte, del buffer di invio del socket.
net.core.wmem_max Qualsiasi numero intero positivo inferiore a 2147483647. Questa impostazione definisce la dimensione massima del buffer del socket di invio, in byte.
net.core.optmem_max Qualsiasi numero intero positivo inferiore a 2147483647. Questa impostazione definisce la dimensione massima del buffer ausiliario consentita per socket.
net.core.somaxconn Il valore deve essere compreso tra [128, 2147483647]. Questa impostazione definisce il limite del backlog socket listen(), noto nello spazio utente come SOMAXCONN. Per impostazione predefinita, questa impostazione è 128.
net.ipv4.tcp_rmem {min, default, max} (ciascuno > 0, memoria in byte). Questa impostazione definisce la dimensione minima, in byte, del buffer di ricezione utilizzato dai socket UDP nella moderazione. L'impostazione predefinita è 1 pagina.
net.ipv4.tcp_wmem {min, default, max} (ciascuno > 0, memoria in byte). Questa impostazione definisce le dimensioni minime, in byte, del buffer di invio utilizzato dai socket UDP in moderazione. L'impostazione predefinita è 1 pagina.
net.ipv4.tcp_tw_reuse Deve essere compreso tra {0, 1}. Questa impostazione definisce se consentire il riutilizzo dei socket nello stato TIME_WAIT per le nuove connessioni quando è sicuro dal punto di vista del protocollo. Il valore predefinito è 0.
net.ipv4.tcp_max_orphans Deve essere compreso tra [16384, 262144]. Questa impostazione definisce il numero massimo di socket TCP non collegati a nessun handle di file utente.
net.ipv4.tcp_max_tw_buckets Deve essere compreso tra [4096, 2147483647]. Questa impostazione definisce il numero massimo di socket timewait mantenuti contemporaneamente dal sistema. Se questo numero viene superato, il socket di attesa viene immediatamente eliminato e viene stampato un avviso.
net.ipv4.tcp_syn_retries Il valore deve essere compreso tra [1, 127]. Questa impostazione definisce il numero di volte in cui vengono ritrasmessi i SYN iniziali per un tentativo di connessione TCP attivo.
net.ipv4.tcp_ecn Deve essere compreso tra [0, 2]. Questa impostazione controlla l'utilizzo della notifica di congestione esplicita (ECN) da parte di TCP. ECN viene utilizzato solo quando entrambe le estremità della connessione TCP indicano il supporto.
net.ipv4.tcp_mtu_probing Deve essere compreso tra [0, 2].

Questa impostazione controlla la Path MTU Discovery del livello di pacchettizzazione TCP. I valori supportati sono i seguenti:

  • 0: disattivato.
  • 1: disattivato per impostazione predefinita, attivato quando viene rilevato un buco nero ICMP.
  • 2: sempre abilitato. Utilizza l'MSS iniziale di tcp_base_mss.
net.ipv4.tcp_congestion_control Deve trattarsi di uno dei valori supportati della colonna Descrizione.

Questa impostazione non è supportata quando GKE Dataplane V2 è abilitato sul cluster.

I seguenti valori supportati dipendono dal tipo di immagine:

  • COS: reno, cubic, bbr, lp
  • Ubuntu: reno, cubic, bbr, lp, htcp, vegas, dctcp, bic, cdg, highspeed, hybla, illinois, nv, scalable, veno, westwood, yeah
net.ipv6.conf.all.disable_ipv6 Valore booleano. La modifica di questo valore equivale alla modifica dell'impostazione conf/default/disable_ipv6 e di tutte le impostazioni disable_ipv6 per interfaccia allo stesso valore.
net.ipv6.conf.default.disable_ipv6 Valore booleano. Questa impostazione disabilita il funzionamento di IPv6.
net.netfilter.nf_conntrack_acct Deve essere compreso tra {0, 1}. Questa impostazione attiva la contabilizzazione del flusso di monitoraggio delle connessioni. Il valore predefinito è 0, il che significa che l'impostazione è disattivata. Disponibile nelle versioni di GKE 1.32.0-gke.1448000 o successive.
net.netfilter.nf_conntrack_max Deve essere compreso tra [65536, 4194304]. Questa impostazione definisce le dimensioni della tabella di monitoraggio delle connessioni. Se viene raggiunto il valore massimo, la nuova connessione non andrà a buon fine. Disponibile nelle versioni di GKE 1.32.0-gke.1448000 o successive.
net.netfilter.nf_conntrack_buckets Il valore deve essere compreso tra [65536, 524288].

Questa impostazione definisce le dimensioni della tabella hash. L'impostazione consigliata è il risultato di quanto segue: nf_conntrack_max = nf_conntrack_buckets * 4.

Disponibile nelle versioni di GKE 1.32.0-gke.1448000 o successive.

net.netfilter.nf_conntrack_tcp_timeout_close_wait Deve essere compreso tra [60, 3600].

Questa impostazione definisce il periodo, in secondi, per il quale le connessioni TCP possono rimanere nello stato CLOSE_WAIT. Il valore predefinito è 3600.

Disponibile nelle versioni di GKE 1.32.0-gke.1448000 o successive.

net.netfilter.nf_conntrack_tcp_timeout_established Deve essere compreso tra [600, 86400].

Questa impostazione definisce la durata, in secondi, delle connessioni inattive prima che vengano eliminate automaticamente dalla tabella di monitoraggio delle connessioni.

Disponibile nelle versioni di GKE 1.32.0-gke.1448000 o successive.

net.netfilter.nf_conntrack_tcp_timeout_time_wait Il valore deve essere compreso tra 1 e 600.

Questa impostazione definisce il periodo, in secondi, per il quale le connessioni TCP possono rimanere nello stato TIME_WAIT. Il valore predefinito è 120.

Disponibile nelle versioni di GKE 1.32.0-gke.1448000 o successive.

Parametri della memoria virtuale (vm.*)

La tabella seguente descrive i parametri modificabili per il sottosistema di memoria virtuale. Queste impostazioni gestiscono il sottosistema di memoria virtuale, che controlla il modo in cui il kernel gestisce la memoria, lo swapping e la memorizzazione nella cache del disco.

Parametro sysctl Limitazioni Descrizione
vm.max_map_count Il valore deve essere compreso tra [65536, 2147483647]. Questo file definisce il numero massimo di aree della mappa della memoria che un processo può avere.
vm.dirty_background_ratio Il valore deve essere compreso tra 1 e 100. Questa impostazione definisce la percentuale di memoria di sistema che può essere riempita con pagine sporche prima che i thread di scaricamento del kernel in background inizino la riscrittura. Il valore deve essere inferiore a quello del campo vm.dirty_ratio.
vm.dirty_background_bytes Il valore deve essere compreso tra [0, 68719476736].

Questa impostazione definisce la quantità di memoria sporca in corrispondenza della quale i thread di svuotamento del kernel in background iniziano la scrittura differita.

Tieni presente che vm.dirty_background_bytes è la controparte di vm.dirty_background_ratio. È possibile specificare solo una di queste impostazioni.

vm.dirty_expire_centisecs Deve essere compreso tra [0, 6000]. Questa impostazione definisce l'età massima, in centesimi di secondo, in cui i dati non sincronizzati possono rimanere in memoria prima che i thread di scaricamento del kernel li scrivano su disco.
vm.dirty_ratio Il valore deve essere compreso tra 1 e 100. Questa impostazione definisce la percentuale di memoria di sistema che può essere riempita con pagine sporche prima che i processi che eseguono scritture siano costretti a bloccare e scrivere i dati sporchi in modo sincrono.
vm.dirty_bytes Il valore deve essere compreso tra [0, 68719476736].

Questa impostazione definisce la quantità di memoria sporca in corrispondenza della quale un processo che genera scritture su disco inizia a eseguire il writeback. Il valore minimo consentito per vm.dirty_bytes è di due pagine in byte. Qualsiasi valore inferiore a questo limite verrà ignorato e la vecchia configurazione verrà mantenuta.

Tieni presente che vm.dirty_bytes è la controparte di vm.dirty_ratio. È possibile specificare solo una di queste impostazioni.

vm.dirty_writeback_centisecs Deve essere compreso tra [0, 1000]. Questa impostazione definisce l'intervallo, in centesimi di secondo, in cui i thread di scaricamento del kernel si attivano per scrivere i dati sporchi precedenti sul disco.
vm.overcommit_memory Deve essere compreso tra {0, 1, 2}.

Questa impostazione determina la strategia del kernel per la gestione dell'overcommitment della memoria. I valori sono i seguenti:

  • 0: rifiuta le allocazioni di grandi dimensioni
  • 1: consenti sempre
  • 2: impedisci il commit oltre lo spazio di swap + rapporto della RAM
vm.overcommit_ratio Il valore deve essere compreso tra 0 e 100. Questa impostazione definisce la percentuale di RAM fisica consentita per l'overcommit quando il valore del campo vm.overcommit_memory è impostato su 2.
vm.vfs_cache_pressure Il valore deve essere compreso tra 0 e 100. Questa impostazione regola la preferenza del kernel per il recupero della memoria utilizzata per le cache di dentry (directory) e inode.
vm.swappiness Deve essere compreso tra [0, 200]. Questa impostazione controlla la tendenza del kernel a spostare i processi dalla memoria fisica al disco di swap. Il valore predefinito è 60.
vm.watermark_scale_factor Deve essere compreso tra [10, 3000]. Questa impostazione controlla l'aggressività di kswapd. Definisce la memoria rimanente prima che kswapd si riattivi e la memoria da liberare prima che si disattivi. Il valore predefinito è 10.
vm.min_free_kbytes Deve essere compreso tra [67584, 1048576]. Questa impostazione definisce la memoria libera minima prima dell'errore Out Of Memory. Il valore predefinito è 67584.

Per saperne di più sui valori supportati per ogni flag sysctl, consulta la documentazione di gcloud CLI --system-config-from-file.

Spazi dei nomi Linux diversi potrebbero avere valori unici per un determinato flag sysctl, ma altri potrebbero essere globali per l'intero nodo. L'aggiornamento delle opzioni sysctl utilizzando una configurazione del sistema di nodi consente di garantire 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

Il runtime del container e kubelet utilizzano i cgroup 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 GA nella versione 1.25. Per saperne di più, consulta la documentazione di Kubernetes cgroups v2.

La configurazione del sistema di nodi ti consente di personalizzare la configurazione dei cgroup dei tuoi node pool. Puoi utilizzare cgroupv1 o cgroupv2. GKE utilizza cgroupv2 per i nuovi node pool Standard che eseguono la versione 1.26 e successive e cgroupv1 per i node pool che eseguono versioni precedenti alla 1.26. Per i node pool creati con il provisioning automatico dei nodi, la configurazione di cgroup dipende dalla versione iniziale del cluster, non dalla versione del pool di nodi. cgroupv1 non è supportato sulle macchine Arm.

Puoi utilizzare la configurazione del sistema dei nodi per modificare l'impostazione di un pool di nodi in modo da utilizzare cgroupv1 o cgroupv2 in modo esplicito. L'upgrade di un pool di nodi esistente che utilizza cgroupv1 alla versione 1.26 non modifica l'impostazione in cgroupv2. I node pool esistenti che eseguono una versione precedente alla 1.26 e che non includono una configurazione cgroup personalizzata continueranno a utilizzare cgroupv1. Per modificare l'impostazione, devi specificare esplicitamente cgroupv2 per il pool di nodi esistente.

Ad esempio, per configurare il pool di nodi in modo che utilizzi cgroupv2, utilizza un file di configurazione del sistema di nodi come il seguente:

linuxConfig:
  cgroupMode: 'CGROUP_MODE_V2'

Le opzioni cgroupMode supportate sono le seguenti:

  • CGROUP_MODE_V1: utilizza cgroupv1 sul pool di nodi.
  • CGROUP_MODE_V2: utilizza cgroupv2 sul pool di nodi.
  • CGROUP_MODE_UNSPECIFIED: utilizza la configurazione cgroup GKE predefinita.

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 successive.
  • Il cluster e i pool di nodi devono eseguire GKE versione 1.24.2-gke.300 o successive.
  • Devi utilizzare l'immagine del nodo Container-Optimized OS con Containerd o Ubuntu con Containerd.
  • Se uno dei tuoi workload dipende dalla lettura del file system cgroup (/sys/fs/cgroup/...), assicurati che sia compatibile con l'API cgroupv2.
  • Se utilizzi strumenti di monitoraggio o di terze parti, assicurati che siano compatibili con cgroupv2.
  • Se utilizzi carichi di lavoro Java (JDK), ti consigliamo di utilizzare versioni che supportano completamente cgroupv2, tra cui JDK 8u372, JDK 11.0.16 o versioni successive oppure JDK 15 o versioni successive.

Verifica la configurazione di cgroup

Quando aggiungi una configurazione di sistema dei nodi, GKE deve ricreare i nodi per implementare le modifiche. Dopo aver aggiunto la configurazione a un node pool e ricreato i nodi, puoi verificare la nuova configurazione.

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

Interfaccia a riga di comando gcloud

Controlla la configurazione di 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 utilizzano cgroupv1
  • EFFECTIVE_CGROUP_MODE_V2: i nodi utilizzano cgroupv2

L'output mostra solo la nuova configurazione del cgroup dopo la ricreazione dei nodi nel pool di nodil. L'output è vuoto per i node pool Windows Server, che non supportano cgroup.

kubectl

Per utilizzare kubectl per verificare la configurazione del cgroup per i nodi in questo pool di nodi, seleziona un nodo e connettiti a esso utilizzando le seguenti istruzioni:

  1. Crea una shell interattiva con qualsiasi nodo del pool di nodi. Nel comando, sostituisci mynode con il nome di un nodo qualsiasi nel pool di nodi.
  2. Identifica la versione di cgroup sui nodi Linux.

Opzioni di configurazione di hugepages di Linux

Puoi utilizzare un file di configurazione del sistema di nodi per preallocare hugepages. Kubernetes supporta le hugepage preallocate come tipo di risorsa, in modo simile a CPU o memoria.

Per utilizzare hugepages, si applicano le seguenti limitazioni e requisiti:

  • Per garantire che il nodo non sia completamente occupato da hugepage, le dimensioni complessive delle hugepage allocate non possono superare quanto segue:
    • Sulle macchine con meno di 30 GB di memoria: 60% della memoria totale. Ad esempio, su una macchina e2-standard-2 con 8 GB di memoria, non puoi allocare più di 4,8 GB per le pagine enormi.
    • Su macchine con più di 30 GB di memoria: 80% della memoria totale. Ad esempio, sulle macchine c4a-standard-8 con 32 GB di memoria, le hugepage non possono superare 25,6 GB.
  • Le hugepage da 1 GB sono disponibili solo sui tipi di macchine A3, C2D, C3, C3D, C4, C4A, C4D, CT5E, CT5LP, CT6E, H3, M2, M3, M4 o Z3.

La tabella seguente descrive le impostazioni modificabili per le hugepage Linux.

Parametro di configurazione Limitazioni Valore predefinito Descrizione
hugepage_size2m Conteggio numeri interi. Soggetto ai limiti di allocazione della memoria descritti in precedenza. 0 Questa impostazione prealloca un numero specifico di hugepage da 2 MB.
hugepage_size1g Conteggio numeri interi. Soggette a entrambe le limitazioni di memoria e tipo di macchina descritte in precedenza. 0 Questa impostazione prealloca un numero specifico di hugepage da 1 GB.

Huge page trasparenti (THP)

Puoi utilizzare un file di configurazione del sistema dei nodi per abilitare il supporto di Transparent HugePage del kernel Linux. Con THP, il kernel assegna automaticamente le hugepage ai processi senza pre-allocazione manuale.

La seguente tabella descrive i parametri modificabili per THP.

Parametro di configurazione Valori supportati Valore predefinito Descrizione
transparentHugepageEnabled
  • TRANSPARENT_HUGEPAGE_ENABLED_ALWAYS: le pagine enormi trasparenti sono abilitate a livello di sistema.
  • TRANSPARENT_HUGEPAGE_ENABLED_MADVISE: le pagine enormi trasparenti sono abilitate all'interno delle regioni MADV_HUGEPAGE. Questa impostazione è la configurazione predefinita del kernel.
  • TRANSPARENT_HUGEPAGE_ENABLED_NEVER: la pagina enorme trasparente è disattivata.
  • TRANSPARENT_HUGEPAGE_ENABLED_UNSPECIFIED: il valore predefinito. GKE non modifica la configurazione del kernel.
UNSPECIFIED Questa impostazione controlla se THP è abilitato per la memoria anonima.
transparentHugepageDefrag
  • TRANSPARENT_HUGEPAGE_DEFRAG_ALWAYS: un'applicazione che richiede l'interruzione di THP in caso di errore di allocazione e recupera direttamente le pagine e la memoria compatta nel tentativo di allocare immediatamente una THP.
  • TRANSPARENT_HUGEPAGE_DEFRAG_DEFER: un'applicazione riattiva kswapd in background per recuperare le pagine e kcompactd per compattare la memoria in modo che THP sia disponibile nel prossimo futuro. È responsabilità di khugepaged installare le pagine THP in un secondo momento.
  • TRANSPARENT_HUGEPAGE_DEFRAG_DEFER_WITH_MADVISE: un'applicazione esegue il recupero e la compattazione diretti come di consueto, ma solo per le regioni che hanno utilizzato madvise(MADV_HUGEPAGE). Tutte le altre regioni attivano kswapd in background per recuperare le pagine e kcompactd per compattare la memoria in modo che THP sia disponibile nel prossimo futuro.
  • TRANSPARENT_HUGEPAGE_DEFRAG_MADVISE: un'applicazione esegue il recupero e la compattazione diretti come di consueto, ma solo per le regioni che hanno utilizzato madvise(MADV_HUGEPAGE). Tutte le altre regioni attivano kswapd in background per recuperare le pagine e kcompactd per compattare la memoria in modo che THP sia disponibile nel prossimo futuro.
  • TRANSPARENT_HUGEPAGE_DEFRAG_NEVER: un'applicazione non esegue mai il recupero diretto o la compattazione.
  • TRANSPARENT_HUGEPAGE_DEFRAG_UNSPECIFIED: il valore predefinito. GKE non modifica la configurazione del kernel.
UNSPECIFIED Questa impostazione definisce la configurazione della deframmentazione per THP.

THP è disponibile in GKE versione 1.33.2-gke.4655000 o successive. È abilitato per impostazione predefinita anche sui nuovi node pool TPU nella versione 1.33.2-gke.4655000 o successive di GKE. THP non è abilitato quando esegui l'upgrade dei pool di nodi esistenti a una versione supportata o successiva.

Passaggi successivi