7.4.3 グレースフルシャットダウンの実現方法
グレースフルシャットダウンの実現方法を説明します。
「7.4.2 HMP-PCTOのKubernetesアプリケーションのグレースフルシャットダウンが開始できる条件」によって、グレースフルシャットダウンの実現方法が異なります。それぞれの実現方法は次のとおりです。
-
新規トランザクションを受け付けない状態
KubernetesのpreStopフックを使用して、20秒間待機します。この間、KubernetesのServiceによって転送先リストからリクエストを削除する処理が実施されます。これによって、新規トランザクションを受け付けない状態になります。
-
未決着トランザクション件数およびトランザクションルートで処理中の件数
「7.6.3 未決着トランザクション待機スクリプト(wait_transactions.sh)」のKubernetesのpreStopフックを使用して、未決着トランザクション件数およびトランザクションルートで処理中の件数が0件になるまで待機します。
-
処理中リクエスト件数
-
REST通信によるリクエスト
Spring BootのGraceful Shutdown機能を使用して、処理中リクエスト件数が0件になるまで待機します。
-
gRPC通信によるリクエスト
gRPCサーバはグレースフルにシャットダウンするようにアプリケーションを実装してください。
-
Pod終了処理時に、未決着トランザクション件数および処理中リクエスト件数が0件になるまでの待機範囲を、次の図に示します。
|
|
この図に示すとおり、「未決着トランザクション件数およびトランザクションルートで処理中の件数」と「処理中リクエスト件数」の両方を条件に含むKubernetesアプリケーションの場合は、次の順序で待機を実施します。Podは、次の3つの待機が完了したときにシャットダウンします。
-
「新規トランザクションを受け付けない状態」になるまでの待機
-
トランザクション待機スクリプトによる「未決着トランザクション件数/トランザクションルートで処理中の件数」の待機
-
Spring BootのGraceful Shutdown機能による「処理中リクエスト件数」の待機
また、上記の待機が完了しないケースを考慮し、KubernetesのterminationGracePeriodSeconds(安全な停止待機秒数)を指定してください。トランザクション待機スクリプトによる「未決着トランザクション件数」の待機を開始してから指定した秒数が経過した場合に、Podを強制的にシャットダウンします。
- 重要
-
次の状況が発生すると、後述の「7.4.4 HMP-PCTOのKubernetesアプリケーションが強制シャットダウンしたときの挙動」の対象となります。
-
トランザクションが開始する。
-
トランザクションに参加しているPodがグレースフルシャットダウンを開始する。
-
2.のPodが前述の『1.「新規トランザクションを受け付けない状態」になるまでの待機』まで完了する。
-
トランザクション内で時間が掛かるなどの理由によって、他Podから2.のPodへリクエストするタイミングが3.のあとになる。
-