Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

33.2. プローブを使用したコンテナーのヘルスチェック

プローブは実行中のコンテナーで定期的に実行する Kubernetes の動作です。現時点では、2 つのタイプのプローブがあり、それぞれが目的別に使用されています。

liveness プローブ

liveness プローブは、liveness プローブが設定されているコンテナーが実行中であるかどうかを判別します。liveness プローブが失敗すると、kubelet はその再起動ポリシーに基づいてコンテナーを強制終了します。Pod 設定の template.spec.containers.livenessprobe スタンザを設定して liveness チェックを設定します。

readiness プローブ

readiness プローブはコンテナーが要求を提供できるかどうかを判別します。readiness プローブがコンテナーで失敗する場合、エンドポイントコントローラーはコンテナーの IP アドレスがすべてのエンドポイントから削除されるようにします。readiness プローブはコンテナーが実行中の場合でも、それがプロキシーからトラフィックを受信しないようにエンドポイントコントローラーに対して信号を送るために使用できます。Pod 設定の template.spec.containers.readinessprobe スタンザを設定して readiness チェックを設定します。

プローブの正確なタイミングは、秒単位で表される 2 つのフィールドで制御されます。

フィールド説明

initialDelaySeconds

コンテナーのプローブ開始後の待機時間。

timeoutSeconds

プローブが終了するまでの待機時間 (デフォルト: 1)。この時間を過ぎると、OpenShift Container Platform はプローブが失敗したものとみなします。

どちらのプローブも以下の 3 つの方法で設定できます。

HTTP チェック

kubelet は web hook を使用してコンテナーの正常性を判別します。このチェックは HTTP の応答コードが 200 から 399 までの値の場合に正常とみなされます。以下は、HTTP チェック方法を使用した readiness チェックの例です。

例33.1 Readiness HTTP チェック

...
readinessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 15
  timeoutSeconds: 1
...

HTTP チェックは、これが完全に初期化されている場合は HTTP ステータスコードを返すアプリケーションに適しています。

コンテナー実行チェック

kubeletは、コンテナー内でコマンドを実行します。ステータス 0 でチェックを終了すると正常であるとみなされます。以下はコンテナー実行方法を使用した liveness チェックの例です。

例33.2 Liveness コンテナー実行チェック

...
livenessProbe:
  exec:
    command:
    - cat
    - /tmp/health
  initialDelaySeconds: 15
...
注記

timeoutSeconds パラメーターは、コンテナー実行チェックの Readiness および Liveness プローブには影響はありません。

注記

timeoutSeconds パラメーターは、コンテナー実行チェックの Readiness および Liveness プローブには影響はありません。OpenShift Container Platform はコンテナーへの実行呼び出しでタイムアウトにならないため、タイムアウトをプローブ自体に実装できます。プローブでタイムアウトを実装する 1 つの方法として、timeout パラメーターを使用して liveness プローブおよび readiness プローブを実行できます。

[...]
       livenessProbe:
        exec:
          command:
            - /bin/bash
            - '-c'
            - timeout 60 /opt/eap/bin/livenessProbe.sh 1
        timeoutSeconds: 1
        periodSeconds: 10
        successThreshold: 1
        failureThreshold: 3
[...]
1
タイムアウト値およびプローブスクリプトへのパスです。

TCP ソケットチェック

kubelet はコンテナーに対してソケットを開くことを試行します。コンテナーはチェックで接続を確立できる場合にのみ正常であるとみなされます。以下は TCP ソケットチェック方法を使用した liveness チェックの例です。

例33.3 Liveness TCP ソケットチェック

...
livenessProbe:
  tcpSocket:
    port: 8080
  initialDelaySeconds: 15
  timeoutSeconds: 1
...

TCP ソケットチェック は、初期化が完了するまでリスニングを開始しないアプリケーションに適しています。

ヘルスチェックについての詳細は、Kubernetes ドキュメントを参照してください