Обработка принудительного уничтожения стручков сельдерея в K8s перед завершением запущенных задач

Я разворачиваю приложение Django с Celery workers на AWS EKS. У меня все работает как ожидалось, за исключением того, что K8s продолжает останавливать реплики Celery workers перед завершением текущих задач, такое же поведение наблюдается при новом развертывании или переносе нового кода в мастер-ветку.

Что я пробовал:

  • Установка очень большого льготного периода, это решение не сработало, так как у нас есть задачи, которые выполняются часами.
  • Установка хука перед остановкой, это решение также не сработало, так как K8s не ждет завершения хука, если он превышает льготный период.
  • Я также пробовал фиксированное количество реплик, но это явно не решение.

Дополнительная информация: У меня есть celery, настроенный с Redis в качестве брокера обмена сообщениями и бэкенда результатов. После некоторых исследований я начал рассматривать возможность использования Keda, но после прочтения документации кажется, что он позволит мне только масштабировать Celery pods на основе длины очередей, но не дает механизма kill, который я ищу.

Есть ли какой-нибудь обходной путь для решения этой проблемы?

В итоге я установил очень большой льготный период; 5 часов

Вернуться на верх