Python Celery 自动缩放 Kubernetes

Python Celery Autoscaling Kubernetes

我目前正在使用 AWS EBS,但切换到 Kubernetes 来管理我们的 celery 工作池。根据 Celery 文档,当你想停止 celery worker 时,有 two types of signals that can be sent to the worker。一个是 TERM,另一个是 KILL。当使用 TERM 时,它会等待 worker 在停止之前完成当前正在执行的操作。当使用KILL立即停止时,会导致任务丢失。我的问题是在缩减工作池时 Kubernetes 自动缩放,我如何确保将 TERM 发送给工作人员而不是 KILL?我在使用 AWS EBS 时也遇到了这个缩小问题,其中 Celery flower 在缩小时显示任务丢失。

这里的事件链是:

  1. Horizo​​ntalPodAutoscaler 减少了它控制的 Deployment 上的replicas:
  2. Deployment 减少了其相应 ReplicaSet 上的 replicas:
  3. ReplicaSet 根据需要删除 Pods。
  4. Kubernetes 发送每个容器 SIGTERM 并等待它关闭。
  5. 如果容器尚未退出,它会向每个容器发送 SIGKILL。

Termination of Pods 中特别描述了关机顺序。您的进程将收到 SIGTERM,然后在 30 秒后收到 SIGKILL(如果尚未退出)。与任何其他路径相比,HPA 删除 pod 没有什么特别之处。