2016-03-03 65 views
1

我收到一個奇怪的錯誤:報告的pod是通過k8s api-server運行的。但是運行應用程序的容器實際上已經退出,只有暫停容器gcr.io/google_containers/pause:0.8.0正在運行,而不是實際的容器。Kubernetes pod被報告爲正在運行,而不是

$ 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 

正如你所看到的,應用程序容器退出10小時前,但/pause::0.8.0仍在運行,那爲什麼它被報告爲運行。 我注意到這個問題,因爲我在kube-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

回答

1

這似乎是特定於您正在運行的窗格/圖像。你可以檢查日誌,看看爲什麼該吊艙退出?你可以嘗試從碼頭集線器的任何其他圖像?

+0

吊艙在'kubectl滾動更新'期間被終止。順便說一句,我重新啓動了該主機上的kubelet,並解決了這個問題,主容器又回來了。 –

0

Kubernetes和Docker守護程序都會報告在容器中運行PID,或者Pod中的所有容器中有一個PID正在運行時運行的Pod /容器(有區別)。因此,您可以擁有諸如supervisord,shell腳本或其他用戶空間init系統之類的東西,然後生成更多的進程,或者產生其他進程的任何東西。 PID和容器的生命週期由PID 1表示,所以--grace-period=0立即消除PID 1,否則當你去殺人時,它實際上首先發送一個SIG_TERM,這很可能是PID 1反應但保持運行。