#kubernetes
#kubernetes
Вопрос:
Когда я делаю kubectl delete pod
или kubectl patch
, как я могу гарантировать, что старый модуль фактически не удалит себя, пока модуль замены не будет запущен в течение 2 минут? (И если модуль замены умрет до истечения 2 минут, тогда даже не удаляйте старый модуль pod)
Причина в том, что моя инициализация занимает около 2 минут, чтобы извлечь некоторые последние данные и запустить вычисления; через 2 минуты он достигнет точки, когда либо выдаст ошибку, либо продолжит выполнение с обновленными вычислениями.
Я хочу иметь возможность время от времени удалять модуль pod, чтобы он перезапускался и получал новые версии содержимого (потому что получение новых версий выполняется только в начале кода).
Есть ли способ, которым я могу сделать это без контейнера инициализации? Потому что я обеспокоен тем, что было бы трудно передать вычисленные результаты из контейнера инициализации в основной контейнер
Комментарии:
1. Не проще ли было бы предоставить конечную точку для получения новых версий в работающем контейнере?
Ответ №1:
Нам нужно настроить два параметра.
- Мы установили
minReadySeconds
равным 2 минутам. Или мы можем использоватьreadiness probe
вместо жестко запрограммированных 2min. - Мы должны выполнить непрерывное обновление с
maxSurge > 0 (default: 1) and maxUnavailable: 0
помощью. При этом будут запущены новые модули, и только если они станут готовы, старые модули будут уничтожены. Этот процесс продолжается для остальных модулей.
Примечание: 0 <= maxSurge <= replicaCount
Комментарии:
1. Нужен ли maxSurge? Похоже, что если мы просто установим maxUnavailable: 0, разве этого не будет достаточно?
2. @gunit Спасибо. У maxSurge значение по умолчанию равно 1. Поэтому нам не нужно указывать. Я обновил ответ.
3. Привет. У меня вопрос о том, как сделать обратное этому. У меня ситуация, когда я предпочитаю простои одновременному запуску более чем двух модулей. Я попытался создать maxSurge: 0 и maxUnavailable: 1, но я все еще вижу это поведение
4. Примечание: Я также пробовал
Recreate
стратегию и использовал обе стратегии развертывания (повторное создание и обновление с помощью maxSurge: 0 и maxUnaavailable: 1). В обоих случаях после удаления модуля pod замена произойдет примерно через 3 секунды, но для полного завершения потребуется около 30-60 секунд. Я пытаюсь вообще избежать любого перекрытия
Ответ №2:
Если вы используете развертывание, вы можете установить minReadySeconds
в спецификации значение 120 (секунды). Kubernetes не будет считать, что он действительно готов и находится в обслуживании (и, следовательно, отключит старые модули), пока модуль не сообщит, что он был готов в течение этого времени.