如何将Go语言Liveness与Readiness Probe改写成长尾词进行健康检查探针实现?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1069个文字,预计阅读时间需要5分钟。
Kubernetes 的 livenessProbe 和 readinessProbe 本质上都是通过 HTTP GET 请求来检查服务的状态。只要你让 Go 服务在 HTTP server 上运行,并提供两个稳定、低开销、无副作用的 HTTP handler,就可以满足需求。无需涉及数据库查询或健康检查接口。
推荐直接复用 http.ServeMux 或主流路由库(如 chi、gorilla/mux),注册两个路径:
-
/healthz用于 liveness:只检查进程是否存活、监听端口是否就绪 -
/readyz用于 readiness:额外检查依赖(DB 连接、下游 API、本地缓存加载状态等)
不要把二者混用,也不要让 /healthz 返回 500 来表示“不健康”——K8s 默认把非 2xx/3xx 当失败,但 5xx 会触发重启循环,而进程明明活着。应统一返回 200 + 简洁 body,靠状态码区分生死。
Readiness probe 中 DB 连接检查怎么写才不拖垮服务
常见错误是每次 /readyz 请求都执行 db.Ping(),尤其当 DB 连接池空或网络抖动时,会卡住整个 probe 请求,导致 K8s 反复摘除实例,形成雪崩。
本文共计1069个文字,预计阅读时间需要5分钟。
Kubernetes 的 livenessProbe 和 readinessProbe 本质上都是通过 HTTP GET 请求来检查服务的状态。只要你让 Go 服务在 HTTP server 上运行,并提供两个稳定、低开销、无副作用的 HTTP handler,就可以满足需求。无需涉及数据库查询或健康检查接口。
推荐直接复用 http.ServeMux 或主流路由库(如 chi、gorilla/mux),注册两个路径:
-
/healthz用于 liveness:只检查进程是否存活、监听端口是否就绪 -
/readyz用于 readiness:额外检查依赖(DB 连接、下游 API、本地缓存加载状态等)
不要把二者混用,也不要让 /healthz 返回 500 来表示“不健康”——K8s 默认把非 2xx/3xx 当失败,但 5xx 会触发重启循环,而进程明明活着。应统一返回 200 + 简洁 body,靠状态码区分生死。
Readiness probe 中 DB 连接检查怎么写才不拖垮服务
常见错误是每次 /readyz 请求都执行 db.Ping(),尤其当 DB 连接池空或网络抖动时,会卡住整个 probe 请求,导致 K8s 反复摘除实例,形成雪崩。

