Por que desativar a troca em kubernetes

10

Desde o Kubernetes 1.8, parece que preciso desabilitar o swap nos meus nós (ou configurar --fail-swap-on para false ).

Não consigo encontrar o motivo técnico pelo qual o Kubernetes insiste que o swap esteja desativado. Isso é por motivos de desempenho? Razões de segurança? Por que o motivo disso não está documentado?

    
por Jeroen Jacobs 02.11.2017 / 14:22

4 respostas

8

A idéia do kubernetes é empacotar as instâncias até 100% do máximo possível. Todas as implantações devem ser fixadas com limites de CPU / memória. Portanto, se o agendador enviar um pod a uma máquina, ele nunca deverá usar swap. Você não quer trocar, porque isso vai atrasar as coisas.

É principalmente para o desempenho.

    
por 02.11.2017 / 14:28
6

A razão para isso, pelo que entendi, é que o kubelet não é projetado para lidar com situações de troca e a equipe do Kubernetes não está planejando implementar isso, já que o objetivo é que os pods se encaixem na memória do host. .

de esta edição

Support for swap is non-trivial. Guaranteed pods should never require swap. Burstable pods should have their requests met without requiring swap. BestEffort pods have no guarantee. The kubelet right now lacks the smarts to provide the right amount of predictable behavior here across pods.

    
por 02.12.2017 / 13:33
0

e se você estiver apenas instalando kubernetes localmente em sua máquina desktop para poder brincar com ele? Eu acho que neste cenário você ignora as regras de preflight e continua mesmo assim, ignorando o aviso?

    
por 22.01.2018 / 14:42
0

TL; o DR não está usando corretamente o swap é apenas um hack preguiçoso que demonstra uma compreensão pobre 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 está fadado ao fracasso.

Então, eu tenho alguns comentários sobre isso, isso parece mais com preguiça para mim do que com um recurso ou exigência. É absolutamente possível manipular corretamente o swap, analisar a memória e determinar como utilizar adequadamente o subsistema de memória sem pressionar o swap. Há uma ladainha de ferramentas construídas em torno disso e você pode garantir que um processo não utilizará o swap com bastante facilidade para que o ponto de desempenho esteja incorreto. É simplesmente uma codificação preguiçosa para não colocar essa instrumentação, e em geral a remoção completa do swap 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á uma série de coisas que devem ser trocadas para o disco.

Além disso, o kernel do linux é projetado para utilizar swap, e desabilitá-lo completamente causará conseqüências negativas. Uma maneira melhor de lidar com isso seria fixar os pods na memória principal e não permitir que eles alternem para o disco, reduzir a pressão do cache do vfs para que ele não seja alternado, a menos que seja absolutamente necessário e, mesmo assim, falhar MALLOC no evento que a memória principal está esgotada.

Dependendo dos processos nos contêineres que tenham uma falha severa do contêiner ou que ele tenha sido morto por um assassino da OOM, pode resultar em alguns resultados bastante desastrosos. Eu entendo, no entanto, que os processos executados nesses contêineres devem, idealmente, ser apátridas e efêmeros, mas em 20 anos de execução de sistemas, eu nunca vi todos seguirem o design pretendido ao longo de 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 intel xpoint, que podem ser usados para estender a memória principal de forma significativa usando sistemas de disco / memória híbridos. Com esses tipos de sistemas, eles podem usá-los diretamente como memória principal suplementar ou utilizar arquivos de troca para ampliar a memória principal com impacto insignificante no desempenho.

    
por 21.09.2018 / 07:52