第33章 アプリケーションの正常性

33.1. 概要

ソフトウェアのシステムでは、コンポーネントは一時的な問題 (一時的に接続が失われるなど)、設定エラー、または外部の依存関係に関する問題などにより正常でなくなることがあります。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 ドキュメントを参照してください。