K8S集群中Pod健康检查探针异常排查思路

K8S集群中Pod健康检查探针异常排查思路

1.为什么要对Pod资源配置健康检查

Pod资源中容器都是提供具体的应用程序服务的,如果没有健康检查机制,那么K8S集群就不知道Pod资源的运行状态,只要Pod处于Running状态,K8S就会认为里面的容器以及服务都是健康的,如果是这种现象,那么K8S集群的故障自愈就起不到作用了。

如果没有健康检查机制,只要容器启动不报错,那么Pod就会一直处于Running状态,只要处于Running状态并且Ready也满足,那么该Pod就会对外提供服务,但是实际上,容器启动成功后,里面部署的服务不一定也能启动,比如JAVA类的应用程序,启动成功都在1分钟左右。

并且如果没有配置健康检查机制,当程序故障后,也不会自愈,用户请求的可能就是异常的Pod,对于用户来说是不友好的。

基于上述问题,必须要配置Pod资源的健康检查机制。

健康检查探针分为两种:

  • 存活性检测(LivenessProbe)
    • 存活性探测指的是检测容器是否处于启动成功的状态,主要用于是否决定重启容器。
  • 就绪性检测(ReadinessProbe)
    • 就绪性检测是指在容器中的服务是否处于可以提供服务的状态,主要来决定容器中的服务是否可用。

当经过这两种健康检查检测后,容器的状态才会成为Ready,并且就绪性检测会每隔一段时间就会检测。

# kubectl get pod

NAME                           READY   STATUS    RESTARTS   AGE
know-system-6f469df75d-7lgp2   1/1     Running   0          5h27m

当Ready的值为1/1时,才能对外提供服务。

两种探针的方式都相同,分别有HTTPGet方式、TcpSocket方式、Exec方式三种。

2.Pod资源健康检查异常排查思路

1)首先查看Pod的状态,应该会看到Pod会一直处于重建的状态。

2)查看Pod资源运行的详细事件信息,可以获得关键线索。

3)查看容器的运行日志。

常见的错误如下所示:

Killing container with id docker://jiangxlrepo:Container failed probe.. Container will bekilledandrecreated. liveness

解决方法:

出现该问题的原因可能是没有设置探针的延迟时间导致的,如果只配置了健康检查的方式,没有配置当Pod启动多长时间后再监测,可能就会出现此问题。

        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 60

猜你喜欢

转载自blog.csdn.net/weixin_44953658/article/details/125802812