Python 如何使用 Gunicorn 和 Kubernetes 进行扩展?

How is Python scaling with Gunicorn and Kubernetes?

我将使用 Gunicorn 和 Gevent/Eventlet 作为异步工作者在 Kubernetes 上部署 Python Flask 服务器和 Docker。该应用程序将:

  1. 在 Apache Kafka 上订阅大约 20 个不同的主题。
  2. 使用该数据对一些机器学习模型进行评分。
  3. 将结果上传到关系数据库。

Kafka 中的每个主题每分钟将收到 1 条消息,因此应用程序每分钟需要从 Kafka 接收大约 20 条消息。对于每条消息,处理和执行大约需要 45 秒。问题是我如何才能很好地扩展它?我知道我可以在 Gunicorn 中添加多个 worker,并在我部署到 Kubernetes 时使用 pod 的多个副本。但这就够了吗?工作量会在不同 pods 的可用工作人员之间自动平衡吗?或者我可以做些什么来确保可扩展性?

我建议您为您的员工设置一个 HPA Horizo​​ntal Pod Autoscaler。

需要设置对 metrics API. For custom metrics on the later versions of Kubernetes heapster has been deprecated in favor of the metrics server

的支持

如果您使用的是 public 云,如 AWS、GCP 或 Azure,我还建议您设置一个自动缩放组,以便您可以根据 CPU 平均利用率。

希望对您有所帮助!