我应该如何在 Kubernetes 中检查我的 go 服务的健康状况?
How should I check the health of my go service in Kubernetes?
我是 运行 在 Kubernetes 的 pod 中用 go 编写的服务。该服务不公开 HTTP 接口;它正在处理队列中的工作。
我可以:
- 使用可执行活动检查来查看进程是否 运行
- 公开 HTTP 健康检查端点
- 使用 expvars 公开基本健康数据。
在 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
我是 运行 在 Kubernetes 的 pod 中用 go 编写的服务。该服务不公开 HTTP 接口;它正在处理队列中的工作。
我可以:
- 使用可执行活动检查来查看进程是否 运行
- 公开 HTTP 健康检查端点
- 使用 expvars 公开基本健康数据。
在 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