这是否必须在Kubernetes pod中拥有多个进程/线程?

时间:2017-08-15 11:20:07

标签: django kubernetes uwsgi

我在Kubernetes集群中托管的容器中使用uwsgi。 UWSGI支持传统的master / slave architecture为应用程序提供更好的可用性,但我的问题是,我是否应该使用此功能?

换句话说,当我需要更多进程来处理和计算请求时,我是否应该增加群集中的pod数量,还是应该使用UWSGI的主/从模式来响应请求?

3 个答案:

答案 0 :(得分:5)

在Kubernetes中管理此方法的推荐方法是根据工作负载要求增加POD的数量。

答案 1 :(得分:5)

如果应用程序在为每个HTTP请求提供服务时阻塞(例如Django),请注意有足够的线程/进程/ pod来维护可用性。如果您使用的是水平pod自动调节器,那么将会有一些pod启动时间,并且我发现在高流量应用程序中我使用uwsgi和每个pod中的应用程序(相同的容器)以及单独的nginx pod可以获得更好的可用性当所有uwsgi工作人员都忙时,进行反向代理并请求汇集。

YMMV但是在一天结束时,可用性比坚持每个pod经验法则的单个进程更重要。只需了解缺点,例如同一容器内进程之间的隔离度较低。日志基于每个容器可用,因此使用内置的kubectl日志功能不会在同一容器中的任何内容之间进行隔离。

答案 2 :(得分:2)

我们使用一种部署模型,其中基于django的应用程序由gunicorn提供,具有几个工作进程。我们进一步尝试将此pod扩展到2-3个副本,并且已经看到了性能改进。

完全取决于适合您应用的内容。

扩展容器的优点是您可以动态配置它,因此不会浪费资源。