¿Por qué deshabilitar el intercambio en kubernetes?


35

Desde Kubernetes 1.8, parece que necesito deshabilitar el intercambio en mis nodos (o establecerlo --fail-swap-onen 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?

Respuestas:


28

La idea de kubernetes es empacar instancias ajustadas al 100% lo más posible. Todas las implementaciones deben fijarse con límites de CPU / memoria. Entonces, si el programador envía un pod a una máquina, nunca debería usar swap en absoluto. No desea intercambiar, ya que ralentizará las cosas.

Es principalmente para el rendimiento.


2
la idea es que si un nodo solo tiene 3gig de uso gratuito ... y su nuevo pod quiere 4 ... va a ir a otro nodo.
Mike

Esto no tiene mucho sentido para mí, ¿seguramente podría empacar sus nodos un poco más si deja que el sistema operativo intercambie algunas páginas de memoria de uso poco frecuente sin dañar el rendimiento de una manera notable?
Frederik Baetens

13

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

El soporte para el intercambio no es trivial. Las vainas garantizadas nunca deberían requerir un intercambio. Las vainas de Burstable deben cumplir con sus solicitudes sin necesidad de intercambio. Las cápsulas BestEffort no tienen garantía. El kubelet en este momento carece de la inteligencia para proporcionar la cantidad correcta de comportamiento predecible aquí en todos los pods.


10

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.


2
Dudo mucho que los encargados del proyecto kubernetes sean flojos. Ninguno de los argumentos propuestos parece estar dentro del contexto de un ecosistema en contenedores que se ejecuta en kubernetes.
Spuder

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.