Desde o Kubernetes 1.8, parece que eu preciso desativar a troca nos meus nós (ou definido --fail-swap-on
como 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?
kubernetes
swap
Jeroen Jacobs
fonte
fonte
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
fonte
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.
fonte
Há ingresso para habilitá-lo novamente, você terá mais informações lá
https://github.com/kubernetes/kubernetes/issues/53533
fonte