在Go中实现容器健康探针需提供HTTP接口,常用/healthz和/readyz分别处理存活与就绪检查,返回200表示正常,结合net/http或Gin框架可快速实现,Kubernetes通过配置livenessProbe和readinessProbe调用对应路径,确保服务状态准确判断。

在Go语言中实现容器健康探针,核心是提供一个可被Kubernetes或Docker等平台调用的HTTP接口,用于判断服务是否正常运行。通常使用HTTP GET请求来探测应用的/health或/ping路径,返回200状态码表示健康。
最简单的做法是启动一个HTTP服务,注册一个健康检查路由:
net/http包创建HTTP服务器/health路径处理函数示例代码:
package main
import (
"net/http"
"log"
)
func healthHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("OK"))
}
func main() {
http.HandleFunc("/health", healthHandler)
log.Println("Starting health server on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
Kubernetes支持两种探针:liveness(存活)和readiness(就绪)。你可以分别暴露不同路径:
立即学习“go语言免费学习笔记(深入)”;
/healthz:存活探针,用于判断是否需要重启容器/readyz:就绪探针,用于判断是否可以接收流量例如,就绪探针可以检查数据库连接、缓存依赖等:
var dbOK bool // 假设这是你的数据库连接状态
func readinessHandler(w http.ResponseWriter, r *http.Request) {
if dbOK {
w.WriteHeader(http.StatusOK)
w.Write([]byte("ready"))
} else {
http.Error(w, "not ready", http.StatusServiceUnavailable)
}
}
如果你使用Gin框架,集成更简洁:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/healthz", func(c *gin.Context) {
c.String(http.StatusOK, "alive")
})
r.GET("/readyz", func(c *gin.Context) {
// 检查依赖逻辑
c.String(http.StatusOK, "ready")
})
r.Run(":8080")
}
在Deployment中配置探针:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
readinessProbe:
httpGet:
path: /readyz
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
确保探针路径与Go服务中一致,并根据实际启动时间设置initialDelaySeconds。
基本上就这些。只要你的Go服务能响应HTTP健康检查,容器平台就能正确判断其状态。关键点是保持探针轻量,避免复杂逻辑影响探测效率。
以上就是如何在Golang中实现容器健康探针的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号