Связь между ловушкой preStop и terminationGracePeriodSeconds - PullRequest
0 голосов
/ 13 февраля 2019

По сути, я пытаюсь поэкспериментировать с жизненным циклом модуля и проверить, можем ли мы выполнить некоторую очистку / резервное копирование, например, копирование журналов до завершения работы модуля.

Что мне нужно: Копировать журналы / heapdumps из контейнерана hostPath / S3 перед завершением

Что я пробовал:

Я использовал ловушку preStop с командой bash для вывода сообщения (просто чтобы посмотреть, работает ли оно !!).Использовал terminationGracePeriodSeconds с задержкой на preStop и переключает их, чтобы увидеть, работает ли процесс.Ex.оставьте terminationGracePeriodSeconds: 30 секунд (по умолчанию) и установите команду preStop в спящий режим на 50 секунд, и сообщение не должно генерироваться, так как контейнер будет завершен к тому времени.Это работает, как и ожидалось.

Мои вопросы:

  • Какие процессы разрешены (рекомендованы) для ловушки preStop?Копирование журналов / heapdumps от 15 гигов и более займет много времени.Затем это время будет использовано для определения terminationGracePeriodSeconds
  • , что происходит, когда preStop занимает больше времени, чем установленный gracePeriod?(в случае, если журналы огромны, скажем, 10 гигов)
  • что произойдет, если у меня нет никаких хуков, но я все еще установил terminationGracePeriodSeconds?контейнер будет оставаться до этого льготного времени?

Я нашел эту статью, которая тесно связана с этим, но не смогла выполнить https://github.com/kubernetes/kubernetes/issues/24695

Все отзывы приветствуются !!

1 Ответ

0 голосов
/ 14 февраля 2019

какие процессы разрешены (рекомендованы) для ловушки preStop?Копирование журналов / heapdumps от 15 гигов и более займет много времени.Затем это время будет использовано для определения terminationGracePeriodSeconds

Все, что здесь происходит, это скорее мнение и то, как вы хотите, чтобы ваши стручки задерживались.Другой вариант - позволить вашим модулям завершать работу и хранить ваши данные в каком-то месте (например, AWS S3, EBS), где данные будут сохраняться после жизненного цикла модуля, а затем использовать что-то вроде Job для очистки данных и т. Д.

что происходит, когда preStop занимает больше времени, чем установленный gracePeriod?(в случае, если журналы огромны, скажем, 10 гигов)

Ваш preStop не будет завершен, что может означать неполные данные или повреждение данных.

что произойдет, если у меня их нетперехватывает, но все еще установлен TerminationGracePeriodSeconds?будет ли контейнер оставаться до этого времени отсрочки?

Это объясняет последовательность (с здесь ):

  • Сигнал SIGTERM отправляется наосновной процесс в каждом контейнере, и начинается отсчет «льготного периода».
  • Если у контейнера есть хук preStop, он вызывается внутри контейнера.
  • Если контейнер не завершается в пределах льготного периодапериод, сигнал SIGKILL будет отправлен и контейнер.
...