Lo swap di memoria dei nodi di Google Kubernetes Engine (GKE) consente ai nodi GKE di utilizzare lo spazio su disco come memoria virtuale quando la memoria fisica è esaurita. Lo swap 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 utilizzano molta memoria, soprattutto durante i picchi di utilizzo imprevisti. Lo swap di memoria dei nodi può contribuire a migliorare la resilienza dei carichi di lavoro, ad esempio nei seguenti scenari:
- Esegui carichi di lavoro con pattern di memoria imprevedibili.
- Riduci il rischio di arresto anomalo delle applicazioni a causa dell'esaurimento della memoria dei nodi.
- Ottimizza i costi evitando di dover eseguire il provisioning di memoria in eccesso per i picchi occasionali.
Come funziona lo swap 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 swap su diversi tipi di spazio 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 dei 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 temporanea.
Requisiti e limitazioni
Lo swap di memoria dei nodi presenta i seguenti requisiti e limitazioni:
- I cluster GKE devono essere della versione
1.34.1-gke.1341000o successive. - 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. - Per ridimensionare le risorse di memoria dei container, devi impostare la
policy di ridimensionamento dei container su
RestartContainer. - Se configuri lo swap di memoria dei nodi 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 gli SSD locali. Non puoi utilizzare lo spazio di archiviazione a blocchi non elaborati con un SSD locale.
- È necessario eseguire il provisioning dei nodi con gli 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 includa 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 selezionarne un altro. - Per istruzioni su come creare o aggiornare un cluster in modo che esegua il provisioning degli SSD locali, consulta Eseguire il provisioning e utilizzare lo spazio di archiviazione temporaneo basato su SSD locali.
Best practice
Lo swap di memoria dei nodi è inteso come una rete di sicurezza per i picchi di memoria imprevedibili, non come sostituzione di una memoria fisica sufficiente. Per indicazioni sull'ottimizzazione dei carichi di lavoro, consulta Ridimensionare correttamente i carichi di lavoro GKE su larga scala.
Quando utilizzi lo swap di memoria dei nodi, tieni presente anche le seguenti best practice:
- Isola i nodi con lo swap di memoria dei nodi abilitato
applicando un taint al node pool, ad esempio,
gke-swap=enabled:NoSchedule, e aggiungendo una tolleranza corrispondente ai carichi di lavoro destinati a utilizzare lo swap. - Dimensiona lo spazio di swap di memoria dei nodi in modo appropriato. Uno spazio di swap di memoria dei nodi insufficiente potrebbe non impedire gli errori di esaurimento della memoria e un utilizzo eccessivo può peggiorare le prestazioni.
- Monitora l'utilizzo dello swap di memoria dei nodi sui carichi di lavoro. L'utilizzo frequente dello swap di memoria dei nodi può essere un indicatore di pressione sulla memoria.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita 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
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Abilitare lo swap di memoria dei nodi
Puoi abilitare lo swap di memoria dei nodi a livello di cluster o di pool di nodi. Per abilitare lo swap di memoria dei nodi, crea o aggiorna un file system-config.yaml che contenga la configurazione di swap di memoria dei nodi che vuoi. L'esempio seguente abilita lo swap di memoria dei nodi con le impostazioni predefinite:
linuxConfig:
swapConfig:
enabled: true
Sono disponibili altre impostazioni 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 LinuxNodeConfig documentazione dell'API.
Abilitare lo swap di memoria dei nodi su un cluster
Per abilitare 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 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 di memoria dei nodi, esegui il seguente comando:
gcloud 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.
Abilitare lo swap di memoria dei nodi su un pool di nodi
Per abilitare lo swap di memoria dei nodi su 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 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 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 includa 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 il seguente comando:
gcloud 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 pool di nodi.CLUSTER_NAME: il nome del 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 il seguente comando:gcloud 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
Per impostazione predefinita, sono disponibili le seguenti metriche di sistema per osservare l'utilizzo dello swap:
kubernetes.io/node/memory/swap_used_byteskubernetes.io/container/memory/swap_used_bytes
GKE fornisce anche metriche di utilizzo dello 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 swap con i comandi kubectl completando i seguenti passaggi:
Controlla la condizione
SwapDetectedsull'oggetto nodo eseguendo il seguente 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 il seguente comando:
kubectl get node NODE_NAME -o jsonpath='{.status.nodeInfo.swap}'L'output è simile al seguente:
{"capacity":53687087104}
Disabilitare lo swap di memoria dei nodi
Per disabilitare lo swap di memoria dei nodi, aggiorna il file system-config.yaml completando i seguenti passaggi:
Aggiorna il file
system-config.yamlin modo da impostareswapConfig.enabledsufalse:linuxConfig: swapConfig: enabled: falseAggiorna il pool di nodi con la nuova configurazione:
gcloud 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 dei nodi.
- Scopri di più sulle opzioni di archiviazione di GKE.