簡體   English   中英

當 Kubelet 停止時,Docker 可以自動終止 Kube.netes worker 上的容器嗎?

[英]Can Docker automatically kill containers on a Kubernetes worker when Kubelet stopped?

我在 Kube.netes 中試驗 default-not-ready-toleration-seconds 以縮短 pod 在集群中的 NotReady 節點上終止之前的時間。 但是我注意到,如果 Kubelet 關閉,CRI(Docker)當然不會自行殺死正在運行的容器。 因此,當 Kube.netes 決定終止 pod 時,如果容器無法與 Kubelet 通信,它仍將運行,最終將有 2 個容器在運行。

我的問題是,如果 Kubelet 沒有在設定的超時時間內運行,是否有辦法讓 CRI 獨立做出殺死容器的決定?

# docker ps | grep busybox
5cb58ea42982        busybox                "tail -f /dev/null"      45 hours ago        Up 45 hours
# systemctl stop kubelet
# kubectl get pod busybox-test-busybox-69b844bd79-wsdvp
NAME                                    READY   STATUS
busybox-test-busybox-69b844bd79-wsdvp   1/1     Terminating
### WAIT WAIT WAIT...
# docker ps | grep busybox
5cb58ea42982        busybox                "tail -f /dev/null"      45 hours ago        Up 45 hours

你可以這樣做也不能這樣做,基本上,kubelet 是節點上的船長,並指示 docker 根據從 Kube.netes API 服務器收到的指令創建容器。

如果 kubelet 與 master 斷開連接,該節點將在特定時間間隔后標記為不可訪問。

現在 kubelet 是節點的所有者,但沒有任何指示,它不知道如何處理節點上的 pod(正如 kubelet 看到的那樣)kubelet 將使正在運行的 pod 保持運行狀態 state 或者可以從 staticPodPath 創建新的 pod

假設 kubelet 也死了。 現在沒有人在那里指導 docker 有關容器的信息。

Node 就像一台安裝了 Docker 的機器,上面運行着容器。 Docker 不知道它的主人已經死了。 它將繼續運行容器。

現在回答你的問題:

My question is, is there a way to make the CRI independently make the decision to kill a container if Kubelet have not been running for a set timeout?

您可以創建一個在節點上運行並檢查 kubelet 服務狀態的腳本。 如果服務關閉,則終止所有正在運行的容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM