Развертывание Kubernetes: не завершайте модуль pod, пока новый модуль не будет находиться в рабочем состоянии в течение 2 минут

#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 не будет считать, что он действительно готов и находится в обслуживании (и, следовательно, отключит старые модули), пока модуль не сообщит, что он был готов в течение этого времени.