Desde Kubernetes 1.8, parece que necesito deshabilitar el intercambio en mis nodos (o establecerlo --fail-swap-on
en false
).
No puedo encontrar la razón técnica por la que Kubernetes insiste en que el intercambio se desactive. ¿Es esto por razones de rendimiento? ¿Razones de seguridad? ¿Por qué no se documenta la razón de esto?
kubernetes
swap
Jeroen Jacobs
fuente
fuente
La razón de esto, según tengo entendido, es que el kubelet no está diseñado para manejar situaciones de intercambio y el equipo de Kubernetes no planea implementar esto, ya que el objetivo es que las cápsulas encajen en la memoria del host.
de este tema
fuente
TL; DR no utiliza correctamente el intercambio es solo un hack perezoso que demuestra una comprensión deficiente de los subsistemas de memoria y una falta de habilidades fundamentales de administración de sistemas. Diseñar servicios de infraestructura y no comprender estos sistemas está destinado a terminar en un fracaso.
Entonces, tengo algunos comentarios sobre esto, esto me parece más pereza que una característica o requisito. Es absolutamente posible manejar adecuadamente el intercambio, analizar la memoria y determinar cómo utilizar adecuadamente el subsistema de memoria sin presionar el intercambio. Hay una letanía de herramientas desarrolladas alrededor de esto y puede garantizar que un proceso no utilizará el intercambio con bastante facilidad, por lo que el punto de rendimiento es incorrecto. Es simplemente una codificación diferida para no poner esta instrumentación, y en general, la eliminación completa del intercambio será en detrimento del rendimiento del sistema. La clave aquí es usarlo correctamente. Estoy de acuerdo en que intercambiar pods por discos afectará el rendimiento, sin embargo, hay varias cosas que deberían intercambiarse en el disco.
Además, el kernel de Linux está diseñado para utilizar el intercambio, y deshabilitarlo por completo tendrá consecuencias negativas. Una mejor manera de manejar esto sería fijar los pods en la memoria principal y no permitir que se intercambien en el disco, reduzca la presión de la caché vfs para que no se intercambie a menos que sea absolutamente necesario, e incluso entonces podría causar procesos anclados a fallar MALLOC en caso de que se agote la memoria principal.
Dependiendo de los procesos en los contenedores, tener un fallo grave del contenedor o que el asesino OOM lo mate podría dar lugar a algunos resultados bastante desastrosos. Sin embargo, entiendo que los procesos que se ejecutan en estos contenedores deberían ser idealmente apátridas y efímeros, pero en 20 años de ejecución de sistemas, no he visto a todos seguir el diseño al pie de la letra el 100% del tiempo.
Además, esto no tiene en cuenta las tecnologías futuras, como la memoria no volátil, y los sistemas de memoria más nuevos, como Intel Xpoint, que se pueden utilizar para ampliar significativamente la memoria principal utilizando sistemas híbridos de disco / memoria. Con este tipo de sistemas, pueden usarlos directamente como memoria principal suplementaria o utilizar archivos de intercambio para extender la memoria principal con un impacto insignificante en el rendimiento.
fuente
Hay un boleto para habilitarlo nuevamente, obtendrá más información allí
https://github.com/kubernetes/kubernetes/issues/53533
fuente