安裝 docker 後強制 kubernetes 使用 containerd

安裝 docker 後強制 kubernetes 使用 containerd

我的 Kubernetes 節點同時安裝了 docker 和 containerd。我需要節點上的 docker 來運行 CI 管道和建置。如何讓Kubernetes使用推薦的containerd而不是docker?現有文件建議從系統中刪除 docker,這對於我的情況來說是不可取的。

當兩者都安裝時,有沒有辦法強制 Kubernetes 使用 containerd 作為容器運行時而不是 docker?

答案1

Kubelet 是負責節點上容器操作的進程,它具有一組命令列標誌告訴它使用遠端容器管理提供者(containerd 和 cri-o 的使用方式相同,據我所知):

[Service]
ExecStart=/usr/local/bin/kubelet --container-runtime=remote --container-runtime-endpoint=unix:///var/run/dockershim.sock

(假設您的容器正在同一dockershim.sock路徑上偵聽)

精細手冊特別指出,請確保您不會在現有的Node 註冊中切換這些標誌,因為它在創建容器時做出了某些假設,因此,如果您已經有一個正在使用docker 的Node,最好停止kubelet,吹走這些容器,kubectl delete node $the_node_name並讓kubelet使用正確的設定重新註冊

答案2

在 Ubunut 20.04 上進行了測試,啟用 containerd 運行時的簡單而乾淨的方法是將以下內容新增至/etc/systemd/system/kubelet.service.d/20-use-containerd.conf

Environment="KUBELET_EXTRA_ARGS=--container-runtime remote --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock"

這為 kubelet 服務添加了一些額外的參數,以啟用 containerd,而不是預設依賴 docker-shim。

建議重新啟動節點,或至少停止 kubelet、docker 和 Containerd 進行切換,因為簡單的 kubelet 重新啟動將嘗試透過 Containerd 運行容器,而容器仍在使用 docker 運行。

相關內容