This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第 7 章 使用健康检查来监控应用程序的健康状态
在软件系统中,组件可能会变得不健康,原因可能源自连接暂时丢失、配置错误或外部依赖项相关问题等临时问题。OpenShift Container Platform 应用程序具有若干选项来探测和处理不健康的容器。
7.1. 了解健康检查 复制链接链接已复制到粘贴板!
健康检查使用就绪度和存活度健康检查的组合定期对正在运行的容器执行诊断。
您可以在包含要执行健康检查的容器的 pod 规格中包括一个或多个探测。
如果要在现有 pod 中添加或编辑健康检查,您必须编辑 pod DeploymentConfig
对象,或者在 web 控制台中使用 Developer 视角。您不能使用 CLI 添加或编辑现有 pod 的健康检查。
- 就绪度探测
就绪度探测(readiness probe)决定容器是否准备好接受服务请求。如果容器就绪度探测失败,kubelet 会从可用服务端点列表中移除 pod。
失败后,这个探测将继续检查 pod。如果 pod 可用,kubelet 会将 pod 添加到可用服务端点列表中。
- 存活度健康检查
存活度探测(liveness probe)决定容器是否仍然在运行。如果存活度探测因为死锁等情况而失败,kubelet 会终止容器。pod 会根据其重启策略响应。
例如,在一个
restartPolicy
为Always
或OnFailure
的 pod 上的存活度探测会终止并重启容器。
您可以使用以下任一类型的测试配置存活度和就绪度探测:
HTTP
GET
:在使用 HTTPGET
测试时,测试会使用 web hook 确定容器的健康状态。如果 HTTP 响应代码介于200
与399
之间,则测试可以成功。在初始化完成后,可以使用 HTTP
GET
测试应用程序返回的 HTTP 状态码。-
Container Command:在使用容器命令测试时,探测会在容器内执行命令。如果测试退出的状态为
0
,代表探测成功。 - TCP socket:当使用 TCP 套接字测试时,探测会尝试为容器打开一个套接字连接。只有在探测可以建立连接时,容器才被视为健康。对于在初始化完成前不会开始监听的应用程序,可以使用 TCP 套接字测试。
您可以配置几个字段来控制探测的行为:
-
initialDelaySeconds
:容器启动后经过这个时间(以秒为单位)后才可以调度探测。默认值为 0。 -
periodSeconds
:执行探测间的延迟时间(以秒为单位)。默认值为10
。 -
timeoutSeconds
:不活跃状态维持了这个时间(以秒为单位)后,探测超时,容器被认为已失败。默认值为1
。 -
successThreshold
:探测在失败后必须报告成功的次数,才会重置容器状态为成功。对于存活度探测,这个值必须是1
。默认值为1
。 failureThreshold
:这个探测允许失败的次数。默认值为 3。在指定的尝试后:- 对于存活度探测,容器被重启
对于就绪度探测,pod 标记为
Unready
注意timeoutSeconds
参数不影响容器命令探测的就绪度和存活度探测,因为 OpenShift Container Platform 对容器的 exec 调用不会超时。在容器命令探测中实施超时的一种方法是,使用exec-timeout
命令运行存活度或就绪度探测,如示例所示。
探测示例
以下是在对象规格中显示的不同探测的示例。
就绪度探测示例,它在 pod 规格中带有一个容器命令就绪度探测
带有容器命令测试的在 pod 规格中使用超时的存活度探测示例
在部署中使用 TCP 套接字测试的就绪度探测和存活度探测示例