我目前正在使用AWS EBS,但正在切换到Kubernetes来管理我们的芹菜工人池。根据Celery文档,当您想要停止芹菜工人时,可以向工人发送两种类型的信号。一个是TERM,另一个是KILL。使用TERM时,它会等待工作程序完成当前正在执行的操作,然后再停止。当KILL用于立即停止它时,这会导致任务丢失。我的问题是,当Kubernetes在缩减工人池时自动缩放时,我如何确保TERM发送给工人而不是KILL?我在AWS EBS中遇到了这种缩减问题,Celery flower在缩减时显示出任务丢失。
这里的事件链是:
- HorizontalPodAutoscaler降低其控制的部署上的
replicas:
- Deployment会减少其相应ReplicaSet上的
replicas:
- ReplicaSet会根据需要删除Pod
- Kubernetes发送每个容器SIGTERM并等待它关闭
- 如果容器还没有退出,它会向每个容器发送SIGKILL
吊舱的终止中特别描述了停机顺序。您的进程将得到SIGTERM,如果它还没有退出,30秒后会得到SIGKILL。HPA删除pod与任何其他路径相比都没有什么特别之处。