遷移 Docker Engine 節點從 dockershim 到 cri-dockerd
本頁面說明如何遷移您的 Docker Engine 節點以使用 cri-dockerd
而非 dockershim。在以下情況下,您應該遵循這些步驟
- 您想要從 dockershim 切換出來,但仍然使用 Docker Engine 在 Kubernetes 中執行容器。
- 您想要升級到 Kubernetes v1.32,而您現有的叢集依賴 dockershim,在這種情況下,您必須從 dockershim 遷移,而
cri-dockerd
是您的選項之一。
若要深入瞭解 dockershim 的移除,請閱讀 FAQ 頁面。
什麼是 cri-dockerd?
在 Kubernetes 1.23 及更早版本中,您可以將 Docker Engine 與 Kubernetes 搭配使用,依賴 Kubernetes 的內建元件,名為 dockershim。dockershim 元件已在 Kubernetes 1.24 版本中移除;但是,第三方替代品 cri-dockerd
可用。cri-dockerd
介面卡可讓您透過容器執行期介面使用 Docker Engine。
如果您想要遷移到 cri-dockerd
,以便您可以繼續使用 Docker Engine 作為您的容器執行期,您應該為每個受影響的節點執行以下操作
- 安裝
cri-dockerd
。 - 隔離並排空節點。
- 設定 kubelet 以使用
cri-dockerd
。 - 重新啟動 kubelet。
- 驗證節點是否健康。
先在非關鍵節點上測試遷移。
您應該為每個要遷移到 cri-dockerd
的節點執行以下步驟。
開始之前
cri-dockerd
已在每個節點上安裝並啟動。- 一個 網路插件。
隔離並排空節點
隔離節點以停止新的 Pod 排程到該節點
kubectl cordon <NODE_NAME>
將
<NODE_NAME>
替換為節點的名稱。排空節點以安全地驅逐執行中的 Pods
kubectl drain <NODE_NAME> \ --ignore-daemonsets
設定 kubelet 以使用 cri-dockerd
以下步驟適用於使用 kubeadm 工具設定的叢集。如果您使用不同的工具,則應使用該工具的設定指示來修改 kubelet。
- 在每個受影響的節點上開啟
/var/lib/kubelet/kubeadm-flags.env
。 - 將
--container-runtime-endpoint
參數修改為unix:///var/run/cri-dockerd.sock
。 - 將
--container-runtime
參數修改為remote
(在 Kubernetes v1.27 及更高版本中不可用)。
kubeadm 工具將節點的 socket 作為註釋儲存在控制平面的 Node
物件上。若要為每個受影響的節點修改此 socket
編輯
Node
物件的 YAML 表示法KUBECONFIG=/path/to/admin.conf kubectl edit no <NODE_NAME>
替換以下內容
/path/to/admin.conf
:kubectl 設定檔admin.conf
的路徑。<NODE_NAME>
:您要修改的節點名稱。
將
kubeadm.alpha.kubernetes.io/cri-socket
從/var/run/dockershim.sock
變更為unix:///var/run/cri-dockerd.sock
。儲存變更。
Node
物件將在儲存時更新。
重新啟動 kubelet
systemctl restart kubelet
驗證節點是否健康
若要檢查節點是否使用 cri-dockerd
端點,請依照找出您使用的執行階段中的指示操作。kubelet 的 --container-runtime-endpoint
參數應為 unix:///var/run/cri-dockerd.sock
。
取消隔離節點
取消隔離節點以允許 Pods 排程到該節點
kubectl uncordon <NODE_NAME>
下一步
此頁面上的項目引用了第三方產品或專案,這些產品或專案提供了 Kubernetes 所需的功能。Kubernetes 專案作者不對這些第三方產品或專案負責。有關更多詳細資訊,請參閱 CNCF 網站指南。
在提出新增額外第三方連結的變更之前,您應該閱讀內容指南。