k8s之容器探针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s之容器探针相关的知识,希望对你有一定的参考价值。

参考技术A 探针是由 kubelet 对容器执行的定期诊断。

存活探针,检测容器是否正在运行。如果检测失败, kubelet 会杀死容器,再根据容器的重启策略决定未来。如果容器不提供存活探针,则默认状态为 Success 。

就绪探针,检测容器是否准备好提供服务。如果检测失败,端口控制器将从 Service 列表移除 Pod 的 IP 地址。初始延迟之前的状态默认为 Failure 。如果容器不提供就绪探针,则默认状态为 Success 。

启动探针,检测容器中的应用是否已经启动。如果提供启动探针,则所有其它探针都会被禁用,直到启动探针成功为止。如果检测失败, kubelet 会杀死容器,再根据容器的重启策略进行重启。如果容器不提供启动探针,则默认状态为 Success 。

容器内执行命令,如果命令退出时返回码为 0 则认为诊断成功。

对容器的 IP 地址上指定端口和路径执行 GET 请求。如果响应状态码大于等于 200 且小于 400 ,则诊断被认为成功。

对容器的 IP 地址上指定端口执行 TCP 检查。如果端口打开,则诊断被认为成功。如果远程系统在打开连接后立即将其关闭,这算作是健康的。

K8s的探针

参考技术A 探针是由kubelet对容器执行的定期诊断,要执行诊断,kubelet调用容器实现的Handler。

说句废话,pod的探针肯定不能给init容器执行探针,init容器执行之后就退出了,就算执行探针也是失败的。

ExecAction:在容器内执行指定命令。如果命令退出时返回码是0,则认为是诊断成功。

TCPSocketAction:对指定端口上的容器的IP地址进行TCP检查。如果端口打开,则诊断被认为是成功的。

HTTPGetAction:对指定的端口和路径上的容器的IP地址执行HIIP Get请求,如果响应的状态码大于等于200小于400,则诊断是成功的。

每次探测都将获得以下三种结果之一:

成功:容器通过诊断;

失败:容器未通过诊断;

未知:诊断失败,因此不会采取任何操作。

LivenessProbe:存活探针,指示容器是否正在运行,运行于整个pod的运行周期,直至pod被杀掉。如果存活探针探测失败,则kubelet会杀死容器,并且容器将受到器重启策略(restartPolicy)的影响,一般设置为Always,如果容器被杀掉,pod就会被一直重启。如果容器不提供存活探针,则默认状态为Success。

ReadinessProbe:指示容器是否准备好服务请求。如果就绪探测失败,端点控制器架构从与pod匹配的所有的Service的端点中删除Pod的IP地址。初始延迟之前的就绪状态为Failure。如果pod不提供就绪探针,则被默认为SUCCESS。

挂起(Pending):pod已被k8s接受,但是有一个或者多个容器镜像尚未创建,等待时间包括调度pod的时间和通过网络下载镜像的时间。

运行中(Running):该pod已经绑定到了一个节点上,pod中所有的容器都被创建,至少有一个容器正在运行,或者处于启动或重启状态。

成功(Succeed):pod中所有的容器都被成功终止,并且不再被重启。一般是Job、CronJob

失败(Failed):pod中至少有一个容器是因为失败终止,即容器是以非0状态退出或者被系统终止。

未知(Unknown):因为某些原因无法获取pod的状态,通常是因为与pod所在主机通信失败。

以上是关于k8s之容器探针的主要内容,如果未能解决你的问题,请参考以下文章

K8s的探针

k8s-探针(四)

k8s之Pod健康检测

k8s实践16:kubernetes监测探针简单测试

k8s管理pod编写资源清单pod生命周期之探针init初始化容器Deployment和RS控制器

Kubernetes(k8s)之Pod生命周期