【发布时间】:2016-09-22 00:03:54
【问题描述】:
我正在 Kubernetes 的 pod 中运行用 go 编写的服务。该服务不公开 HTTP 接口;它正在处理队列中的工作。
我可以:
- 使用可执行的活跃度检查来查看进程是否正在运行
- 公开 HTTP 健康检查端点
- 使用 expvars 公开基本健康数据。
在 go/Kubernetes 中是否有一种通用/惯用的方式来执行此操作?
【问题讨论】:
标签: go kubernetes kubernetes-health-check
我正在 Kubernetes 的 pod 中运行用 go 编写的服务。该服务不公开 HTTP 接口;它正在处理队列中的工作。
我可以:
在 go/Kubernetes 中是否有一种通用/惯用的方式来执行此操作?
【问题讨论】:
标签: go kubernetes kubernetes-health-check
总的来说,我推荐 HTTP 机制,因为它很容易添加到 Go 中。如果您已经有一个可以返回有用状态的execable 命令,那就去吧。或者你可以考虑https://github.com/kubernetes/contrib/tree/master/exec-healthz
【讨论】:
我不会讨论检测运行到 pod 中的进程以专注于问题的便利性。
我会避免在容器内创建另一个进程来暴露数据,或者修改当前进程只是为了暴露健康端点,所以我会选择 liveness check exec 方式。它不会进入您的应用程序,并且希望它只会定期消耗一些 CPU 周期。
无论如何,如果您决定从 pod 公开健康信息,我会使用 multi-container pod,将健康公开应用程序作为 sidecar,并将工作进程放在不同的容器中。
【讨论】: