据报Kubernetes荚运行,而不是

我得到一个奇怪的bug:该报告是通过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 refusedkube-proxy中被Dial failed: connection refused 。 而不仅仅是这个荚,我还得到了一些其他的豆荚(相同的主机),也碰到了这个。

我不知道是什么造成的,但是可能吗? 如何?

我正在使用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秒)。 即使吊舱停止后, pause容器仍然在那里。 我不得不停靠docker stop

这似乎是特定于您正在运行的pod / image。 你可以检查日志,看看为什么该吊舱退出? 你可以尝试从docker中心的任何其他图像?

Kubernetes和Docker守护程序都会报告在容器中正在运行PID,或者容器中所有容器中的一个PID正在运行的Pod /容器(有区别)。 因此,您可以拥有诸如supervisord,shell脚本或其他用户空间init系统之类的东西,然后生成更多的进程,或者产生其他进程的任何东西。 PID和容器的生命周期由PID 1表示,所以--grace-period=0立即消灭PID 1,否则当你去执行kill时,它实际上首先发送一个SIG_TERM ,最有可能是PID 1反应,但保持运行。