Pod 的健康检查方式
在 Kubernetes 中,Pod 的健康检查主要通过 三种探针(Probes) 实现,它们共同确保容器在生命周期不同阶段的健康状态。以下是详细说明:
一、核心健康检查探针
1. Liveness Probe(存活探针)
- 作用:检测容器是否处于 运行状态。若失败,kubelet 会 重启容器。
- 适用场景:处理死锁、长时间阻塞等导致容器无法正常工作的场景。
- 检查方式:
- ExecAction:在容器内执行命令,以退出码
0
为成功。
livenessProbe: exec: command: ["sh", "-c", "check-alive-script.sh"]
- HTTPGetAction:向容器 IP 发送 HTTP GET 请求,状态码
2xx/3xx
为成功。
livenessProbe: httpGet: path: /healthz port: 8080
- TCPSocketAction:尝试连接容器的 TCP 端口,连接成功即健康。
livenessProbe: tcpSocket: port: 3306
- ExecAction:在容器内执行命令,以退出码
2. Readiness Probe(就绪探针)
- 作用:检测容器是否 准备好接收流量。若失败,Pod 会从 Service 的 Endpoints 中移除。
- 适用场景:应用启动依赖初始化(如加载大数据、连接外部服务),避免过早接收请求。
- 配置方式:与 Liveness Probe 相同(支持 Exec、HTTP、TCP),但语义不同。
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5 # 容器启动后等待 5 秒开始探测
periodSeconds: 10 # 每 10 秒探测一次
3. Startup Probe(启动探针)
- 作用:检测 长时间启动的应用 是否完成初始化。成功后,其他探针才会生效。
- 适用场景:Java 应用、旧系统等启动缓慢的服务,避免被 Liveness Probe 误杀。
startupProbe:
httpGet:
path: /init-status
port: 8080
failureThreshold: 30 # 允许最多 30 次失败(30*10s=5分钟)
periodSeconds: 10
二、关键配置参数
所有探针共享以下参数(合理配置避免误判):
initialDelaySeconds
:容器启动后等待多久开始探测(避免立即检查)。periodSeconds
:探测间隔时间(默认 10 秒)。timeoutSeconds
:探测超时时间(默认 1 秒)。successThreshold
:连续成功次数视为成功(默认 1 次)。failureThreshold
:连续失败次数视为最终失败(默认 3 次)。
三、使用建议
-
Liveness 与 Readiness 分离:
- Liveness 用于恢复不可用容器,检查条件应宽松(避免频繁重启)。
- Readiness 用于流量控制,检查条件需严格(如依赖服务是否就绪)。
-
Startup Probe 的优先级:
- 在启动阶段,只有 Startup Probe 生效,其他探针暂停,直到它成功。
-
避免过度检查:
- 高频探测(如
periodSeconds: 1
)可能增加应用负载。 - HTTP 路径
/healthz
应轻量,避免复杂逻辑。
- 高频探测(如
四、示例场景
场景 1:Web 服务健康检查
containers:
- name: web
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 80
initialDelaySeconds: 5
场景 2:数据库启动检查
startupProbe:
tcpSocket:
port: 3306
failureThreshold: 15
periodSeconds: 10
# 允许最多 15*10=150 秒完成启动
五、排查工具
- 查看探针状态:
kubectl describe pod <pod-name> # 查看 Events 中的 Probe 错误
- 日志分析:
- 检查容器日志,确认应用是否因健康检查失败被重启。
通过合理配置探针,可以显著提升 Kubernetes 应用的可靠性和自愈能力。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!