9.2. CLI を使用したヘルスチェックの設定

readiness、liveness、および startup プローブを設定するには、1 つ以上のプローブをヘルスチェックを実行するコンテナーが含まれる Pod の仕様に追加します。

注記

既存の Pod でヘルスチェックを追加または編集する必要がある場合、Pod の DeploymentConfig オブジェクトを編集するか、または Web コンソールで Developer パースペクティブを使用する必要があります。CLI を使用して既存の Pod のヘルスチェックを追加したり、編集したりすることはできません。

手順

コンテナーのプローブを追加するには、以下を実行します。

  1. 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 の値よりも低い値である必要があります。

  2. Pod オブジェクトを作成します。

    $ oc create -f <file-name>.yaml
  3. ヘルスチェック 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