K8s 之前,我们是怎么保证服务不挂的?聊聊健康检查的四层体系
本文已收录在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 更新机制
更多推荐

所有评论(0)