K8S健康检测类型与方式

295 阅读3分钟

Kubernetes(k8s)的健康检测机制主要通过探针(Probes) 来实现,用于监控容器内应用的健康状态,确保应用能够正常运行并及时恢复故障。Kubernetes 提供了三种类型的探针:存活探针(Liveness Probe)就绪探针(Readiness Probe)启动探针(Startup Probe)


一、探针的作用与类型

1. 存活探针(Liveness Probe)

  • 目的:检测容器是否仍在正常运行。如果探测失败,Kubernetes 会认为容器处于不健康状态并重启容器
  • 适用场景:应用可能因死锁、内存泄漏等导致进程存在但无法提供服务的情况。
  • 示例配置
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15  # 容器启动后等待15秒开始探测
      periodSeconds: 10        # 每10秒探测一次
      timeoutSeconds: 1        # 探测超时时间1秒
      failureThreshold: 3      # 连续3次失败后重启容器
      successThreshold: 1      # 连续1次成功视为探测通过
      
    

2. 就绪探针(Readiness Probe)

  • 目的:检测容器是否已准备好接收流量。如果探测失败,Kubernetes 会将该容器从 Service 的 Endpoints 中移除,停止向其发送请求。
  • 适用场景:应用启动时需要加载大量数据或依赖外部服务,暂时无法处理请求。
  • 示例配置
    readinessProbe:
      exec:
        command:
        - sh
        - -c
        - "curl -s http://localhost:8080/ready | grep OK"
      initialDelaySeconds: 5   # 容器启动后等待5秒开始探测
      periodSeconds: 5         # 每5秒探测一次
      timeoutSeconds: 1        # 探测超时时间1秒
      failureThreshold: 3      # 连续3次失败后重启容器
      successThreshold: 1      # 连续1次成功视为探测通过
    

3. 启动探针(Startup Probe)

  • 目的:用于处理启动时间较长的容器。在启动探针成功之前,其他探针(Liveness/Readiness)不会生效。
  • 适用场景:旧版应用或 Java 应用启动耗时较长,需要避免存活探针在启动过程中误判。
  • 示例配置
    startupProbe:
      tcpSocket:
        port: 8080
      failureThreshold: 30  # 允许最多检测30次
      periodSeconds: 5      # 每5秒检测一次
    

二、探测方式

所有探针支持以下三种检测机制:

  1. HTTP GET
    向容器指定端口和路径发送 HTTP 请求,响应状态码为 2xx3xx 表示成功。

    httpGet:
      path: /health
      port: 80
    
  2. Exec
    在容器内执行自定义命令,返回值为 0 表示成功。

    exec:
      command:
      - cat
      - /app/healthy
    
  3. TCP Socket
    尝试与容器的指定端口建立 TCP 连接,连接成功即通过检测。

    tcpSocket:
      port: 3306
    

三、关键参数

  • initialDelaySeconds:容器启动后等待多久开始探测(默认 0)。
  • periodSeconds:探测间隔时间(默认 10)。
  • timeoutSeconds:探测超时时间(默认 1)。
  • successThreshold:连续成功次数视为探测通过(默认 1)。
  • failureThreshold:连续失败次数视为探测失败(默认 3)。

四、最佳实践

  1. 合理选择探针类型

    • 使用 Liveness Probe 处理不可恢复的故障(如死锁)。
    • 使用 Readiness Probe 处理临时不可用(如依赖服务未就绪)。
    • 对启动慢的应用使用 Startup Probe
  2. 避免过度依赖存活探针
    频繁重启可能导致问题恶化,需结合日志分析根本原因。

  3. 设置合理的超时和阈值
    例如,对高延迟应用调大 timeoutSecondsfailureThreshold

  4. 长时任务的特殊处理
    对批处理任务或单次任务,可能不需要存活探针。


五、总结

Kubernetes 的健康检测通过探针机制保障了应用的可靠性和自愈能力。合理配置探针可以:

  • 自动重启故障容器(Liveness Probe)。
  • 避免将流量路由到未就绪的实例(Readiness Probe)。
  • 兼容慢启动应用(Startup Probe)。

通过结合日志监控和告警系统,能进一步提升集群的运维效率。