【发布时间】:2023-03-31 17:00:02
【问题描述】:
我们有一个通过 gunicorn 提供服务的 Flask 应用程序,使用 eventlet worker。我们将应用程序部署在 kubernetes pod 中,其想法是根据工作负载扩展 pod 的数量。
gunicorn 中工人数量的推荐设置为2 - 4 x $NUM_CPUS。见docs。我之前在专用物理硬件上部署了服务,这样的计算是有意义的。在 4 核机器上,有 16 个工人听起来不错,但我们最终将其增加到 32 个工人。
这个计算是否仍然适用于使用异步工作器的 kubernetes pod,尤其是:
- 单个节点上可能有多个 pod。
- 同一服务将在多个 pod 中运行。
我应该如何设置 gunicorn 工人的数量?
- 将其设置为
-w 1并让 kubernetes 通过 pod 处理扩展? - 在 kubernetes 节点上将其设置为
2-4 x $NUM_CPU。一个吊舱还是多个吊舱? - 完全不同的东西?
更新
我们决定采用第一个选项,这是我们目前的方法。将 gunicorn 作品的数量设置为 1,并通过增加 pod 的数量进行水平缩放。否则将会有太多的移动部件,而且我们将无法充分利用 Kubernetes。
【问题讨论】:
-
您还可以使用调度器拓扑功能设置每个节点的工作 Pod 数量以避免资源过度使用:kubernetes.io/docs/concepts/workloads/pods/…
标签: flask kubernetes gunicorn scaling eventlet