Lo swap di memoria dei nodi Google Kubernetes Engine (GKE) consente ai nodi GKE di utilizzare lo spazio su disco come memoria virtuale quando la memoria fisica è esaurita. Lo scambio di memoria dei nodi può contribuire a migliorare la resilienza delle applicazioni e a prevenire errori di esaurimento della memoria per determinati carichi di lavoro.
Quando utilizzare lo swap di memoria dei nodi
Utilizza lo swap di memoria dei nodi per fornire un buffer contro gli errori di esaurimento della memoria per le applicazioni che richiedono molta memoria, soprattutto durante picchi di utilizzo imprevisti. Lo swap di memoria dei nodi può contribuire a migliorare la resilienza del workload, ad esempio negli scenari seguenti:
- Esegui carichi di lavoro con pattern di memoria imprevedibili.
- Ridurre il rischio di arresto anomalo delle applicazioni a causa dell'esaurimento della memoria dei nodi.
- Ottimizza i costi evitando la necessità di eseguire l'overprovisioning della memoria per picchi occasionali.
Come funziona lo scambio di memoria dei nodi
Quando abiliti lo swap di memoria dei nodi, GKE configura il sistema operativo del nodo in modo che utilizzi lo spazio su disco come memoria virtuale. Questo processo fornisce un buffer per le applicazioni che subiscono una pressione temporanea sulla memoria.
GKE calcola i limiti di swap dei container in base ai limiti delle risorse di memoria del container e alla memoria totale del nodo.
Puoi configurare lo spazio di swap su diversi tipi di archiviazione per bilanciare prestazioni e costi:
- Disco di avvio: utilizza il disco di avvio del nodo per lo spazio di swap.
- SSD locale temporaneo: utilizza un SSD locale condiviso anche con lo spazio di archiviazione temporaneo del pod.
- SSD locale dedicato: riserva uno o più SSD locali esclusivamente per lo swap.
Per proteggere i dati sensibili, GKE cripta lo spazio di swap per impostazione predefinita utilizzando una chiave effimera.
Requisiti e limitazioni
Lo scambio di memoria dei nodi presenta i seguenti requisiti e limitazioni:
- I cluster GKE devono essere la versione
1.34.1-gke.1341000o successiva. - Solo i pod con la classe di qualità del servizio (QoS)
Burstablepossono utilizzare lo swap di memoria dei nodi. Per ulteriori informazioni sulle classi QoS, consulta la documentazione di Kubernetes relativa alle classi di qualità del servizio dei pod. - Se abiliti lo swap di memoria dei nodi, il criterio di ridimensionamento dei container deve essere impostato su
RestartContainer. - Se configuri lo swap di memoria del nodo in modo che utilizzi un disco di avvio, le dimensioni dello swap non possono superare il 50% della capacità totale del disco di avvio.
Se configuri lo swap di memoria dei nodi in modo che utilizzi un SSD locale, devi assicurarti che siano soddisfatti i seguenti requisiti:
- Il tipo di macchina deve supportare le SSD locali. Non puoi utilizzare lo spazio di archiviazione a blocchi non elaborato con un SSD locale.
- I nodi devono essere sottoposti a provisioning con SSD locali. Il metodo di provisioning dipende
dalla serie di macchine:
- Per le serie di macchine di prima o seconda generazione, imposta il flag
--ephemeral-storage-local-ssd=count. - Per le serie di macchine di terza o quarta generazione, scegli un tipo di macchina che raggruppa gli SSD locali.
- Per le serie di macchine di prima o seconda generazione, imposta il flag
- Il tipo di macchina
e2-mediumpredefinito non supporta gli SSD locali, quindi devi selezionare un tipo di macchina diverso. - Per istruzioni su come creare o aggiornare un cluster in modo che esegua il provisioning degli SSD locali, consulta Eseguire il provisioning e utilizzare l'archiviazione temporanea basata su SSD locali.
Best practice
Lo scambio di memoria dei nodi è inteso come rete di sicurezza per picchi di memoria imprevedibili, non come sostituzione di una memoria fisica sufficiente. Per indicazioni sull'ottimizzazione dei workload, consulta Ridimensiona correttamente i tuoi workload GKE su larga scala.
Quando utilizzi lo swap di memoria dei nodi, tieni presente anche le seguenti best practice:
- Isola i nodi con swap di memoria abilitato
applicando un taint al node pool, ad esempio,
gke-swap=enabled:NoSchedulee aggiungendo una tolleranza corrispondente ai carichi di lavoro destinati a utilizzare lo swap. - Dimensiona in modo appropriato lo spazio di swap della memoria dei nodi. Lo spazio di swap della memoria dei nodi insufficiente potrebbe non impedire errori di esaurimento della memoria e un utilizzo eccessivo può peggiorare le prestazioni.
- Monitora l'utilizzo dello swap di memoria dei nodi nei tuoi workload. L'uso frequente dello swap di memoria dei nodi può essere un indicatore di pressione della memoria.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Abilita lo scambio di memoria dei nodi
Puoi abilitare lo swap della memoria dei nodi in base al cluster o al pool di nodi. Per attivare
lo swap della memoria dei nodi, crea o aggiorna un file system-config.yaml che contenga
la configurazione dello swap della memoria dei nodi che preferisci. Il seguente esempio
attiva lo swap della memoria dei nodi con le impostazioni predefinite:
linuxConfig:
swapConfig:
enabled: true
Esistono impostazioni aggiuntive che puoi configurare. Questo esempio configura lo swap non criptato in modo che utilizzi il 30% dello spazio di archiviazione di un SSD locale temporaneo:
linuxConfig:
swapConfig:
enabled: true
encryptionConfig:
disabled: true
ephemeralLocalSsdProfile:
swapSizePercent: 30
Per un elenco dei campi facoltativi che puoi configurare, consulta la documentazione dell'API LinuxNodeConfig.
Abilita lo swap di memoria dei nodi su un cluster
Per attivare lo swap di memoria dei nodi su un cluster, completa uno dei seguenti passaggi:
Per creare un nuovo cluster con lo swap di memoria dei nodi abilitato, esegui il seguente comando:
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --cluster-version=1.34.1-gke.1341000 \ --system-config-from-file=system-config.yamlSostituisci quanto segue:
CLUSTER_NAME: il nome del nuovo cluster.LOCATION: la regione o la zona del cluster.
Per aggiornare un cluster esistente in modo da abilitare lo swap della memoria dei nodi, esegui questo comando:
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yamlSostituisci quanto segue:
CLUSTER_NAME: il nome del nuovo cluster.LOCATION: la regione o la zona del cluster.
Abilita lo scambio di memoria dei nodi su un pool di nodi
Per attivare lo swap di memoria dei nodi in un pool di nodi, completa uno dei seguenti passaggi:
Per creare un nuovo pool di nodi con lo swap di memoria dei nodi abilitato, esegui il seguente comando:
gcloud beta container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --node-version=1.34.1-gke.1293000 \ --system-config-from-file=system-config.yaml \ --machine-type=MACHINE_TYPESostituisci quanto segue:
NODEPOOL_NAME: il nome del nuovo pool di nodi.CLUSTER_NAME: il nome del tuo cluster.LOCATION: la regione o la zona del cluster.MACHINE_TYPE: un tipo di macchina compatibile. Per gli SSD locali, assicurati di scegliere un tipo di macchina che raggruppi gli SSD locali, ad esempion1-standard-1.
Per aggiornare un pool di nodi esistente in modo da abilitare lo swap di memoria dei nodi, esegui questo comando:
gcloud beta container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yamlSostituisci quanto segue:
NODEPOOL_NAME: il nome del tuo pool di nodi.CLUSTER_NAME: il nome del tuo cluster.LOCATION: la regione o la zona del cluster.
Verificare la configurazione
Per verificare che lo swap di memoria dei nodi sia abilitato:
Verifica che
system-config.yamlsia applicato con le impostazioniswapConfigeseguendo questo comando:gcloud beta container node-pools describe NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format='yaml(config.linuxNodeConfig.swapConfig)'Verifica che la configurazione di kubelet esista sul nodo eseguendo il seguente comando:
kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/configz" | jq .kubeletconfig.memorySwap
Monitorare l'utilizzo dello swap di memoria
Puoi monitorare la memoria dei nodi con Cloud Monitoring o kubectl.
Monitoraggio
Le seguenti metriche di sistema sono disponibili per impostazione predefinita per osservare l'utilizzo dello spazio di swap:
kubernetes.io/node/memory/swap_used_byteskubernetes.io/container/memory/swap_used_bytes
GKE fornisce anche metriche sull'utilizzo dello spazio di swap a livello di container tramite cAdvisor. Per utilizzare queste metriche, abilita cAdvisor sul cluster:
prometheus.googleapis.com/container_memory_swap/gauge
kubectl
Monitora l'utilizzo dello spazio di swap con i comandi kubectl completando i seguenti passaggi:
Controlla la condizione
SwapDetectedsull'oggetto nodo eseguendo questo comando:kubectl get node NODE_NAME -o jsonpath='{.status.conditions[?(@.type=="Swap")]}' | jq .L'output è simile al seguente:
{ "lastHeartbeatTime": "2025-07-11T00:14:52Z", "lastTransitionTime": "2025-06-25T05:20:10Z", "message": "Swap is active: Total=49Gi Used=0B Free=49Gi", "reason": "SwapDetected", "status": "True", "type": "Swap" }Controlla la capacità di swap eseguendo questo comando:
kubectl get node NODE_NAME -o jsonpath='{.status.nodeInfo.swap}'L'output è simile al seguente:
{"capacity":53687087104}
Disattiva lo scambio di memoria dei nodi
Per disattivare lo swap della memoria dei nodi, aggiorna il file system-config.yaml completando i seguenti passaggi:
Aggiorna il file
system-config.yamlper impostareswapConfig.enabledsufalse:linuxConfig: swapConfig: enabled: falseAggiorna il pool di nodi con la nuova configurazione:
gcloud beta container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yaml
Passaggi successivi
- Scopri di più sulla personalizzazione della configurazione del sistema di nodi.
- Scopri di più sulle opzioni di archiviazione di GKE.