#kubernetes #celery #kubernetes-helm
#kubernetes #сельдерей #kubernetes-helm
Вопрос:
У меня есть несколько рабочих элементов celery, запущенных в minikube, и они работают над задачами, переданными с использованием RabbitMQ. Недавно я обновил часть кода для рабочих модулей celery и изменил изображение. Когда я это делаю helm upgrade release_name chart_path
, все существующие рабочие модули завершаются и все незавершенные задачи прекращаются. Мне было интересно, есть ли способ обновить helm chart без завершения работы старых модулей?
- Я знаю, что
helm install -n new_release_name chart_path
это даст мне новый набор рабочих модулей celery; однако из-за некоторых ограничений мне не разрешено развертывать модули в новой версии. - Я попытался запустить
helm upgrade release_name chart_path --set deployment.name=worker2
, потому что думал, что наличие нового имени развертывания остановит helm от удаления старых модулей, но это тоже не сработает.
Комментарии:
1. Какая у вас настроена стратегия развертывания? это RollingUpdate или воссоздание?
2.Я попытался настроить файл yaml для развертывания celery и добавил следующие строки:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2
maxUnavailable: 0
Но при запуске обновления старые модули по-прежнему отключаются, не могли бы вы предоставить дополнительные предложения о том, какая стратегия развертывания будет работать?3. Попробуйте добавить
readinessProbe
иlivenessProbe
.readinessProbe
сообщит kubernetes, когда ваш новый модуль будет готов, даже если контейнер будет готов, ваше приложение все равно может инициализироваться.
Ответ №1:
Именно так работают развертывания Kubernetes. Что вам следует сделать, так это исправить ваш рабочий образ Celery, чтобы он ожидал попытки выполнить все незавершенные задачи, прежде чем фактически завершать работу. Вероятно, это уже должно быть так, если только вы не сделали что-то необычное, из-за чего SIGTERM не попадает в Celery? Смотрите https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods подробнее.