11.2. CLI を使用したヘルスチェックの設定
readiness、liveness、および startup プローブを設定するには、1 つ以上のプローブをヘルスチェックを実行するコンテナーが含まれる Pod の仕様に追加します。
既存の Pod でヘルスチェックを追加または編集する必要がある場合、Pod の DeploymentConfig
オブジェクトを編集するか、Web コンソールで Developer パースペクティブを使用する必要があります。CLI を使用して既存の Pod のヘルスチェックを追加したり、編集したりすることはできません。
手順
コンテナーのプローブを追加するには、以下を実行します。
Pod
オブジェクトを作成して、1 つ以上のプローブを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: Pod metadata: labels: test: health-check name: my-application spec: containers: - name: my-container args: image: registry.k8s.io/goproxy:0.1 livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 15 periodSeconds: 20 timeoutSeconds: 10 readinessProbe: httpGet: host: my-host scheme: HTTPS path: /healthz port: 8080 startupProbe: exec: command: - cat - /tmp/healthy failureThreshold: 30 periodSeconds: 20 timeoutSeconds: 10
apiVersion: v1 kind: Pod metadata: labels: test: health-check name: my-application spec: containers: - name: my-container
1 args: image: registry.k8s.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
オブジェクトを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f <file-name>.yaml
$ oc create -f <file-name>.yaml
ヘルスチェック Pod の状態を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe pod my-application
$ oc describe pod my-application
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 "registry.k8s.io/liveness" Normal Pulled 1s kubelet, ip-10-0-143-40.ec2.internal Successfully pulled image "registry.k8s.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
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 "registry.k8s.io/liveness" Normal Pulled 1s kubelet, ip-10-0-143-40.ec2.internal Successfully pulled image "registry.k8s.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 チェック出力の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe pod pod1
$ oc describe pod pod1
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow .... 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 "registry.k8s.io/liveness" in 773.406244ms Normal Pulled 28s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "registry.k8s.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 "registry.k8s.io/liveness" Normal Pulled 10s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "registry.k8s.io/liveness" in 244.116568ms
.... 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 "registry.k8s.io/liveness" in 773.406244ms Normal Pulled 28s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "registry.k8s.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 "registry.k8s.io/liveness" Normal Pulled 10s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "registry.k8s.io/liveness" in 244.116568ms