我应该如何在 Kubernetes 中检查我的 go 服务的健康状况?

How should I check the health of my go service in Kubernetes?

我是 运行 在 Kubernetes 的 pod 中用 go 编写的服务。该服务不公开 HTTP 接口;它正在处理队列中的工作。

我可以:

在 go/Kubernetes 中是否有通用/惯用的方法?

我不会考虑将过程 运行 检测到 pod 中以专注于问题的便利性。

我会避免在容器内创建另一个进程来暴露数据,或者修改当前进程只是为了暴露健康端点,所以我会选择 liveness check exec 方式。它不会进入您的应用程序,希望它只会定期消耗一些 CPU 周期。

无论如何,如果您决定从 pod 公开健康信息,我会使用 multi-container pod,健康公开应用程序作为 sidecar,工作进程在不同的容器中。

总的来说我推荐 HTTP 机制,因为它很容易添加到 Go 中。如果您已经有一个 exec 可用的命令 return 一个有用的状态,那就去做吧。或者您可以考虑 https://github.com/kubernetes/contrib/tree/master/exec-healthz