すべてのプロダクト
Search
ドキュメントセンター

:プローブを使用してコンテナのヘルスチェックを実行する

最終更新日:Mar 28, 2022

このトピックでは、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:

  • HTTP

  • HTTPS

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:

  • HTTP

  • HTTPS

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ソケット方式はサポートされていません。

Health check 1

下表にパラメーターを示します。

パラメーター

説明

時刻設定

待機期間とタイムアウト期間を設定する必要があります。

  • 待機期間: プローブが最初のヘルスチェックを実行するまでの待機秒数。

  • タイムアウト期間: チェックのタイムアウト期間。 タイムアウトエラーが発生した場合、チェックは失敗しました。

メソッド

Valid values:

  • スクリプト: プローブはコンテナ内でコマンドを実行し、コマンドの終了コードをチェックします。 終了コードが0の場合、チェックは成功です。

  • HTTP要求方法: プローブは、HTTP要求をコンテナに送信する。 返されたステータスコードが200以上400未満の場合、チェックは成功です。

Script

[メソッドのスクリプト] を選択する場合、コンテナーで実行されるコマンドラインスクリプトを設定する必要があります。

HTTPリクエストメソッド

メソッドにHTTPリクエストメソッドを選択する場合、HTTP GETリクエストのパス、ポート、およびプロトコルを設定する必要があります。

設定例

この例では、livenessプローブとreadinessプローブが設定されたエラスティックコンテナインスタンスが作成され、NGINXコンテナが含まれています。 次に、設定されたプローブが有効になるかどうかを確認するためにサービス例外がシミュレートされます。

  1. 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); 
  2. エラスティックコンテナインスタンスの作成後に関連イベントを表示します。

    エラスティックコンテナインスタンスの作成後、インスタンスに関するイベントを表示し、インスタンスが正常に起動したことを確認できます。

    Health check 2
  3. 構成ファイルのNGINXリスニングポートを変更して、サービス例外をシミュレートします。

    1. NGINXリスニングポートを変更します。

      vi /etc/nginx/conf.d/default.conf

      例:

      Health check 3
    2. NGINXを再起動します。

      nginx -sリロード
  4. プローブの有効なステータスを表示します。

    NGINXを再起動してから数秒後、コンテナは自動的に再起動します。 インスタンスに関するイベントを表示すると、livenessプローブとreadinessプローブのそれぞれに3つの連続した障害が発生した後にコンテナが再起動されたことがわかります。

    Health check 4