Kubernetes探针生产环境实战指南
一、探针的本质:应用健康的智能体检系统
想象你的应用是一个高空走钢丝的演员,Kubernetes探针就像三位安全员:
- 启动探针:检查演员是否站稳(应用是否完成初始化)
- 就绪探针:确认演员准备好表演(应用能否处理请求)
- 存活探针:实时监测演员是否失足(应用是否崩溃)
二、三大探针的生存法则
探针类型 | 触发时机 | 失败后果 | 适用场景 | 生产配置示例 |
---|---|---|---|---|
启动探针 | 容器启动初期 | 阻止其他探针启动 | 慢启动应用(如Java) | initialDelaySeconds: 30 |
存活探针 | 整个生命周期 | 重启容器 | 死锁检测 | failureThreshold: 3 |
就绪探针 | 服务运行期间 | 从LB移除Pod | 流量切换 | periodSeconds: 5 |
三、生产级配置模板(含避坑指南)
1. Spring Boot应用配置
livenessProbe:httpGet:path: /actuator/health/livenessport: 8080initialDelaySeconds: 20 # 等待Spring启动periodSeconds: 10readinessProbe:httpGet:path: /actuator/health/readinessport: 8080initialDelaySeconds: 30 # 等待数据库连接failureThreshold: 6 # 允许短暂波动startupProbe:httpGet:path: /actuator/health/startupport: 8080failureThreshold: 30 # 最长等待 30*5=150秒periodSeconds: 5
避坑提示:切勿将存活探针指向高负载接口,可能引发雪崩效应
2. 数据库服务配置
readinessProbe:exec:command:- sh- -c- 'mysql -h 127.0.0.1 -u root -p${MYSQL_ROOT_PASSWORD} -e "SELECT 1"'initialDelaySeconds: 5
安全警告:避免在探针命令中暴露敏感信息
四、探针配置黄金七法则
1)启动顺序法则
启动探针 > 存活探针 > 就绪探针,避免启动期被误杀
2)超时时间公式
initialDelay + (period * failureThreshold)
> 最长启动时间
3)容错阈值设定
生产环境failureThreshold至少设为3次
4)探测端点隔离
专有健康检查接口(如/healthz
),与业务接口分离
5)压力测试法则
模拟探针高频访问(10次/秒),确保不影响业务性能
6)分级响应策略
HTTP状态码划分健康等级:
- 200:健康
- 429:过载(就绪探针失败)
7)跨环境适配
开发环境适当调大超时时间,生产环境严格校准
五、经典故障案例库
案例1:死亡循环
- 现象:Pod每分钟重启一次
- 根因:存活探针检查数据库连通性,而数据库尚未启动
- 解决:添加启动探针保护初始化阶段
案例2:流量黑洞
- 现象:服务监控正常但无流量
- 排查:就绪探针检查Redis连接,Redis故障导致所有Pod被摘除
- 修复:就绪探针与核心依赖解耦
案例3:心跳风暴
- 现象:CPU使用率周期性飙升
- 诊断:存活探针每秒调用高开销接口
- 优化:调整periodSeconds至10秒并添加缓存
六、高级调优技巧
1. 渐进式就绪(金丝雀发布)
readinessProbe:httpGet:path: /health?check_level=fullinitialDelaySeconds: 0periodSeconds: 2successThreshold: 3 # 连续3次成功才标记就绪
2. 动态调整探针
env:
- name: PROBE_INTERVALvalueFrom:configMapKeyRef:name: probe-configkey: intervalreadinessProbe:periodSeconds: $(PROBE_INTERVAL)
3. 混合探测模式
livenessProbe:httpGet: # 主检查path: /healthexec: # 备用检查command: ["pgrep", "java"]timeoutSeconds: 1
七、监控体系构建
1)探针状态监控
# 存活探针失败率
sum(rate(kubelet_prober_probe_total{probe_type="liveness", result="failed"}[5m]))
/
sum(rate(kubelet_prober_probe_total{probe_type="liveness"}[5m]))
> 0.1
2)容器重启风暴告警
sum(changes(kube_pod_container_status_restarts_total[1h])) by (pod) > 3
架构师箴言:探针不是银弹,而是精密的保险装置。配置不当的探针比没有探针更危险——可能引发级联故障。建议每月进行一次探针健康度审计,结合混沌工程验证系统韧性。记住:好的探针配置应该像优秀的伴舞,既保护应用安全,又不影响其表演节奏。