Python 如何通过 Gunicorn 和 Kubernetes 进行扩展?

dan*_*elo 6 python flask gunicorn docker kubernetes

我将使用 Gunicorn 和 Gevent/Eventlet 作为异步工作线程,在 Kubernetes 上部署一个带有 Docker 的 Python Flask 服务器。该应用程序将:

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

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

Ric*_*ico 4

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

需要设置对指标 API 的支持。对于 Kubernetes 更高版本上的自定义指标,heapster已被弃用,取而代之的是指标服务器

如果您使用 AWS、GCP 或 Azure 等公共云,我还建议您设置一个自动缩放组,以便您可以根据 CPU 利用率平均值等指标缩放虚拟机或服务器。

希望能帮助到你!