28.2. プローブを使用したコンテナーのヘルスチェック
プローブは実行中のコンテナーで定期的に実行する Kubernetes の動作です。現時点では、2 つのタイプのプローブがあり、それぞれが目的別に使用されています。
liveness プローブ |
liveness プローブは、liveness プローブが設定されているコンテナーが実行中であるかどうかを判別します。liveness プローブが失敗すると、kubelet はその再起動ポリシーに基づいてコンテナーを強制終了します。Pod 設定の |
readiness プローブ |
readiness プローブはコンテナーが要求を提供できるかどうかを判別します。readiness プローブがコンテナーで失敗する場合、エンドポイントコントローラーはコンテナーの IP アドレスがすべてのエンドポイントから削除されるようにします。readiness プローブはコンテナーが実行中の場合でも、それがプロキシーからトラフィックを受信しないようにエンドポイントコントローラーに対して信号を送るために使用できます。Pod 設定の |
プローブの正確なタイミングは、秒単位で表される 2 つのフィールドで制御されます。
フィールド | 説明 |
---|---|
| コンテナーのプローブ開始後の待機時間。 |
|
プローブが終了するまでの待機時間 (デフォルト: |
どちらのプローブも以下の 3 つの方法で設定できます。
HTTP チェック
kubelet は web hook を使用してコンテナーの正常性を判別します。このチェックは HTTP の応答コードが 200 から 399 までの値の場合に正常とみなされます。以下は、HTTP チェック方法を使用した readiness チェックの例です。
例28.1 Readiness HTTP チェック
... readinessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 15 timeoutSeconds: 1 ...
HTTP チェックは、これが完全に初期化されている場合は HTTP ステータスコードを返すアプリケーションに適しています。
コンテナー実行チェック
kubeletは、コンテナー内でコマンドを実行します。ステータス 0 でチェックを終了すると正常であるとみなされます。以下はコンテナー実行方法を使用した liveness チェックの例です。
例28.2 Liveness コンテナー実行チェック
... livenessProbe: exec: command: - cat - /tmp/health initialDelaySeconds: 15 ...
timeoutSeconds
パラメーターは、コンテナー実行チェックの Readiness および Liveness プローブには影響はありません。OpenShift Online はコンテナーへの実行呼び出しでタイムアウトにならないため、タイムアウトをプローブ自体に実装できます。プローブでタイムアウトを実装する 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 チェックの例です。
例28.3 Liveness TCP ソケットチェック
... livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 15 timeoutSeconds: 1 ...
TCP ソケットチェックは、初期化が完了するまでリッスンを開始しないアプリケーションに適しています。
ヘルスチェックについての詳細は、Kubernetes ドキュメントを参照してください。