本文已收录在Github关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W技术追随者
  • 🔧 大厂分布式系统/数据中台实战专家
  • 🏆 主导交易系统百万级流量调优 & 车联网平台架构
  • 🧠 AIGC应用开发先行者 | 区块链落地实践者
  • 🌍 以技术驱动创新,我们的征途是改变世界!
  • 👉 实战干货:编程严选网

没有k8s前,咋进行应用的健康检查?k8s的livenessProbe和readinessProbe提供的几种探测机制,是否满足你的需求?

Kubernetes 出现之前,应用健康检查主要依赖 操作系统进程管理器、负载均衡器、监控系统和运维脚本。本质是 多层健康检查机制叠加,而 Kubernetes 把这些能力 统一收敛到 Pod 层的 Probe 机制

1 没有 Kubernetes 时如何做健康检查

传统系统通常有 四层健康检查体系

1.1 进程级健康检查(Process Supervisor)

最基础方式 监控进程是否存在

常见工具:

  • systemd
  • supervisord
  • Monit

示例:

systemctl status nginx

如果进程退出:

Restart=always

自动拉起。

优点:

  • 简单
  • 自动重启

缺点:

只能检测:

进程是否存在

无法检测:

应用逻辑是否正常

例如:

  • 线程死锁
  • 内存泄漏
  • 服务卡死

进程仍然存在,但服务不可用。

1.2 端口探测(TCP Check)

很多负载均衡器会做 TCP层健康检查

例如:

  • HAProxy
  • Nginx
  • Keepalived

例如:

check port 8080

只要 TCP 能建立连接:

认为服务正常

优点:

实现简单。

缺点:

无法检测:

业务是否正常

例如:

端口开着
接口挂了

1.3 HTTP健康检查(应用层)

很多 Web 服务会提供:

/health
/healthz
/status
/ping

负载均衡器会周期访问:

GET /health

例如:

200 OK

表示健康。

这是 最接近 Kubernetes Probe 的方式

常见实现:

如 Spring Boot:

/actuator/health

返回:

{
 "status": "UP"
}

如果数据库异常:

{
 "status": "DOWN"
}

1.4 监控系统检测

监控系统也能发现应用异常:

例如:

  • Prometheus
  • Zabbix

检测指标:

  • QPS
  • error rate
  • latency

如果异常:

报警

但通常:

不会自动恢复

需要人工干预。

2 Kubernetes 的改进

Kubernetes 把这些能力统一进 Pod Probe 机制

核心思想:

平台负责健康检查
平台负责自动恢复

Kubernetes Probe 分三类:

Probe 作用
livenessProbe 判断容器是否需要重启
readinessProbe 判断是否接入流量
startupProbe 判断启动是否完成

3 livenessProbe 与传统方式对比

livenessProbe 解决应用假死。如:

  • Java线程死锁
  • 内存耗尽
  • HTTP服务卡死

示例:

livenessProbe:
  httpGet:
    path: /health
    port: 8080

如果返回失败:

kubelet restart container

相当于自动执行:

kill + restart

4 readinessProbe 的核心价值

readinessProbe 是 Kubernetes 最重要的设计之一

它解决传统架构中一个难题:

服务启动了
但还没准备好

例如:

应用启动流程:

1 JVM启动
2 Spring启动
3 初始化缓存
4 建立数据库连接

在步骤 1~3 时:

服务已经监听端口

如果流量进入:

请求失败

readinessProbe 可以控制:

Service 是否把流量导入该 Pod

如果失败:

Pod 不进入负载均衡

5 Probe 的三种检测方式

Kubernetes 提供三种探测机制。

1 Exec Probe

执行容器内部命令。

示例:

exec:
  command:
  - cat
  - /tmp/healthy

适合:

脚本检测

2 HTTP Probe(最常用)

httpGet:
  path: /healthz
  port: 8080

适合:

Web服务
微服务
API

3 TCP Probe

tcpSocket:
  port: 8080

适合:

数据库
MQ
TCP服务

6 是否满足生产需求?

答案是:

绝大多数场景完全足够。

原因:

Kubernetes Probe 支持:

  • HTTP
  • TCP
  • Exec

覆盖:

90% 应用健康检测

例如:

应用 检测方式
Web API HTTP
MySQL TCP
Redis TCP
批处理任务 Exec

7 最佳实践

在大型系统中通常这样设计。

readinessProbe

检测:

依赖是否准备好

例如:

  • DB连接
  • Redis
  • 配置中心

返回:

200 OK

livenessProbe

检测:

应用线程是否卡死

例如:

线程池状态
heap memory

如果异常:

触发容器重启

8 总结

Kubernetes设计其实是把:

监控
负载均衡
进程管理

统一进 平台层自治系统

传统架构:

应用
↓
监控报警
↓
人工处理

Kubernetes:

应用
↓
Probe检测
↓
自动恢复

这也是 Kubernetes 自愈能力(Self-Healing) 核心来源。


Kubernetes Probe 还有一个非常关键的能力:

配合滚动发布(Rolling Update)实现零停机部署。

这背后涉及:

  • Deployment
  • readinessProbe
  • Endpoint 更新机制
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐