Pod健康检查
Pod的健康状态由两类探针来检查:LivenessProbe
和ReadinessProbe
。
1. 探针类型
1. livenessProbe(存活探针)
- 表明容器是否正在运行。
- 如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其
重启策略
的影响。 - 如果容器不提供存活探针,则默认状态为
Success
。
2. readinessProbe(就绪探针)
- 表明容器是否可以正常接受请求。
- 如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址。
- 初始延迟之前的就绪状态默认为
Failure
。 - 如果容器不提供就绪探针,则默认状态为
Success
。
2. 探针使用场景
- 如果容器异常可以自动崩溃,则不一定要使用探针,可以由Pod的
restartPolicy
执行重启操作。 存活探针
适用于希望容器探测失败后被杀死并重新启动,需要指定restartPolicy
为 Always 或 OnFailure。就绪探针
适用于希望Pod在不能正常接收流量的时候被剔除,并且在就绪探针探测成功后才接收流量。
探针
是kubelet
对容器执行定期的诊断,主要通过调用容器配置的四类Handler
实现:
Handler的类型:
ExecAction
:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。TCPSocketAction
:对指定端口上的容器的 IP 地址进行 TCP 检查。如果端口打开,则诊断被认为是成功的。HTTPGetAction
:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200 且小于 400,则诊断被认为是成功的。GRPCAction
:调用GRPC接口来判断服务是否健康。 如果响应的状态是 “SERVING”,则认为诊断成功。
探测结果为以下三种之一:
成功
:容器通过了诊断。失败
:容器未通过诊断。未知
:诊断失败,因此不会采取任何行动。
3. 探针的配置
探针配置在pod的container结构体下,livenessProbe
和readinessProbe
参数基本一致。
3.1. 探针通用参数
常用的参数为timeoutSeconds
、periodSeconds
、periodSeconds
,即接口超时时间,重试频率,重试次数三个值。
initialDelaySeconds
:启动容器后首次进行健康检查的等待时间,单位为秒,默认值为0。timeoutSeconds
:健康检查接口超时响应的时间,默认为1秒,最小值为1秒。periodSeconds
:重试的频率,默认值为10秒,即10秒重试一次,最小值是1秒,建议可以设置为3-5秒。failureThreshold
:失败重试的次数,默认值为3,最小值为1。successThreshold
:最小探测成功次数,默认值为1,一般不设置。
除了以上的通用参数外,livenessProbe
和readinessProbe
参数基本一致。以下以readinessProbe
为例说明探针的使用方式。
3.2. ReadinessProbe三种实现方式
3.2.1. HTTPGetAction
通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200且小于等于400,则认为容器健康。
1 | apiVersion: v1 |
3.2.2. TCPSocketAction
通过容器IP地址和端口号执行TCP检查,如果能够建立TCP连接,则表明容器健康。
1 | apiVersion: v1 |
3.2.3. ExecAction
在一个容器内部执行一个命令,如果该命令状态返回值为0,则表明容器健康。
1 | apiVersion: v1 |
4. 探针相关源码
探针配置在pod的container结构体下:
1 | // 存活探针 |
4.1. Probe源码
1 | type Probe struct { |
4.2. ProbeHandler源码
1 | // ProbeHandler defines a specific action that should be taken in a probe. |
4.3. ProbeAction
4.3.1. HTTPGetAction
1 | // HTTPHeader describes a custom header to be used in HTTP probes |
4.3.2. TCPSocketAction
1 | // TCPSocketAction describes an action based on opening a socket |
4.3.3. ExecAction
1 | // ExecAction describes a "run in container" action. |
4.3.4. GRPCAction
1 | type GRPCAction struct { |
参考文章:
赞赏一下