我们有一个http livenessProbe设置,如果服务不健康,它会返回500,并打印出问题所在。
有没有办法查看livenessProbe返回的输出?我可以在应用程序中记录它,但也许可以从Kubernetes查看?
目前我唯一看到pod describe
:
Killing container with id docker://12568746c312e6646fd6ecdb2123db448be0bc6808629b1a63ced8b7298be444:pod "test-3893895584-7f4cr_test(524091bd-49d8-11e7-bd00-42010a840224)" container "test" is unhealthy, it will be killed and re-created.
在GKE上运行
答案 0 :(得分:3)
不幸的是,似乎没有办法访问失败的HTTP探测的HTTP响应主体。
为了证实这种怀疑,让我们看一下在Kubelet守护程序中运行的HTTP Prober's source code:
func DoHTTPProbe(url *url.URL, headers http.Header, client HTTPGetInterface) (probe.Result, string, error) {
// ...
body := string(b)
if res.StatusCode >= http.StatusOK && res.StatusCode < http.StatusBadRequest {
glog.V(4).Infof("Probe succeeded for %s, Response: %v", url.String(), *res)
return probe.Success, body, nil
}
glog.V(4).Infof("Probe failed for %s with request headers %v, response body: %v", url.String(), headers, body)
return probe.Failure, fmt.Sprintf("HTTP probe failed with statuscode: %d", res.StatusCode), nil
}
如您所见,Kubelet守护程序将在其自己的日志中记录失败探测的HTTP响应主体,但即使这样,只有在详细程度设置为4或更高时。除了在自己的日志中记录响应之外,它不会从DoHTTPProbe
方法传回,并且不会被Kubelet进一步处理。
正如您自己已经指出的那样,我认为您最安全的选择是在您的应用程序中记录您需要的数据。