K8S 探针 readinessProbe、livenessProbe和startupProbe
介绍K8S 提供了3种探针readinessProbelivenessProbestartupProbe(这个1.17版本增加的)readinessProbe:指示容器是否准备好服务请求(是否启动完成并就绪)。绪探针初始延迟之前的就绪状态默认为Failure,待容器启动成功弹指指标探测结果为成功后,状态变更为 Success。如果未配置就绪探针,则默认状态为Success。只有状态为 Succes
介绍
K8S 提供了3种探针
readinessProbe
livenessProbe
startupProbe(这个1.17版本增加的)
readinessProbe:指示容器是否准备好服务请求(是否启动完成并就绪)。绪探针初始延迟之前的就绪状态默认为Failure,待容器启动成功弹指指标探测结果为成功后,状态变更为 Success。如果未配置就绪探针,则默认状态为Success。
只有状态为 Success ,才会被纳入 pod 所属 service 中,也就是 service 接收到请求后才有可能会被分发处理请求。
如果ReadinessProbe探针检测到失败,则Pod的状态被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的Endpoint。
livenessProbe:用于判断容器是否存活(running状态),如果LivenessProbe探针探测到容器不健康(你可以配置连续多少次失败才记为不健康),则 kubelet 会杀掉该容器,并根据容器的重启策略做相应的处理。如果未配置存活探针,则默认状态为Success。即探针返回的值永远是 Success。
startupProbe:判断容器内的应用程序是否已启动。如果配置了启动探测,在则在启动探针状态为 Succes 之前,其他所有探针都处于无效状态,直到它成功后其他探针才起作用。如果启动探测失败,kubelet 将杀死容器,容器将服从其重启策略。如果容器没有配置启动探测,则默认状态为 Success。
示例
存活探针 - HTTP协议
containers:
- name: xxx
image: xxx
# 存活检查
livenessProbe:
httpGet:
scheme: HTTP # 协议
path: /actuator/health # 路径
port: 8080 # 端口
initialDelaySeconds: 30 # 延迟探测时间(秒) 【 在k8s第一次探测前等待秒 】
periodSeconds: 10 # 执行探测频率(秒) 【 每隔秒执行一次 】
timeoutSeconds: 1 # 超时时间
successThreshold: 1 # 健康阀值
failureThreshold: 3 # 不健康阀值
存活探针 - TCP协议
containers:
- name: xxx
image: xxx
# 存活检查
livenessProbe:
tcpSocket: # TCP
port: 8090 # 端口
initialDelaySeconds: 50 # 延迟探测时间(秒) 【 在k8s第一次探测前等待秒 】
periodSeconds: 10 # 执行探测频率(秒) 【 每隔秒执行一次 】
timeoutSeconds: 1 # 超时时间
successThreshold: 1 # 健康阀值
failureThreshold: 3 # 不健康阀值
上面配置的意思是容器启动50s后,每10s检查一次,允许失败的次数是3次。如果失败次数超过3则会触发restartPolicy。
就绪探针
HTTP协议和TCP协议配置方法和存活探测相同(如上,这里只列出一个HTTP协议的)
containers:
- name: xxx
image: xxx
# 就绪检查
readinessProbe:
httpGet:
scheme: HTTP # 协议
path: /actuator/health # 路径
port: 8080 # 端口
initialDelaySeconds: 30 # 延迟探测时间(秒)【 在k8s第一次探测前等待秒 】
periodSeconds: 2 # 执行探测频率(秒) 【 每隔秒执行一次 】
timeoutSeconds: 1 # 超时时间
successThreshold: 1 # 健康阀值
failureThreshold: 3 # 不健康阀值
启动探针
startupProbe 脚本内容和 readinessProbe 相比,除了名字不同之外,其他配置和含义相同(脚本参考如上)。
注意
- 如果只配置了存活检查 ( livenessProbe ) 而没有配置就绪检查 ( readinessProbe ) ,则在滚动更新过程中可能会出现 502 Bad Gateway 错误。
- 不要将 startupProbe 和 readinessProbe 混淆。
- 通常将 startupProbe 和 livenessProbe 组合使用,livenessProbe 的时间是从 startupProbe 状态成功后开始计算。
(END)
更多推荐
所有评论(0)