k8s提供三种探测方式:
启动探测: startup probe
存活探测: liveness probe 探测pod的状态
就绪探测: readiness probe 探测容器里应用的状态
存活探测(liveness probe)和就绪探测(readiness )是并行探测的,不分前后顺序
目前启动探针(start probe)、存活探针(liveness probe)、就绪探针(readiness probe)都支持以下三种探针策略:
- exec: 在容器中执行指定的命令,如果执行成功,退出码为0则探测成功
2.TCPSocket:通过容器的IP地址和端口号执行TCP检查,如果能建立TCP链接,则表明容器健康
3.HTTPGet: 通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200姐小于400,则认为容器健康
探针探测结果有以下值:
1.success: 表示通过检测
2.failure: 表示未通过检测
3.unkonwn:表示检测没有正常进行
pod探针的相关属性:
initialDelaySeconds:容器启动后多久开始探测,单位是秒,默认是0秒
periodseconds:探测的时间间隔,单位是秒,默认是10秒,最小值是1秒
timeoutseconds: 执行探测请求后,等待响应的超时时间,默认是1秒
succseeThreshold: 连续探测几次成,才认为探测成功,默认为1,在存活探针(liveness probe)中必须为1,最小值为1.
failureThreshold:探测失败的重试次数,重试一定次数后将认为失败,在就绪探针中(readiness probe),pod会被标记为就绪,默认为3秒,最小值为1。
两种探针的区别:
readiness probe就绪探针和livenessprobe存活探针可以使用相同的探针方式,只是对pod的处置方式不同
readiness probe 就绪探针 当检测失败后,将pod 的IP:prot 从对应的 代理(endpoint)列表中删除
livenessprobe存活探针 当检测失败后,将杀死容器并根据pod的重启策略来决定做出对对应的决策
启动探测startprobe案例:
exec模式:
apiVersion: v1
kind: Pod
metadata:
name: tomcat
namespace: tomcat
labels:
tomcat: v1
spec:
containers:
- name: tomcat
image: tomcat:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
startupProbe:
exec:
command:
- "/bin/sh"
- "-c"
- "ps aux | grep tomcat | grep -v grep" # 添加过滤条件来排除 grep 命令本身
initialDelaySeconds: 10 # 容器启动后10秒开始探测
periodSeconds: 10 #探测的间隔时间是10秒
timeoutSeconds: 5 #探针执行检测请求后,等待响应的超时时间
successThreshold: 1 #成功1次就算探测成功
failureThreshold: 3 #探测失败3次就算失败
备注:第一次失败多久会重启
initialDelaySecinds+(periodSeconds+timeoutseconds)*failureThreshold
10+(10+5)*3=55
tcpsocket模式:
apiVersion: v1
kind: Pod
metadata:
name: tomcat
namespace: tomcat
labels:
tomcat: v1
spec:
containers:
- name: tomcat
image: tomcat:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
startupProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 10 # 容器启动后10秒开始探测
periodSeconds: 10 #探测的间隔时间是10秒
timeoutSeconds: 5 #探针执行检测请求后,等待响应的超时时间
successThreshold: 1 #成功1次就算探测成功
failureThreshold: 3 #探测失败3次就算失败
httpGet模式:
apiVersion: v1
kind: Pod
metadata:
name: tomcat
namespace: tomcat
labels:
tomcat: v1
spec:
containers:
- name: tomcat
image: tomcat:8.5-jre8-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
startupProbe:
httpGet:
port: 8080
path: /
initialDelaySeconds: 10 # 容器启动后10秒开始探测
periodSeconds: 10 #探测的间隔时间是10秒
timeoutSeconds: 5 #探针执行检测请求后,等待响应的超时时间
successThreshold: 1 #成功1次就算探测成功
failureThreshold: 3 #探测失败3次就算失败