K8s探针实战指南

Kubernetes探针实战指南


一、探针的本质:应用健康的智能体检系统

想象你的应用是一个高空走钢丝的演员,Kubernetes探针就像三位安全员:

  • 启动探针:检查演员是否站稳(应用是否完成初始化)
  • 就绪探针:确认演员准备好表演(应用能否处理请求)
  • 存活探针:实时监测演员是否失足(应用是否崩溃)

二、三大探针的生存法则

探针类型 触发时机 失败后果 适用场景 生产配置示例
启动探针 容器启动初期 阻止其他探针启动 慢启动应用(如Java) initialDelaySeconds: 30
存活探针 整个生命周期 重启容器 死锁检测 failureThreshold: 3
就绪探针 服务运行期间 从LB移除Pod 流量切换 periodSeconds: 5

三、生产级配置模板(含避坑指南)

1. Spring Boot应用配置
livenessProbe:
  httpGet:
    path: /actuator/health/liveness
    port: 8080
  initialDelaySeconds: 20  # 等待Spring启动
  periodSeconds: 10

readinessProbe:
  httpGet:
    path: /actuator/health/readiness
    port: 8080
  initialDelaySeconds: 30  # 等待数据库连接
  failureThreshold: 6      # 允许短暂波动

startupProbe:
  httpGet:
    path: /actuator/health/startup
    port: 8080
  failureThreshold: 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:过载(就绪探针失败)
  1. 跨环境适配
    开发环境适当调大超时时间,生产环境严格校准

五、经典故障案例库

案例1:死亡循环

  • 现象:Pod每分钟重启一次
  • 根因:存活探针检查数据库连通性,而数据库尚未启动
  • 解决:添加启动探针保护初始化阶段

案例2:流量黑洞

  • 现象:服务监控正常但无流量
  • 排查:就绪探针检查Redis连接,Redis故障导致所有Pod被摘除
  • 修复:就绪探针与核心依赖解耦

案例3:心跳风暴

  • 现象:CPU使用率周期性飙升
  • 诊断:存活探针每秒调用高开销接口
  • 优化:调整periodSeconds至10秒并添加缓存

六、高级调优技巧

1. 渐进式就绪(金丝雀发布)
readinessProbe:
  httpGet:
    path: /health?check_level=full
  initialDelaySeconds: 0
  periodSeconds: 2
  successThreshold: 3  # 连续3次成功才标记就绪
2. 动态调整探针
env:
- name: PROBE_INTERVAL
  valueFrom:
    configMapKeyRef:
      name: probe-config
      key: interval

readinessProbe:
  periodSeconds: $(PROBE_INTERVAL)
3. 混合探测模式
livenessProbe:
  httpGet:       # 主检查
    path: /health
  exec:          # 备用检查
    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
  1. 容器重启风暴告警
sum(changes(kube_pod_container_status_restarts_total[1h])) by (pod) > 3

架构师箴言:探针不是银弹,而是精密的保险装置。配置不当的探针比没有探针更危险——可能引发级联故障。建议每月进行一次探针健康度审计,结合混沌工程验证系统韧性。记住:好的探针配置应该像优秀的伴舞,既保护应用安全,又不影响其表演节奏。

posted on 2025-03-06 15:50  Leo-Yide  阅读(154)  评论(0)    收藏  举报