Por que desativar a troca no kubernetes

35

Desde o Kubernetes 1.8, parece que eu preciso desativar a troca nos meus nós (ou definido --fail-swap-oncomo false).

Não consigo encontrar o motivo técnico pelo qual o Kubernetes insiste na desativação da troca. Isso é por razões de desempenho? Razões de segurança? Por que o motivo disso não está documentado?

Jeroen Jacobs
fonte

Respostas:

28

A idéia do kubernetes é compactar as instâncias o mais próximo possível de 100% possível. Todas as implantações devem ser fixadas com limites de CPU / memória. Portanto, se o agendador envia um pod para uma máquina, ele nunca deve usar swap. Você não quer trocar, pois isso desacelera as coisas.

É principalmente para desempenho.

Mike
fonte
2
ya idéia é que se um nó tiver apenas 3gig livre para usar .. e seu novo pod quiser 4 .. ele irá para outro nó.
Mike
Isso não faz muito sentido para mim, com certeza você poderia empacotar um pouco mais os nós, deixando o sistema operacional trocar algumas páginas de memória usadas com pouca frequência, sem prejudicar o desempenho de maneira perceptível?
Frederik Baetens 30/07
13

A razão para isso, como eu o entendo, é que o kubelet não foi projetado para lidar com situações de troca e a equipe do Kubernetes não está planejando implementar isso, pois o objetivo é que os pods se ajustem à memória do host.

a partir desta questão

O suporte à troca não é trivial. Os pods garantidos nunca devem exigir troca. Pods explosivos devem ter seus pedidos atendidos sem a necessidade de troca. Os pods BestEffort não têm garantia. No momento, o kubelet não possui a inteligência necessária para fornecer a quantidade certa de comportamento previsível entre os pods.

Rory McCune
fonte
10

TL; DR não usar corretamente a troca é apenas um hack preguiçoso que demonstra um entendimento ruim dos subsistemas de memória e uma falta de habilidades fundamentais de administração de sistemas. Projetar serviços de infraestrutura e não entender esses sistemas provavelmente acabará em falha.

Então, eu tenho alguns comentários sobre isso, isso parece mais preguiça para mim do que um recurso ou requisito. É absolutamente possível manipular adequadamente a troca, analisar a memória e determinar como utilizar adequadamente o subsistema de memória sem pressionar a troca. Há uma série de ferramentas criadas em torno disso e você pode garantir que um processo não utilizará a troca facilmente, portanto o ponto de desempenho está incorreto. É simplesmente uma codificação preguiçosa para não colocar essa instrumentação e, em geral, a remoção completa da troca será em detrimento do desempenho do sistema. A chave aqui é usá-lo corretamente. Concordo que a troca de pods por discos afetará o desempenho, no entanto, há várias coisas que devem ser trocadas para o disco.

Além disso, o kernel do linux foi projetado para utilizar swap, e desativá-lo completamente terá consequências negativas. Uma maneira melhor de lidar com isso seria fixar os pods na memória principal e não permitir que eles sejam trocados para o disco, reduzir a pressão do cache dos vfs para que eles não sejam trocados, a menos que seja absolutamente necessário, e mesmo assim você poderá causar processos fixos. falha no MALLOC no caso de a memória principal se esgotar.

Dependendo dos processos nos contêineres com uma falha grave do contêiner ou matá-lo pelo OOM killer, isso pode resultar em resultados bastante desastrosos. Entendo, no entanto, que os processos executados nesses contêineres devem idealmente ser apátridas e efêmeros, mas em 20 anos de sistemas em execução, nunca vi todos seguirem o projeto pretendido 100% do tempo.

Além disso, isso não leva em conta tecnologias futuras, como memória não volátil, e sistemas de memória mais recentes, como o intel xpoint, que podem ser usados ​​para estender significativamente a memória principal usando sistemas híbridos de disco / memória. Com esse tipo de sistema, eles podem usá-los diretamente como memória principal suplementar ou utilizar arquivos de troca para estender a memória principal com impacto insignificante no desempenho.

Michael Rutledge
fonte
2
Duvido muito que os mantenedores do projeto kubernetes sejam preguiçosos. Nenhum dos argumentos propostos parece estar dentro do contexto de um ecossistema em contêiner executando em kubernetes.
spuder 19/01