正文如下👇

存活探测(Liveness Probe)用于判断 容器中的应用是否仍然存活并正常运行。通过定义合理的探测规则,可以显著提升 Pod 的稳定性、可用性和自愈能力。
本文将围绕 Kubernetes(K8s)中的存活探测 进行系统讲解,并结合大量示例,帮助你在实际生产环境中正确使用 Liveness Probe。
Kubernetes 存活探测是一种用于判断 容器是否仍在正常运行 的机制。
当存活探测失败时,Kubernetes 会认为该容器处于异常状态,并 自动重启容器,以恢复服务。
Liveness Probe 通常用于检测以下问题:
存活探测可以通过以下方式实现:
当应用停止响应时,Kubernetes 可以主动介入并重启容器,从而提高系统整体的可靠性。
在 Kubernetes 中,kubelet 负责执行存活探测,并根据探测结果决定是否重启容器。
restartPolicy 杀掉并重启容器当 Pod 看起来“还在运行”,但 应用实际上已经无法正常工作 时,就非常适合使用 Liveness Probe。
例如:
这种情况下,容器不会自动退出,但已经无法对外提供服务,存活探测可以帮助 Kubernetes 自动恢复。
如果应用在出现致命错误时 会主动退出进程,那么 kubelet 会根据 restartPolicy 自动重启容器,此时并不一定需要额外配置 Liveness Probe。
例如 NGINX:
Kubernetes 支持三种存活探测方式,适用于不同类型的应用场景:
向指定的 HTTP 接口发送请求:
适用于 Web 服务。
尝试连接指定端口:
适用于无 HTTP 接口的服务,如数据库、中间件。
在容器内执行命令:
适用于需要自定义检测逻辑的场景。
Kubernetes 一共提供了三种探测:
本文重点介绍存活探测,但你也需要理解另外两种。
用于判断应用 是否已准备好接收流量。
适用于以下场景:
用于判断 应用是否已完成启动。
配置 Startup Probe 后:
非常适合:
Kubernetes 中的探测由 kubelet 负责执行。
应用需要支持以下探测处理方式之一:
每次探测结果分为三种:
Liveness Probe 与 Readiness Probe 的区别:
探测类型 | 失败后的行为 |
|---|---|
Liveness | 重启容器 |
Readiness | 停止接收流量,不重启 |
一个常见的设计是:
二者结合使用,可以显著提升系统稳定性。
存活探测在 Pod YAML 中通过 livenessProbe 定义。
apiVersion: v1kind: Podmetadata: name: example-podspec: containers: - name: example-container image: myapp:latest livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 3 periodSeconds: 5含义说明:
initialDelaySeconds:容器启动后延迟多久开始探测periodSeconds:每隔多久执行一次探测示例:Exec 探测
livenessProbe: exec: command: ["cat", "/tmp/healthy"] initialDelaySeconds: 5 periodSeconds: 10initialDelaySeconds:首次探测延迟periodSeconds:探测周期timeoutSeconds:单次探测超时时间successThreshold:成功次数阈值failureThreshold:失败次数阈值在配置前,应充分了解应用的 启动时间和运行特性。
可以通过以下方式检查:
1、查看 Pod 事件
kubectl describe pod <pod-name>2、查看容器日志
kubectl logs <pod-name>3、查看pod状态
kubectl get pods4、手动访问探测接口
curl http://<pod-ip>:<port>/health解决方案:
initialDelaySeconds解决方案:
解决方案:
timeoutSeconds合理使用 Liveness Probe、Readiness Probe 和 Startup Probe,可以显著提升 Pod 的稳定性和可用性。
关键不在于“是否配置探测”,而在于:
是否理解应用本身,并为其设计合适的探测策略。
只有贴合业务特性的探测配置,才能真正发挥 Kubernetes 自愈能力的价值。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。