没有强制KILL工作人员的Dockerized Celery部署(ECS | Beanstalk多容器)

问题描述 投票:0回答:1

我有一个Dockerrun.aws.json文件,它使用Beanstalk多容器在EC2实例上部署芹菜容器。

在每次部署时,默认情况下,Beanstalk或ECS代理程序会杀死所有实例上的现有芹菜容器,然后创建一个新的芹菜容器。这会导致芹菜任务不成熟,因为任务无法完成,所以会产生问题。

芹菜容器有supervisord,它实际上监控芹菜过程并在它下降时将其提起。

有人可以建议我们如何通过允许他们完成他们已经从SQS消耗的任务来优雅地杀死芹菜容器/过程?

amazon-web-services docker django-celery amazon-ecs amazon-elastic-beanstalk
1个回答
0
投票

一种解决方案是创建一个任务,您可以使用该任务在部署之前将工作程序置于空闲状态。

基本上,基本上创建一个任务:

  • 向您发送确认已准备好被杀的通知
  • 正确删除SQS消息以确保将来不会重新执行。
  • 进入无限循环以防止其他任务在给定任务上执行。不仅仅是一个无限循环,我建议你睡30分钟或任何你想用作部署窗口的东西(以防部署失败并且你希望能够恢复)

您的部署将是:

  • 发布SQS让工人入睡
  • 正常部署。当新员工活着时,它将自动开始处理新任务。
© www.soinside.com 2019 - 2024. All rights reserved.