A troca de memória de nós do Google Kubernetes Engine (GKE) permite que os nós do GKE usem espaço em disco como memória virtual quando a memória física se esgota. A troca de memória do nó pode ajudar a melhorar a capacidade de recuperação de aplicativos e evitar erros de falta de memória (OOM) em determinadas cargas de trabalho.
Quando usar a troca de memória do nó
Use a troca de memória do nó para fornecer um buffer contra erros de falta de memória para aplicativos que exigem muita memória, especialmente durante picos inesperados de uso. A troca de memória do nó pode ajudar a melhorar a capacidade de recuperação da carga de trabalho, como nos seguintes cenários:
- Executar cargas de trabalho com padrões de memória imprevisíveis.
- Reduzir o risco de falhas de aplicativos devido ao esgotamento da memória do nó.
- Otimize os custos evitando o provisionamento excessivo de memória para picos ocasionais.
Como funciona a troca de memória de nós
Quando você ativa a troca de memória do nó, o GKE configura o sistema operacional do nó para usar espaço em disco como memória virtual. Esse processo fornece um buffer para aplicativos que sofrem pressão temporária na memória.
O GKE calcula os limites de troca de contêineres com base nos limites de recursos de memória do contêiner e na memória total do nó.
É possível configurar a troca em diferentes tipos de armazenamento para equilibrar desempenho e custo:
- Disco de inicialização: usa o disco de inicialização do nó para espaço de troca.
- SSD local temporário: usa um SSD local que também é compartilhado com o armazenamento temporário do pod.
- SSD local dedicado: reserva um ou mais SSDs locais exclusivamente para troca.
Para proteger dados sensíveis, o GKE criptografa o espaço de troca por padrão usando uma chave temporária.
Requisitos e limitações
A troca de memória do nó tem os seguintes requisitos e limitações:
- Os clusters do GKE precisam ser da versão
1.34.1-gke.1341000ou posterior. - Somente pods com a classe de qualidade de serviço (QoS)
Burstablepodem usar a troca de memória do nó. Para mais informações sobre as classes de QoS, consulte a documentação do Kubernetes sobre Qualidade de pod de classes de serviço. - Se você ativar a troca de memória do nó, a política de redimensionamento de contêiner precisará ser definida como
RestartContainer. - Se você configurar a troca de memória do nó para usar um disco de inicialização, o tamanho da troca não poderá exceder 50% da capacidade total do disco de inicialização.
Se você configurar a troca de memória do nó para usar um SSD local, verifique se os seguintes requisitos são atendidos:
- O tipo de máquina precisa ser compatível com SSDs locais. Não é possível usar armazenamento em blocos brutos com um SSD local.
- Os nós precisam ser provisionados com SSDs locais. O método de provisionamento depende da série de máquinas:
- Para séries de máquinas de primeira ou segunda geração, defina a flag
--ephemeral-storage-local-ssd=count. - Para séries de máquinas de terceira ou quarta geração, escolha um tipo de máquina que agrupe SSDs locais.
- Para séries de máquinas de primeira ou segunda geração, defina a flag
- O tipo de máquina
e2-mediumpadrão não oferece suporte a SSDs locais. Portanto, você precisa selecionar outro tipo. - Para instruções sobre como criar ou atualizar um cluster para provisionar SSDs locais, consulte Provisionar e usar armazenamento temporário com suporte de SSD local.
Práticas recomendadas
A troca de memória do nó é uma rede de segurança para picos de memória imprevisíveis, não um substituto para memória física suficiente. Para orientações sobre como otimizar cargas de trabalho, consulte Dimensionar as cargas de trabalho do GKE em escala.
Considere também as seguintes práticas recomendadas ao usar a troca de memória do nó:
- Isole os nós com troca de memória ativada aplicando uma taint ao pool de nós, por exemplo,
gke-swap=enabled:NoSchedule, e adicione uma tolerância correspondente às cargas de trabalho destinadas a usar a troca. - Dimensionar o espaço de troca de memória do nó adequadamente. A memória insuficiente do nó e o espaço de troca podem não evitar erros de falta de memória, e o uso excessivo pode degradar o desempenho.
- Monitore o uso da troca de memória do nó nas suas cargas de trabalho. O uso frequente da troca de memória do nó pode ser um indicador de pressão na memória.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a CLI do Google Cloud para essa tarefa,
instale e inicialize a
gcloud CLI. Se você instalou a gcloud CLI anteriormente, instale a versão
mais recente executando o comando
gcloud components update. Talvez as versões anteriores da gcloud CLI não sejam compatíveis com a execução dos comandos neste documento.
Ativar a troca de memória do nó
É possível ativar a troca de memória de nós em um cluster ou pool de nós. Para ativar
a troca de memória do nó, crie ou atualize um arquivo system-config.yaml que contenha
a configuração de troca de memória do nó desejada. O exemplo a seguir
ativa a troca de memória do nó com as configurações padrão:
linuxConfig:
swapConfig:
enabled: true
Há outras configurações que podem ser definidas. Este exemplo configura a troca não criptografada para usar 30% do armazenamento de um SSD local temporário:
linuxConfig:
swapConfig:
enabled: true
encryptionConfig:
disabled: true
ephemeralLocalSsdProfile:
swapSizePercent: 30
Para ver uma lista de campos opcionais que podem ser configurados, consulte a documentação da API LinuxNodeConfig.
Ativar a troca de memória de nós em um cluster
Para ativar a troca de memória de nós em um cluster, siga uma destas etapas:
Para criar um cluster com a troca de memória do nó ativada, execute o seguinte comando:
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --cluster-version=1.34.1-gke.1341000 \ --system-config-from-file=system-config.yamlSubstitua:
CLUSTER_NAME: o nome do novo cluster;LOCATION: a região ou zona do cluster.
Para atualizar um cluster e ativar a troca de memória do nó, execute o seguinte comando:
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yamlSubstitua:
CLUSTER_NAME: o nome do novo cluster;LOCATION: a região ou zona do cluster.
Ativar a troca de memória do nó em um pool de nós
Para ativar a troca de memória de nós em um pool de nós, siga uma destas etapas:
Para criar um novo pool de nós com a troca de memória do nó ativada, execute o seguinte 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_TYPESubstitua:
NODEPOOL_NAME: o nome do novo pool de nós.CLUSTER_NAME: o nome do cluster.LOCATION: a região ou zona do cluster.MACHINE_TYPE: um tipo de máquina compatível. Para SSDs locais, escolha um tipo de máquina que agrupe SSDs locais, por exemplo,n1-standard-1.
Para atualizar um pool de nós atual e ativar a troca de memória do nó, execute o seguinte comando:
gcloud beta container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yamlSubstitua:
NODEPOOL_NAME: o nome do pool de nós.CLUSTER_NAME: o nome do cluster.LOCATION: a região ou zona do cluster.
Verificar a configuração
Para verificar se a troca de memória do nó está ativada, siga estas etapas:
Verifique se o
system-config.yamlfoi aplicado com as configurações deswapConfigexecutando o seguinte comando:gcloud beta container node-pools describe NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format='yaml(config.linuxNodeConfig.swapConfig)'Verifique se a configuração do kubelet existe no nó executando o seguinte comando:
kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/configz" | jq .kubeletconfig.memorySwap
Monitorar o uso da troca de memória
É possível monitorar a memória do nó com o Cloud Monitoring ou o kubectl.
Monitoramento
As seguintes métricas do sistema estão disponíveis por padrão para observar o uso de troca:
kubernetes.io/node/memory/swap_used_byteskubernetes.io/container/memory/swap_used_bytes
O GKE também fornece métricas de uso de troca no nível do contêiner pelo cAdvisor. Para usar essas métricas, ative o cAdvisor no cluster:
prometheus.googleapis.com/container_memory_swap/gauge
kubectl
Monitore o uso da troca com comandos kubectl seguindo estas etapas:
Verifique a condição
SwapDetectedno objeto do nó executando o seguinte comando:kubectl get node NODE_NAME -o jsonpath='{.status.conditions[?(@.type=="Swap")]}' | jq .O resultado será o seguinte:
{ "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" }Verifique a capacidade de troca executando o seguinte comando:
kubectl get node NODE_NAME -o jsonpath='{.status.nodeInfo.swap}'O resultado será o seguinte:
{"capacity":53687087104}
Desativar a troca de memória do nó
Para desativar a troca de memória do nó, atualize o arquivo system-config.yaml seguindo estas etapas:
Atualize o arquivo
system-config.yamlpara definirswapConfig.enabledcomofalse:linuxConfig: swapConfig: enabled: falseAtualize o pool de nós com a nova configuração:
gcloud beta container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --system-config-from-file=system-config.yaml
A seguir
- Saiba mais sobre como personalizar a configuração do sistema de nós.
- Saiba mais sobre as opções de armazenamento do GKE.