Docker

安裝 docker 時強制 kubernetes 使用 containerd

  • February 28, 2021

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

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

在 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 執行。

Kubelet 是負責節點上容器操作的程序,它有一組命令行標誌來告訴它使用遠端容器管理提供程序(containerd 和 cri-o 的使用方式相同,AFAIK) :

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

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

精美的手冊特別說明要確保您不會使用現有的節點註冊切換這些標誌,因為它在創建容器時會做出某些假設,所以如果您已經有一個使用 docker 的節點,最好停止 kubelet,吹走那些容器,kubectl delete node $the_node_name並讓 kubelet 使用正確的配置重新註冊

引用自:https://serverfault.com/questions/1048346