我们有一个 Flask 应用程序,通过 Gunicorn 使用 eventlet 工作线程提供服务。我们正在将应用程序部署在 kubernetes pod 中,其想法是根据工作负载扩展 pod 数量。
gunicorn 中工作线程数量的建议设置为 2 - 4 x $NUM_CPUS
。请参阅docs 。我之前曾在专用物理硬件上部署过服务,这样的计算才有意义。在 4 核机器上,拥有 16 个工作线程听起来不错,我们最终将其增加到 32 个工作线程。
此计算是否仍然适用于使用异步工作线程的 kubernetes pod,特别是:
- 单个节点上可以有多个 Pod。
- 同一个服务将在多个 Pod 中运行。
我应该如何设置gunicorn worker 的数量?
- 将其设置为
-w 1
并让 kubernetes 通过 pod 处理扩展? - 在 kubernetes 节点上将其设置为
2-4 x $NUM_CPU
。在一个或多个 Pod 上? - 完全是别的东西?
更新
我们决定采用第一个选项,这是我们当前的方法。将gunicorn作品的数量设置为1,并通过增加pod数量来横向扩展。否则将会有太多的移动部件,而且我们将无法充分利用 Kubernetes 的潜力。
最佳答案
为了更好地了解该问题的原作者截至 2019 年选择的最终解决方案
Set the number of gunicorn works to 1 (-w 1), and scale horizontally by increasing the number of pods (using Kubernetes HPA).
考虑到 Kubernetes 平台中工作负载相关功能的快速增长,例如,它可能在不久的将来不适用。 Kubernetes 的一些发行版除了 HPA 之外还提出了垂直 Pod 自动扩展(VPA)和多维 Pod 自动扩展(MPA),所以我建议以社区 wiki 帖子的形式继续这个话题。
关于Kubernetes 和 Gunicorn 上的 Flask 应用程序扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56748782/