Как в Kubernetes безопасно отключить длительные процессы? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть система, в которой некоторые длительные задачи выполняются путем обработки сообщений из очереди сообщений. Фактические задачи выполняют значительную обработку больших видео.

Вот проблема в следующих шагах:

  1. Процесс в модуле удаляет сообщение из очереди, запускает обработку видео, это занимает минут.
  2. Разработчик вносит изменения, выпускает, и начинается развертывание Kubernetes.
  3. Во время развертывания длительный процесс завершается и заменяется новым узлом, который теряет всю работу.

Есть ли в Kubernetes механизм для решения этой проблемы? Какая-то проверка, чтобы убедиться, что рабочий в модуле находится в состоянии, когда его можно безопасно уничтожить? Почти что-то вроде destroyProbe (противоположность readinessProbe)

1 Ответ

1 голос
/ 05 августа 2020

Вызов preStop ловушки перед завершением работы контейнера должен помочь вам выполнить льготное завершение работы. Ловушка preStop настраивается на уровне контейнера и позволяет запускать пользовательскую команду до отправки SIGTERM (обратите внимание, что отсчет отсчета льготного периода завершения фактически начинается перед вызовом ловушки preStop, а не сразу после SIGTERM будет отправлен сигнал).

Эта ловушка вызывается непосредственно перед завершением работы контейнера из-за запроса API или события управления, такого как сбой проверки работоспособности, приоритетное прерывание, конфликт ресурсов и другие. Вызов ловушки preStop завершается ошибкой, если контейнер уже находится в состоянии завершения или завершения. Это блокирующий, то есть синхронный, поэтому он должен завершиться перед отправкой вызова на удаление контейнера. В обработчик не передаются никакие параметры.

Установка также подходящая terminationGracePeriod также имеет значение, поскольку Kubernetes управляет блоками контейнера, пока не завершится обработчик preStop, если только не истечет льготный период Pod. Это означает, что обратный отсчет периода отсрочки завершения начинается перед вызовом ловушки preStop, а не после отправки сигнала SIGTERM.

Проверка хуков жизненного цикла и завершения пода документы для получения дополнительной информации.

...