探针是由每个Node上的kubelet定期执行的诊断
(这里复习下,每个Node上有一个kubelet和kube-proxy,kubelet用于管理pod等等组件
)
通过kubelet调用container实现的handler来执行诊断,有三种类型的handler:
- cmd.如果命令以0执行完毕视为成功
- tcp.端口打开视为成功
- httpget.响应>=200并且小于400视为成功
每个探针有3个可能的结果:
- success
- failure
- unknown:诊断失败,不做行动
可以选择性的执行三种类型的探针:
-
livenessProbe:反应容器是否在运行。如果探针失败,kubelet杀死容器,容器受restart policy影响。
(复习下restart policy。restartpolicy在podspec中,有always/onfailure/never,默认值是always。三种控制器job/replicationController/daemonset有对应的podTemplate,replicationController是唯一符合always的。建议创建控制器,让控制强创建pod,而不是自行创建pod) -
readinessProbe:反应容器是否准备好接受请求。如果探针失败,endpoints控制器从所有匹配该pod的service的endpoints中移除该pod ip。在初始delay前探针默认状态是failure。
-
startupprobe:反应容器中应用是否开启。直到该探针成功,其他探针才会生效。如果探针失败,kubelet杀死该容器。
When should you use a liveness probe?
如果你的容器遇到问题或者变得不健康能自己crash,那么不需要liveness探针;kubelet会自动根据restartPolicy执行正确的行动。
When should you use a readiness probe?
如果你想仅在探针成功时才开始发送流量到pod,指定readiness探针。readiness探针代表探针成功后pod才会开始接收流量。如果你的容器需要加载大量数据/配置文件/启动期间合并,指定readiness探针。