Comments 5
На практике — я бы не стал полагаться на PreStop для mission critical задач, это не тот механизм. На практике:
- В PreStop мы обычно делаем graceful shutdown, чтобы как можно более мягко приглушить под,
- Но при этом, обязательно четко понимая, что любое важное действие в любом случае должно иметь некоторый механизм "retry".
Всем очевидно, что если веб-приложение, которое при обработке HTTP запроса делает два запроса в базу (один на зачисление денег на один счет и второй на их списание с другого), не использует транзакции — у вас в любом случае будут серьезные проблемы. И никакими PreStop хуками эти проблемы не исправишь. Аналогично и со stateful приложением, если оно не в состоянии корректно обработать "kill -9", а требует мягкого выключения — с ним в любом случае будут большие проблемы. При этом это не означает, что нужно всегда mysql выключать по kill -9, конечно же — и вот именно для этого и нужны PreStop хуки.
При этом зачастую сделать приложение с корректными "ретраями" совершенно не так сложно, как может сначала показаться. Современные веб фреймворки очень сильно в этом помогают. Соответственно даже если graceful shutdown не будет выполнен и приложение будет прибито жестко — ничего страшнее retry не происходит.
Kubernetes: жизнь пода