据报道,Kubernetes pod正在运行

时间:2016-03-03 06:53:06

标签: docker kubernetes coreos

我遇到了一个奇怪的错误:该pod报告为通过k8s api-server运行。但是实际运行了运行应用程序的容器,只有暂停容器gcr.io/google_containers/pause:0.8.0正在运行,而不是实际的容器。

$ docker ps -a | grep ms-issue
1754ddbbfbd8        agencyrev/workflow.microservice.issue:v0.0.9                          "npm start"            2 days ago          Exited (1) 11 hours ago                       k8s_workflow-microservice-issue.458c077c_rc--ms-issue--v0.0.9-btryt_staging_18d44bae-dac7-11e5-889c-00155d08db02_965dee2f
30c0addd88ef        gcr.io/google_containers/pause:0.8.0                                  "/pause"               2 days ago          Up 2 days                                     k8s_POD.b5de0404_rc--ms-issue--v0.0.9-btryt_staging_18d44bae-dac7-11e5-889c-00155d08db02_e427af83

正如您所看到的,应用容器已在11小时前退出,但/pause::0.8.0仍在运行,这就是为什么它被报告为正在运行。 我注意到了这个问题,因为我在Dial failed: connection refused中一直收到错误kube-proxy。而且不只是这个pod,我还有一些其他的pod(同一个主机)也遇到了这个。

我不知道是什么造成的,但这可能吗?怎么样?

我正在使用kubernetes版本v1.1.7

$ kubetctl version
Client Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.7", GitCommit:"e4e6878293a339e4087dae684647c9e53f1cf9f0", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.7", GitCommit:"e4e6878293a339e4087dae684647c9e53f1cf9f0", GitTreeState:"clean"}

$ docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 2c2c52b-dirty
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 2c2c52b-dirty
OS/Arch (server): linux/amd64

$ uname -a
Linux dev-coreos-k8s_14 4.1.5-coreos #2 SMP Thu Aug 13 09:18:45 UTC 2015 x86_64 Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz GenuineIntel GNU/Linux

上述问题会导致其他问题,即我无法在没有--grace-period=0选项的情况下停止播客(状态始终为Terminating且默认宽限期为30秒)。即使在pod停止后,pause容器仍在那里。我不得不用docker stop

来阻止它

2 个答案:

答案 0 :(得分:1)

这似乎特定于您正在运行的pod / image。您可以查看日志并查看该pod退出的原因吗?你能试试码头中心的任何其他形象吗?

答案 1 :(得分:0)

如果PID容器在容器中运行,或者如果Pod中的所有容器中的一个正在运行,则Kubernetes和Docker守护程序都将报告Pod /容器(存在差异)。因此,您可以拥有诸如supervisord,shell脚本或其他先运行的用户空间初始化系统,然后生成更多进程或生成其他进程的任何内容。 Pods和Containers的生命周期由PID 1表示,因此--grace-period=0立即杀死PID 1,否则当你去杀人时,它实际上首先发送SIG_TERM,这很可能是PID 1会对此作出反应但保持运行。