Por que desativam o swap nos nós do Kubernetes?
sobes.tech IA
Resposta da IA
No Kubernetes, desativar o swap nos nós de trabalho e mestres é recomendado, e em alguns casos, uma exigência obrigatória.
Razões principais:
-
Comportamento imprevisível devido à falta de memória: Quando um nó com swap ativado fica sem memória física, o sistema operativo começa a usar ativamente o arquivo/partição de swap. Isso leva a uma desaceleração significativa dos processos, incluindo componentes do sistema Kubernetes (kubelet, kube-proxy) e os próprios contêineres. kubelet pode avaliar incorretamente a disponibilidade de recursos para os pods, o que pode levar à sua "morte" (OOMKilled) por sinais falsos de falta de memória ou, ao contrário, a processos ficarem presos em vez de serem reiniciados.
-
Complexidade na gestão de recursos: Kubernetes gerencia eficientemente os recursos (CPU, memória) ao nível de pods e contêineres usando cgroups. O uso de swap adiciona uma camada adicional de abstração e complica a gestão de cgroups e do kubelet na monitorização e limitação do consumo de memória pelos pods. kubelet tem mais dificuldade em determinar o consumo real de memória se parte dos dados for descarregada para o swap.
-
Redução do desempenho: O swap está localizado no disco (HDD/SSD), cujo acesso é muito mais lento do que a memória RAM. O uso ativo do swap reduz várias vezes o desempenho das aplicações e componentes do cluster. Isso pode causar timeouts, erros e instabilidade no cluster.
-
Necessidade de comportamento determinista: Para a estabilidade do cluster e o comportamento previsível das aplicações, é importante que o sistema reaja de forma determinista à falta de memória. Desativar o swap garante que, ao esgotar a memória RAM, os mecanismos OOMKiller sejam ativados, terminando os processos menos prioritários (pods), libertando recursos para os processos mais críticos. Com o swap ativado, o comportamento torna-se menos previsível.
-
Recomendações da comunidade e da documentação: A documentação oficial do Kubernetes e as melhores práticas da comunidade recomendam fortemente desativar o swap nos nós onde se planeia executar cargas de trabalho do Kubernetes. Isto é considerado uma prática padrão para manter a estabilidade e o desempenho do cluster.
# Exemplo de comando para desativar o swap
sudo swapoff -a
# Exemplo de remoção da entrada de swap em /etc/fstab para que a desativação persista após reinicializações
# Procure a linha que contém 'swap' ou o caminho para o seu dispositivo/arquivo de swap
# Comente ou remova essa linha
sudo vi /etc/fstab