Похоже, вам нужно настроить стратегию непрерывного обновления. Вы можете найти похожие обсуждения здесь и здесь относительно выполнения обновлений без ошибок.
Стратегия обновления важна для определения количества недоступных модулей, которые вы можете иметь во время обновления. На данный момент простоя, вы можете установить это значение 0 и настроить разумное значение maxSurge.
Следующий шаг - убедиться, что у вас настроены соответствующие готовые пробники. Как только новый модуль помечен как готовый, контроллер попытается удалить один (или несколько) из старых модулей. Ваш модуль получит SIGTERM и перейдет к обработке, однако он настроен для этого. Это означает:
A) Убедитесь, что readinessProbe помечает модуль как готовый только после того, как он полностью может принять траффи c (/ health может работать, даже если приложение не работает, убедитесь, что это не так. случай).
B) Ваши старые модули должны правильно и изящно обрабатывать SIGTERM
, это делается на прикладном уровне. Имейте в виду, что по умолчанию контроллер позволит корректно завершить работу модулей после отправки SIGTERM
.