Связь между ловушкой preStop и terminationGracePeriodSeconds

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

Что мне нужно: скопировать логи /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 ответ

Решение

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

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

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

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

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

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

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