8.2. CLI を使用したヘルスチェックの設定
readiness、liveness、および startup プローブを設定するには、1 つ以上のプローブをヘルスチェックを実行するコンテナーが含まれる Pod の仕様に追加します。
既存の Pod でヘルスチェックを追加または編集する必要がある場合、Pod の DeploymentConfig
オブジェクトを編集するか、または Web コンソールで Developer パースペクティブを使用する必要があります。CLI を使用して既存の Pod のヘルスチェックを追加したり、編集したりすることはできません。
手順
コンテナーのプローブを追加するには、以下を実行します。
Pod
オブジェクトを作成して、1 つ以上のプローブを追加します。apiVersion: v1 kind: Pod metadata: labels: test: health-check name: my-application spec: containers: - name: my-container 1 args: image: k8s.gcr.io/goproxy:0.1 2 livenessProbe: 3 tcpSocket: 4 port: 8080 5 initialDelaySeconds: 15 6 periodSeconds: 20 7 timeoutSeconds: 10 8 readinessProbe: 9 httpGet: 10 host: my-host 11 scheme: HTTPS 12 path: /healthz port: 8080 13 startupProbe: 14 exec: 15 command: 16 - cat - /tmp/healthy failureThreshold: 30 17 periodSeconds: 20 18 timeoutSeconds: 10 19
- 1
- コンテナー名を指定します。
- 2
- デプロイするコンテナーイメージを指定します。
- 3
- オプション: liveness プローブを作成します。
- 4
- 実行するテストを指定します。この場合は TCP ソケットテストです。
- 5
- コンテナーがリッスンするポートを指定します。
- 6
- コンテナーが起動してからプローブがスケジュールされるまでの時間 (秒単位) を指定します。
- 7
- プローブを実行する秒数を指定します。デフォルトは
10
です。この値はtimeoutSeconds
よりも大きくなければなりません。 - 8
- プローブが失敗したと想定されてから非アクティブになる時間 (秒数)。デフォルトは
1
です。この値はperiodSeconds
未満である必要があります。 - 9
- オプション: readiness プローブを作成します。
- 10
- 実行するテストのタイプを指定します。この場合は HTTP テストです。
- 11
- ホストの IP アドレスを指定します。
host
が定義されていない場合は、PodIP
が使用されます。 - 12
HTTP
またはHTTPS
を指定します。scheme
が定義されていない場合は、HTTP
スキームが使用されます。- 13
- コンテナーがリッスンするポートを指定します。
- 14
- オプション: スタートアッププローブを作成します。
- 15
- 実行するテストのタイプを指定します。この場合はコンテナー実行プローブです。
- 16
- コンテナーで実行するコマンドを指定します。
- 17
- 失敗後にプローブを試行する回数を指定します。
- 18
- プローブを実行する秒数を指定します。デフォルトは
10
です。この値はtimeoutSeconds
よりも大きくなければなりません。 - 19
- プローブが失敗したと想定されてから非アクティブになる時間 (秒数)。デフォルトは
1
です。この値はperiodSeconds
未満である必要があります。
注記initialDelaySeconds
値がperiodSeconds
値よりも低い場合、最初の readiness プローブがタイマーの問題により 2 つの期間の間のある時点で生じます。timeoutSeconds
値はperiodSeconds
の値よりも低い値である必要があります。Pod
オブジェクトを作成します。$ oc create -f <file-name>.yaml
ヘルスチェック Pod の状態を確認します。
$ oc describe pod health-check
出力例
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 9s default-scheduler Successfully assigned openshift-logging/liveness-exec to ip-10-0-143-40.ec2.internal Normal Pulling 2s kubelet, ip-10-0-143-40.ec2.internal pulling image "k8s.gcr.io/liveness" Normal Pulled 1s kubelet, ip-10-0-143-40.ec2.internal Successfully pulled image "k8s.gcr.io/liveness" Normal Created 1s kubelet, ip-10-0-143-40.ec2.internal Created container Normal Started 1s kubelet, ip-10-0-143-40.ec2.internal Started container
以下は、コンテナーを再起動した障害のあるプローブの出力です。
正常ではないコンテナーについての liveness チェック出力の例
$ oc describe pod pod1
出力例
.... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled <unknown> Successfully assigned aaa/liveness-http to ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Normal AddedInterface 47s multus Add eth0 [10.129.2.11/23] Normal Pulled 46s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "k8s.gcr.io/liveness" in 773.406244ms Normal Pulled 28s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "k8s.gcr.io/liveness" in 233.328564ms Normal Created 10s (x3 over 46s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Created container liveness Normal Started 10s (x3 over 46s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Started container liveness Warning Unhealthy 10s (x6 over 34s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Liveness probe failed: HTTP probe failed with statuscode: 500 Normal Killing 10s (x2 over 28s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Container liveness failed liveness probe, will be restarted Normal Pulling 10s (x3 over 47s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Pulling image "k8s.gcr.io/liveness" Normal Pulled 10s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "k8s.gcr.io/liveness" in 244.116568ms