我们知道,当一个pod启动后,就会立即加入service的endpoint ip列表中,并开始接收到客户端的链接请求,

假若此时pod中的容器的业务进程还没有初始化完毕,那么这些客户端链接请求就会失败,为了解决这个问题,kubernetes提供了就绪探针来解决这个问题的。

在pod中的容器定义一个就绪探针,就绪探针周期性检查容器,

如果就绪探针检查失败了,说明该pod还未准备就绪,不能接受客户端链接,则该pod将从endpoint列表中移除,

pod被剔除了, service就不会把请求分发给该pod,

然后就绪探针继续检查,如果随后容器就绪,则再重新把pod加回endpoint列表。

kubernetes提供了3种探测容器的存活探针,如下:

httpGet:通过容器的IP、端口、路径发送http 请求,返回200-400范围内的状态码表示成功。

exec:在容器内执行shell命令,根据命令退出状态码是否为0进行判断,0表示健康,非0表示不健康。

TCPSocket:与容器的IP、端口建立TCP Socket链接,能建立则说明探测成功,不能建立则说明探测失败