Tenemos una aplicación Flask que se sirve a través de gunicorn, usando el trabajador eventlet. Estamos implementando la aplicación en un pod de kubernetes, con la idea de escalar la cantidad de pods según la carga de trabajo.
La configuración recomendada para la cantidad de trabajadores en gunicorn es 2 - 4 x $NUM_CPUS . Ver documentos . Anteriormente implementé servicios en hardware físico dedicado donde tales cálculos tenían sentido. En una máquina de 4 núcleos, tener 16 trabajadores suena bien y finalmente lo subimos a 32 trabajadores.
¿Se sigue aplicando este cálculo en un pod de kubernetes que utiliza un trabajador asíncrono, en particular como:
¿Cómo debo configurar el número de trabajadores de gunicornio?
-w 1 y dejar que kubernetes maneje la escala a través de pods?2-4 x $NUM_CPU en los nodos de kubernetes. ¿En una cápsula o en varias?Decidimos optar por la primera opción, que es nuestro enfoque actual. Establezca la cantidad de trabajos de gunicornio en 1 y escale horizontalmente aumentando la cantidad de vainas. De lo contrario, habrá demasiadas partes móviles y no aprovecharemos Kubernetes en todo su potencial.
Para una mejor visibilidad de la solución final elegida por el autor original de esta pregunta a partir del año 2019
Establezca la cantidad de trabajos de gunicorn en 1 (-w 1) y escale horizontalmente aumentando la cantidad de pods (usando Kubernetes HPA).
y el hecho de que podría no ser aplicable en un futuro cercano, teniendo en cuenta el rápido crecimiento de las funciones relacionadas con la carga de trabajo en la plataforma Kubernetes, por ejemplo, algunas distribuciones de Kubernetes proponen además de HPA, Vertical Pod Autoscaling (VPA) y Multidimensional Pod autoscaling (MPA) también, así que propongo continuar este hilo en forma de publicación wiki comunitaria.