Kubernetes 对集群中 Pod 和容器的健康状态监控与检测主要通过内置的探针机制和相关控制器实现,确保应用在出现异常时能及时被发现并自动恢复。以下是具体的实现方式和细节:

一、核心检测机制:探针(Probe)

Kubernetes 为容器提供了三种探针,通过在容器内执行特定检查来判断其健康状态,探针的配置需在 Pod 的 YAML 定义中指定。

1. 存活探针(Liveness Probe)
  • 作用:检测容器是否 “存活”,若失败,kubelet 会杀死容器并根据重启策略(restartPolicy)重启容器。
  • 适用场景:解决容器 “假死”(如进程挂起但未退出)的问题。
  • 检测方式
    • exec:在容器内执行命令,返回码为 0 则成功。
      示例:livenessProbe: { exec: { command: ["cat", "/tmp/healthy"] }, initialDelaySeconds: 5, periodSeconds: 5 }
    • httpGet:向容器的指定端口和路径发送 HTTP 请求,状态码为 200-399 则成功。
      示例:livenessProbe: { httpGet: { path: "/healthz", port: 8080 }, initialDelaySeconds: 3, periodSeconds: 3 }
    • tcpSocket:与容器的指定端口建立 TCP 连接,连接成功则探测成功。
2. 就绪探针(Readiness Probe)
  • 作用:检测容器是否 “就绪”(可接收请求),若失败,kubelet 会将 Pod 从服务(Service)的端点列表中移除,直到探测成功。
  • 适用场景:避免将请求发送给未初始化完成的容器(如加载配置、连接数据库的过程)。
  • 检测方式:与存活探针相同(exec/httpGet/tcpSocket),但结果影响的是 Pod 是否被纳入服务负载均衡。
3. 启动探针(Startup Probe)
  • 作用:检测容器内应用是否 “启动完成”,仅在启动探针成功后,存活探针和就绪探针才会生效。
  • 适用场景:应对启动时间长的应用(如大型 JVM 服务),避免因启动慢被存活探针误判为失败。
  • 检测方式:与前两种探针相同,需设置 failureThreshold 和 periodSeconds 来覆盖足够长的启动时间。

二、探针的核心参数

所有探针都支持以下参数,用于控制检测频率和阈值:

  • initialDelaySeconds:容器启动后延迟多久开始第一次探测(默认 0 秒)。
  • periodSeconds:探测的间隔时间(默认 10 秒)。
  • timeoutSeconds:探测超时时间(默认 1 秒,超时视为失败)。
  • successThreshold:连续多少次探测成功后,认为状态恢复(默认 1 次)。
  • failureThreshold:连续多少次探测失败后,判定为状态异常(默认 3 次)。

三、Pod 状态的整体监控

除了容器级别的探针,Kubernetes 还通过 Pod 的 status 字段反映整体状态,常见状态包括:

  • Pending:Pod 已被调度,但容器未全部启动(如镜像拉取中)。
  • Running:所有容器均已启动,至少一个容器在运行。
  • Succeeded:所有容器正常退出且不会重启(适用于一次性任务)。
  • Failed:至少一个容器异常退出且退出码非 0。
  • Unknown:kubelet 无法与 API Server 通信,无法获取状态。

这些状态由 kubelet 实时更新,并通过 API Server 暴露给用户(可通过 kubectl get pods 查看)。

四、扩展监控工具

Kubernetes 内置机制主要针对基础健康检测,若需更全面的监控(如资源使用率、业务指标),需结合外部工具:

Metrics Server:收集节点和 Pod 的资源指标(CPU、内存),支持 kubectl top pods/nodes 命令查询。

Prometheus + Grafana:通过自定义指标(如业务接口成功率、数据库连接数)监控应用健康,配合 AlertManager 实现告警。

kube-state-metrics:收集 Kubernetes 资源对象(如 Pod、Deployment)的状态指标(如 Pod 重启次数、副本就绪数)。

五、总结

Kubernetes 通过存活探针保障容器的存活状态(自动重启异常容器),通过就绪探针保障服务可用性(避免请求发送到未就绪容器),通过启动探针适配慢启动应用,再结合 Pod 状态和外部监控工具,形成完整的健康监控体系。这些机制共同确保了集群中应用的高可用性和稳定性。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐