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
- 1
- 2
- 3
- 4
当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
- 1
解决方法:
出现该问题的原因可能是没有设置探针的延迟时间导致的,如果只配置了健康检查的方式,没有配置当Pod启动多长时间后再监测,可能就会出现此问题。
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 60
- 1
- 2
- 3
- 4
- 5
文章来源: jiangxl.blog.csdn.net,作者:Jiangxl~,版权归原作者所有,如需转载,请联系作者。
原文链接:jiangxl.blog.csdn.net/article/details/125802812
- 点赞
- 收藏
- 关注作者
评论(0)