12.2. 使用 CLI 配置健康检查

要配置就绪度、存活度和启动探测,将一个或多个探测添加到包含要执行健康检查的容器的 pod 规格中

注意

如果要在现有 pod 中添加或编辑健康检查,您必须编辑 pod DeploymentConfig 对象,或者在 web 控制台中使用 Developer 视角。您不能使用 CLI 添加或编辑现有 pod 的健康检查。

流程

为容器添加探测:

  1. 创建 Pod 对象来添加一个或多个探测:

    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
    可选:创建一个存活度探测。
    4
    指定要执行的测试,这里是一个 TCP 套接字测试。
    5
    指定容器正在侦听的端口。
    6
    指定在调度探测前容器需要已启动的时间(以秒为单位)。
    7
    指定执行这个探测的秒数。默认值为 10。这个值必须大于 timeoutSeconds
    8
    指定一个秒数,在不活跃的时间超过这个值时探测被认为是失败的。默认值为 1。这个值必须小于 periodSeconds
    9
    可选:创建一个就绪度探测。
    10
    指定要执行的测试类型,这里是 HTTP 测试。
    11
    指定主机 IP 地址。如果未定义 host,则使用 PodIP
    12
    指定 HTTPHTTPS。如果未定义 scheme,则使用 HTTP 方案。
    13
    指定容器正在侦听的端口。
    14
    可选:创建一个启动探测。
    15
    指定要执行的测试类型,这里是一个容器执行探测。
    16
    指定要在容器上执行的命令。
    17
    指定失败后测试探测的次数。
    18
    指定执行这个探测的秒数。默认值为 10。这个值必须大于 timeoutSeconds
    19
    指定一个秒数,在不活跃的时间超过这个值时探测被认为是失败的。默认值为 1。这个值必须小于 periodSeconds
    注意

    如果 initialDelaySeconds 的值低于 periodSeconds 值,则第一个就绪度探测会因计时器的问题在两个阶段间进行。

    timeoutSeconds 值必须小于 periodSeconds 值。

  2. 创建 Pod 对象:

    $ oc create -f <file-name>.yaml
  3. 验证健康检查 pod 的状态:

    $ oc describe pod my-application

    输出示例

    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

    以下是重启容器失败的探测的输出:

    不健康容器存活度检查输出示例

    $ 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 "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