Kubernetes に精通しており、アプリケーションコンテナの起動前または停止前に特定の操作を実行する場合は、アプリケーションライフサイクル管理を設定できます。たとえば、コンテナの実行前にリソースをデプロイしたり、コンテナが停止する前にアプリケーションを安全に停止したりすることができます。このトピックでは、Serverless App Engine(SAE)で PostStart、PreStop、および TerminationGracePeriodSeconds を設定する方法について説明します。
概要
Pod hook(コンテナ hook)は、Kubernete によって管理される kubelet コンポーネントによって実装されるメカニズムです。コンテナプロセスの開始前(preStart)および停止前(preStop)など、コンテナライフサイクルの重要な段階でカスタムタスクを実行するために使用されます。Hook を使用すると、Kubernetes はコンテナライフサイクルをより柔軟かつ正確に管理できます。詳細については、「Container Lifecycle Hooks」をご参照ください。
[PostStart 設定]:コンテナの作成直後に hook がトリガーされます。hook は、コンテナが作成されたことを Kubernetes に通知します。hook は、対応する hook ハンドラにパラメータを渡しません。対応する hook ハンドラが実行に失敗した場合、コンテナは停止し、コンテナの再起動ポリシーを使用してコンテナを再起動するかどうかが決定されます。
[PreStop 設定]:コンテナが削除される前に hook がトリガーされ、多くの場合、クリーンアップ操作やサービスの安全な停止に使用されます。対応する hook ハンドラは、コンテナの削除リクエストが Docker デーモンに送信される前に完全に実行される必要があります。Docker デーモンは、対応する hook ハンドラの 実行結果に関係なく、コンテナを削除するために SGTERN セマフォを自身に送信します。
[安全なシャットダウンのタイムアウト期間設定(TerminationGracePeriodSeconds)]:この設定は、安全なシャットダウンのための時間バッファを提供し、アプリケーションが強制的に停止される前に必要なクリーンアップおよびシャットダウンタスクが完了するようにします。これにより、システムの安定性と信頼性が向上し、強制終了によって発生するデータ損失、リクエストの失敗、サービスの利用不能などの問題を防ぎます。PreStop hook と組み合わせることで、完全な安全なシャットダウンプロセスが容易になります。
準備
手順はシナリオによって異なります。
アプリケーションの作成
SAE コンソール にログインします。左側のナビゲーションウィンドウで、名前空間 を選択します。表示されたページで、上部のナビゲーションバーでリージョンを選択し、 ドロップダウンリストから名前空間を選択して、[アプリケーションの作成] をクリックします。
[基本情報] セクションの アプリケーションの作成 ページで、必要なパラメーターを構成し、[次へ: 詳細設定] をクリックします。
表示されたページで、[アプリケーションライフサイクル管理] セクションを見つけて展開します。
実行中のアプリケーションの変更
アプリケーションを再デプロイすると、アプリケーションが再起動されます。ビジネスの中断などの予期しないエラーを防ぐために、オフピーク時にアプリケーションをデプロイすることをお勧めします。
SAE コンソール にログオンします。左側のナビゲーションウィンドウで、 を選択します。表示されるページで、上部のナビゲーションバーでリージョンを選択し、[名前空間] ドロップダウンリストから名前空間を選択して、ターゲット アプリケーション名をクリックします。
ターゲットアプリケーションの [基本情報] ページで、[アプリケーションのデプロイ] をクリックします。
[アプリケーションのデプロイ] ページで、[アプリケーションライフサイクル管理] セクションを見つけて展開します。
停止したアプリケーションの変更
SAE コンソール にログインします。左側のナビゲーションウィンドウで、名前空間 を選択します。表示されたページで、上部のナビゲーションバーでリージョンを選択し、 ドロップダウンリストから名前空間を選択して、ターゲットアプリケーション名をクリックします。
ターゲットアプリケーションの [基本情報] ページで、[アプリケーション設定の変更] をクリックします。
[アプリケーション設定の変更] ページで、[アプリケーションライフサイクル管理] セクションを見つけて展開します。
手順
[アプリケーションライフサイクル管理] セクションで、必要に応じて [PostStart 設定]、[PreStop 設定]、および [安全なシャットダウンのタイムアウト期間設定] を設定します。
3 つすべてを設定して、コンテナの完全なライフサイクル管理を実現し、スムーズなサービスの起動とシャットダウン、秩序あるリソースの解放、ビジネスの中断のゼロ化を実現することをお勧めします。
PostStart 設定
[アプリケーションライフサイクル管理] セクションの [PostStart 設定] タブで PostStart を設定します。
SAE は 2 つのシェルインタープリターを提供します。
>_ /bin/sh
>_ /bin/bash
この例では、アプリケーションを起動する前に、スクリプト /usr/share/message に Hello from the postStart handler と記述します。
本番環境では、ビジネス要件に基づいてパラメータを設定してください。このセクションで提供されている例は、機能の可用性を最小限に検証するためのものであり、本番環境では使用しないでください。

検証:
アプリケーションの作成または再デプロイ後、[Webshell] を使用して、/usr/share/message スクリプトに予期されるコンテンツが含まれているかどうかを確認します。

PreStop 設定
[アプリケーションライフサイクル管理] セクションの [PreStop 設定] タブで PreStop を設定します。
SAE は 2 つのシェルインタープリターを提供します。
>_ /bin/sh
>_ /bin/bash
この例では、Perform cleanup コマンドを実行し、Perform cleanup をスクリプト /cleanup.log に書き込みます。検証を実行する前に 100 秒間待ちます。
本番環境では、ビジネス要件に基づいてパラメータを設定してください。このセクションで提供されている例は、機能の可用性を最小限に検証するためのものであり、本番環境では使用しないでください。

検証:
アプリケーションの [基本情報] ページで、[アプリケーションの停止] をクリックし、[Webshell] を使用して、/cleanup.log ファイルに予期されるコンテンツが含まれているかどうかを確認します。

安全なシャットダウンのタイムアウト期間設定(TerminationGracePeriodSeconds)
[アプリケーション ライフサイクル管理] セクションの [安全停止のタイムアウト期間設定] タブで、安全停止のタイムアウト期間 を設定します。
設定した安全なシャットダウンのタイムアウト期間が、安全なシャットダウン期間(PreStop hook の実行時間とコンテナプロセス SIGTERM 信号の時間を含む)よりも短い場合、タイムアウトの期限が切れるとコンテナは強制終了され(信号名:SIGKILL、終了コード:137)、安全なシャットダウンプロセスが中断されます。たとえば、コンテナの安全な終了時間の停止期間が 100 秒で、安全なシャットダウンのタイムアウト期間が 60 秒に設定されている場合、安全な終了が完了する前にコンテナは強制終了されます。

検証:
この例では、検証のために、安全なシャットダウンのタイムアウト期間を安全なシャットダウン期間よりも短く設定しています。
アプリケーションの [基本情報] ページで、[アプリケーションの停止] をクリックし、[Webshell] を使用して、コンテナに 137 の終了コードが表示されるかどうかを確認します。
安全なシャットダウン中は、タイムアウト期間を超えるまで、コンテナは Terminating 状態のままになります。