在一个 Kubernetes pod 中有多个进程/线程是必要的吗?

Is this necessary to have multiple processes / threads in a Kubernetes pod?

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

换句话说,当我需要更多的进程来处理和计算请求时,我应该增加集群中的pods个数还是仍然使用UWSGI的master/slave模式来响应请求?

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

如果您的应用程序在处理每个 HTTP 请求时发生阻塞(例如 Django),请注意有足够的 threads/processes/pods 来维持可用性。如果您使用水平 pod 自动缩放器,将会有一些 pod 启动时间,我发现在高流量应用程序中,uwsgi 和每个 pod(同一容器)中的应用程序以及一个单独的 nginx pod 具有更好的可用性当所有 uwsgi worker 都忙时进行反向代理和请求池。

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

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

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

缩放的优点pods是您可以动态配置它,因此不会浪费资源。