Pull to refresh

Comments 5

На практике вижу, что PreStop hook вызывается не всегда. Есть какое-то описание этого поведения?
Не об этом ли речь?
Note: Kubernetes only sends the preStop event when a Pod is terminated. This means that the preStop hook is not invoked when the Pod is completed. This limitation is tracked in issue #55087.
Вряд ли. Обычные поды, иногда вызывается, иногда нет.

На практике­ — я бы не стал полагаться на PreStop для mission critical задач, это не тот механизм. На практике:


  • В PreStop мы обычно делаем graceful shutdown, чтобы как можно более мягко приглушить под,
  • Но при этом, обязательно четко понимая, что любое важное действие в любом случае должно иметь некоторый механизм "retry".

Всем очевидно, что если веб-приложение, которое при обработке HTTP запроса делает два запроса в базу (один на зачисление денег на один счет и второй на их списание с другого), не использует транзакции — у вас в любом случае будут серьезные проблемы. И никакими PreStop хуками эти проблемы не исправишь. Аналогично и со stateful приложением, если оно не в состоянии корректно обработать "kill -9", а требует мягкого выключения — с ним в любом случае будут большие проблемы. При этом это не означает, что нужно всегда mysql выключать по kill -9, конечно же — и вот именно для этого и нужны PreStop хуки.


При этом зачастую сделать приложение с корректными "ретраями" совершенно не так сложно, как может сначала показаться. Современные веб фреймворки очень сильно в этом помогают. Соответственно даже если graceful shutdown не будет выполнен и приложение будет прибито жестко — ничего страшнее retry не происходит.

в состоянии корректно обработать "kill -9"

Дополню, на всякий случай. Речь идет совершенно не о том, что приложение обрабатывает SIGKILL ))). Речь о том, что при безусловном завершении всегда выполняется заявленный уровень гарантий: если это ACID — значит ACID, если что-то мягче — значит оно.

Sign up to leave a comment.