第34章 アプリケーションの正常性
34.1. 概要
ソフトウェアのシステムでは、コンポーネントは一時的な問題 (一時的に接続が失われるなど)、設定エラー、または外部の依存関係に関する問題などにより正常でなくなることがあります。OpenShift Container Platform アプリケーションには、正常でないコンテナーを検出し、これに対応するための数多くのオプションがあります。
34.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 チェックの例です。
例34.1 Readiness HTTP チェック
... readinessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 15 timeoutSeconds: 1 ...
HTTP チェックは、これが完全に初期化されている場合は HTTP ステータスコードを返すアプリケーションに適しています。
コンテナー実行チェック
kubelet はコンテナー内でコマンドを実行します。ステータス 0 でチェックを終了すると正常であるとみなされます。以下はコンテナー実行方法を使用した liveness チェックの例です。
例34.2 Liveness コンテナー実行チェック
... livenessProbe: exec: command: - cat - /tmp/health initialDelaySeconds: 15 ...
timeoutSeconds
パラメーターは、コンテナー実行チェックの Readiness および Liveness プローブには影響はありません。
TCP ソケットチェック
kubelet はコンテナーに対してソケットを開くことを試行します。コンテナーはチェックで接続を確立できる場合にのみ正常であるとみなされます。以下は TCP ソケットチェック方法を使用した liveness チェックの例です。
例34.3 Liveness TCP ソケットチェック
... livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 15 timeoutSeconds: 1 ...
TCP ソケットチェックは、初期化が完了するまでリッスンを開始しないアプリケーションに適しています。
ヘルスチェックについての詳細は、Kubernetes ドキュメント を参照してください。