Обработка принудительного уничтожения стручков сельдерея в K8s перед завершением запущенных задач
Я разворачиваю приложение Django с Celery workers на AWS EKS. У меня все работает как ожидалось, за исключением того, что K8s продолжает останавливать реплики Celery workers перед завершением текущих задач, такое же поведение наблюдается при новом развертывании или переносе нового кода в мастер-ветку.
Что я пробовал:
- Установка очень большого льготного периода, это решение не сработало, так как у нас есть задачи, которые выполняются часами.
- Установка хука перед остановкой, это решение также не сработало, так как K8s не ждет завершения хука, если он превышает льготный период.
- Я также пробовал фиксированное количество реплик, но это явно не решение.
Дополнительная информация: У меня есть celery, настроенный с Redis в качестве брокера обмена сообщениями и бэкенда результатов. После некоторых исследований я начал рассматривать возможность использования Keda, но после прочтения документации кажется, что он позволит мне только масштабировать Celery pods на основе длины очередей, но не дает механизма kill, который я ищу.
Есть ли какой-нибудь обходной путь для решения этой проблемы?
В итоге я установил очень большой льготный период; 5 часов