このトピックでは、livenessプローブとreadinessプローブを設定してコンテナーのヘルスチェックを実行する方法について説明します。
背景情報
Kubernetesでは、kubeletはlivenessプローブとreadinessプローブを使用して、コンテナーのステータスと実行条件を定期的にチェックします。
Livenessプローブ
Livenessプローブは、コンテナが正常に動作しているかどうかを確認するために使用されます。 チェックが成功した場合、コンテナは正常に動作しています。 チェックが失敗した場合、システムは設定されたコンテナーの再起動ポリシーに基づいてコンテナーを再起動するかどうかを決定します。 デフォルトでは、livenessプローブが設定されていない場合、コンテナーは常に正常に動作していると見なされます。
Livenessプローブは、次のシナリオで適用できます。
アプリケーションが実行されているが、それ以上の操作を実行できない場合、ライブネスプローブはデッドロックをキャプチャできます。 その後、システムはコンテナを再起動し、バグにもかかわらずアプリケーションを正常に実行します。
長時間実行されている多くのアプリケーションは、最終的には壊れた状態に遷移し、再起動以外では回復できない。 livenessプローブを使用して、このような状況を検出および改善できます。
準備プローブ
Readinessプローブは、コンテナがリクエストを処理できるかどうかをチェックするために使用されます。 チェックが成功すると、コンテナはビジネスリクエストを受信する準備ができています。 チェックが失敗した場合、コンテナは準備ができておらず、システムは再チェックが成功するまでコンテナへの要求の送信を停止します。
Readinessプローブは、次のシナリオで適用できます。
アプリケーションは一時的に外部トラフィックを処理できません。 たとえば、アプリケーションは、起動中に大量のデータまたは構成ファイルをロードする必要がある場合があります。 この場合、アプリケーションを終了したり、要求を送信したりしたくない場合は、準備完了プローブを使用してそのような状況を検出して軽減できます。
Kubernetesモード
Kubernetesを使用してエラスティックコンテナインスタンスを作成する場合、コンテナのlivenessProbeフィールドとreadinessProbeフィールドを使用して、livenessプローブとreadinessプローブを設定できます。 例:
livenessプローブの設定
apiVersion: v1 種類: ポッド メタデータ: labels: テスト: liveness 名前: liveness-exec spec: containers: -name: liveness 画像: busybox: 最新 args: - /bin/sh - -c -タッチ /tmp /健康; 睡眠30; rm -rf /tmp /健康; 睡眠600 # コマンドラインを使用して、コンテナをチェックするようにlivenessプローブを設定します。 livenessProbe: exec: command: -猫 - /tmp /健康 initialDelaySeconds: 5# コンテナの開始から5秒後にコンテナのチェックを開始します。 periodSeconds: 5 #5秒ごとにチェックを実行します。
準備プローブの設定
apiVersion: v1 種類: ポッド メタデータ: labels: テスト: 準備 名前: readiness-exec spec: containers: -name: 準備 画像: busybox: 最新 args: - /bin/sh - -c -タッチ /tmp /健康; 睡眠30; rm -rf /tmp /健康; 睡眠600 # コマンドラインを使用して、コンテナーをチェックする準備プローブを設定します。 readinessProbe: exec: command: -猫 - /tmp /健康 initialDelaySeconds: 5# コンテナの開始から5秒後にコンテナのチェックを開始します。 periodSeconds: 5 #5秒ごとにチェックを実行します。
詳細については、「Liveness、Readiness、Startup Probesの設定」をご参照ください。
APIモード
CreateContainerGroup操作を呼び出してエラスティックコンテナインスタンスを作成する場合、LivenessProbeパラメーターとReadinessProbeパラメーターを使用して、livenessプローブとreadinessプローブを設定できます。 下表にパラメーターを示します。 詳細については、「CreateContainerGroup」をご参照ください。
LivenessProbe関連のパラメータ
パラメーター | タイプ | 必須/任意 | 例 | 説明 |
---|---|---|---|---|
Container.N.LivenessProbe.HttpGet.Path | String | 任意 | /healthyz | ヘルスチェックのためにHTTP GETリクエストが送信されるパス。 |
Container.N.LivenessProbe.HttpGet.Port | Integer | 任意 | 8888 | ヘルスチェックのためにHTTP GETリクエストが送信されるポート。 |
Container.N.LivenessProbe.HttpGet.Scheme | String | 任意 | HTTP | ヘルスチェックにHTTPリクエストを使用する場合のHTTP GETリクエストのプロトコルタイプ。 Valid values:
|
Container.N.LivenessProbe.InitialDelaySeconds | Integer | 任意 | 5 | コンテナーが開始されてからチェックが開始されるまでの秒数。 |
Container.N.LivenessProbe.PeriodSeconds | Integer | 任意 | 1 | コンテナをチェックする間隔。 Default value: 10. 最小値:1 (単位:秒) |
Container.N.LivenessProbe.SuccessThreshold | Integer | 任意 | 1 | チェックが失敗した後、チェックが成功したと宣言されるまでにヘルスチェックが成功しなければならない最小連続回数。 デフォルト値:1。 値を1に設定します。 |
Container.N.LivenessProbe.FailureThreshold | Integer | 任意 | 3 | チェックが成功した後、チェックが失敗したと宣言されるまでにヘルスチェックが失敗しなければならない最小連続回数。 デフォルト値:3 |
Container.N.LivenessProbe.TimeoutSeconds | Integer | 任意 | 1 | チェックのタイムアウト期間。 デフォルト値:1。 最小値:1 (単位:秒) |
Container.N.LivenessProbe.Exec.Command.N | RepeatList | 任意 | 猫 /tmp /健康 | コマンドラインでヘルスチェックを行ったときにコンテナで実行するコマンドN。 |
Container.N.LivenessProbe.TcpSocket.Port | Integer | 任意 | 8000 | TCPソケットを使用してヘルスチェックを実行するときに、TCPソケットによって検出されるポート。 |
ReadinessProbe関連のパラメーター
パラメーター | タイプ | 必須/任意 | 例 | 説明 |
---|---|---|---|---|
Container.N.ReadinessProbe.HttpGet.Path | String | 任意 | /healthyz | ヘルスチェックのためにHTTP GETリクエストが送信されるパス。 |
Container.N.ReadinessProbe.HttpGet.Port | Integer | 任意 | 8888 | ヘルスチェックのためにHTTP GETリクエストが送信されるポート。 |
Container.N.ReadinessProbe.HttpGet.Scheme | String | 任意 | HTTP | ヘルスチェックにHTTPリクエストを使用する場合のHTTP GETリクエストのプロトコルタイプ。 Valid values:
|
Container.N.ReadinessProbe.InitialDelaySeconds | Integer | 任意 | 5 | コンテナーが開始されてからプローブが開始されるまでの秒数。 |
Container.N.ReadinessProbe.PeriodSeconds | Integer | 任意 | 1 | コンテナをチェックする間隔。 Default value: 10. 最小値:1 (単位:秒) |
Container.N.ReadinessProbe.SuccessThreshold | Integer | 任意 | 1 | チェックが失敗した後、チェックが成功したと宣言されるまでにヘルスチェックが成功しなければならない最小連続回数。 デフォルト値:1。 値を1に設定します。 |
Container.N.ReadinessProbe.FailureThreshold | Integer | 任意 | 3 | チェックが成功した後、チェックが失敗したと宣言されるまでにヘルスチェックが失敗しなければならない最小連続回数。 デフォルト値:3 |
Container.N.ReadinessProbe.TimeoutSeconds | Integer | 任意 | 1 | チェックのタイムアウト期間。 デフォルト値:1。 最小値:1 (単位:秒) |
Container.N.ReadinessProbe.Exec.Command.N | RepeatList | 任意 | 猫 /tmp /健康 | コマンドラインでヘルスチェックを行ったときにコンテナで実行するコマンドN。 |
Container.N.ReadinessProbe.TcpSocket.Port | Integer | 任意 | 8000 | TCPソケットを使用してヘルスチェックを実行するときにTCPソケットによって検出されるポート。 |
コンソールモード
elastic container instanceコンソールでElasticコンテナインスタンスを作成する場合は、[コンテナ設定] セクションの [詳細設定] をクリックし、ヘルスチェックを有効にします。 次の図は、設定の詳細を示しています。
Elastic Container Instanceコンソールでヘルスチェックを設定すると、コマンドラインとHTTPリクエストメソッドのみがサポートされます。 TCPソケット方式はサポートされていません。
下表にパラメーターを示します。
パラメーター | 説明 |
---|---|
時刻設定 | 待機期間とタイムアウト期間を設定する必要があります。
|
メソッド | Valid values:
|
Script | [メソッドのスクリプト] を選択する場合、コンテナーで実行されるコマンドラインスクリプトを設定する必要があります。 |
HTTPリクエストメソッド | メソッドにHTTPリクエストメソッドを選択する場合、HTTP GETリクエストのパス、ポート、およびプロトコルを設定する必要があります。 |
設定例
この例では、livenessプローブとreadinessプローブが設定されたエラスティックコンテナインスタンスが作成され、NGINXコンテナが含まれています。 次に、設定されたプローブが有効になるかどうかを確認するためにサービス例外がシミュレートされます。
SDK for Javaを使用してエラスティックコンテナインスタンスを作成します。
NGINXイメージを使用してエラスティックコンテナインスタンスを作成します。 次のサンプルコードは、livenessプローブとreadinessプローブを設定する方法を示しています。
// livenessプローブを設定します。 コンテナを5秒間実行した後、kubeletは3秒ごとにポート80でlivenessプローブを実行します。 各プローブのタイムアウト期間は10秒に設定されています。 成功とみなされるプローブの連続成功数は3に設定され、失敗とみなされるプローブの連続失敗数も3に設定される。 CreateContainerGroupRequest.Container.ContainerProbe livenessProbe = new CreateContainerGroupRequest.Container.ContainerProbe(); livenessProbe.setTcpSocketPort(80); livenessProbe.setInitialDelaySeconds (5); livenessProbe.setPeriodSeconds(3); livenessProbe.setFailureThreshold(3); livenessProbe.setSuccessThreshold(1); livenessProbe.setTimeoutSeconds (10); // 準備プローブを設定します。 コンテナを5秒間実行した後、kubeletは3秒ごとにポート80で準備プローブを実行します。 各チェックのタイムアウト時間は10秒に設定されています。 ヘルスチェックが成功と宣言される前にヘルスチェックが成功しなければならない連続回数は1に設定され、チェックが失敗と宣言される前にプローブが失敗しなければならない連続回数は3に設定されます。 CreateContainerGroupRequest.Container.ContainerProbe readinessProbe = new CreateContainerGroupRequest.Container.ContainerProbe(); readinessProbe.setTcpSocketPort(80); readinessProbe.setInitialDelaySeconds (5); readinessProbe.setPeriodSeconds(3); readinessProbe.setFailureThreshold(3); readinessProbe.setSuccessThreshold(3); readinessProbe.setTimeoutSeconds(10);
エラスティックコンテナインスタンスの作成後に関連イベントを表示します。
エラスティックコンテナインスタンスの作成後、インスタンスに関するイベントを表示し、インスタンスが正常に起動したことを確認できます。
構成ファイルのNGINXリスニングポートを変更して、サービス例外をシミュレートします。
NGINXリスニングポートを変更します。
vi /etc/nginx/conf.d/default.conf
例:
NGINXを再起動します。
nginx -sリロード
プローブの有効なステータスを表示します。
NGINXを再起動してから数秒後、コンテナは自動的に再起動します。 インスタンスに関するイベントを表示すると、livenessプローブとreadinessプローブのそれぞれに3つの連続した障害が発生した後にコンテナが再起動されたことがわかります。