为什么需要探针?
如果没有探针,k8s无法知道应用是否还活着,只要pod还在运行,k8s则认为容器是健康的。但实际上,pod虽然运行了,但里面容器中的应用可能还没提供服务,那就需要做健康检查,健康检查就需要探针,常见的探针有如下几种:
(你创建了一个Pod,发现pod是running状态,而且处于ready状态,但是pod里面部署的容器想要访问的时候就还是访问不了,这是因为你的pod没有做健康检查,pod起来了,但是容器里面应用还没有就绪)
- httpGet:对容器的ip地址(指定的端口和路径)执行http get请求,如果探测器收到响应,并且响应码是2xx,则认为探测成功。如果服务器没有响应或者返回错误响,应码则说明探测失败,容器将重启。
- tcpSocket : 探针与容器指定端口建立tcp连接,如果连接建立则探测成功,否则探测失败容器重启。
- exec:在容器内执行任意命令,并检查命令退出状态码,如果状态码为0,则探测成功,否则探测失败容器重启
下面的例子就是健康检查失败了,需要重启
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 30
periodSeconds: 30
failureThreshold: 6
timeoutSeconds: 3
上面说的探针是用在哪的呢?
用在存活性探测和就绪性探测中的:
1.LivenessProbe(存活探测):
探测Pod里的容器是否启动成功,
如果Pod里的容器启动成功那Pod的状态就是Running
2.ReadinessProbe(就绪探测):
Pod是Running的前提下,
看Pod里容器部署的应用是否就绪,是否可以对外提供服务
,如果应用
正常,可以接受客户端的请求,则READY是就绪的,如下:
LivenessProbe和ReadinessProbe区别:
- LivenessProbe决定是否重启容器
- ReadinessProbe主要来确定容器是否已经就绪: 只有当Pod里的容器部署的应用都处于就绪状态,也就是pod的Ready为true(1/1)时,才会将请求转发给容器。
在存活性探测的时候要想要设置初始化延迟。
hhttpGettpGe