Развертывание Dockerized Celery без применения силы УБИТЬ рабочих (ECS | мультиконтейнер Beanstalk) - PullRequest
0 голосов
/ 03 января 2019

У меня есть файл Dockerrun.aws.json, который развертывает контейнер сельдерея на экземплярах EC2 с использованием мультиконтейнера Beanstalk.

В каждом развертывании по умолчанию Beanstalk или агент ECS убивает существующий контейнер сельдерея во всех экземплярах, а затем создает новый контейнер сельдерея. Это убивает задачи сельдерея незрелыми, что создает проблемы, так как задачи не могут достичь завершения.

В контейнере для сельдерея есть supervisord, который фактически контролирует процесс сельдерея и выдает его всякий раз, когда он выходит из строя.

Может ли кто-нибудь подсказать, как мы можем изящно убивать контейнеры / процессы сельдерея, позволяя им выполнять задачи, которые они уже потребляли из SQS?

1 Ответ

0 голосов
/ 07 января 2019

Одним из решений является создание задачи, которую вы можете использовать, чтобы перевести работников в свободное состояние перед развертыванием.

По сути, создайте задачу в основном:

  • отправляет вам уведомление, подтверждающее готовность быть убитым
  • должным образом удаляет сообщение SQS, чтобы гарантировать, что оно не будет повторно выполнено в будущем.
  • входит в бесконечный цикл, чтобы предотвратить выполнение других задач для данной задачи. Больше, чем бесконечный цикл, я бы предложил перейти в спящий режим на 30 минут или все, что вы хотите использовать в качестве окна для развертывания (на случай, если развертывание завершится неудачно и вы захотите восстановить)

Тогда ваше развертывание будет:

  • Пост SQS, чтобы усыпить работников
  • Развернуть в обычном режиме. Когда новый работник оживает, он автоматически начинает обрабатывать новые задачи.
...