12.2. 使用 CLI 配置健康检查
要配置就绪度、存活度和启动探测,将一个或多个探测添加到包含要执行健康检查的容器的 pod 规格中
注意
如果要在现有 pod 中添加或编辑健康检查,您必须编辑 pod DeploymentConfig
对象,或者在 web 控制台中使用 Developer 视角。您不能使用 CLI 添加或编辑现有 pod 的健康检查。
流程
为容器添加探测:
创建
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
- 指定
HTTP
或HTTPS
。如果未定义scheme
,则使用HTTP
方案。 - 13
- 指定容器正在侦听的端口。
- 14
- 可选:创建一个启动探测。
- 15
- 指定要执行的测试类型,这里是一个容器执行探测。
- 16
- 指定要在容器上执行的命令。
- 17
- 指定失败后测试探测的次数。
- 18
- 指定执行这个探测的秒数。默认值为
10
。这个值必须大于timeoutSeconds
。 - 19
- 指定一个秒数,在不活跃的时间超过这个值时探测被认为是失败的。默认值为
1
。这个值必须小于periodSeconds
。
注意如果
initialDelaySeconds
的值低于periodSeconds
值,则第一个就绪度探测会因计时器的问题在两个阶段间进行。timeoutSeconds
值必须小于periodSeconds
值。创建
Pod
对象:$ oc create -f <file-name>.yaml
验证健康检查 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