Kubernetes 將Docker Engine節(jié)點(diǎn)從dockershim遷移到cri-dockerd

2022-06-02 09:28 更新

將 Docker Engine 節(jié)點(diǎn)從 dockershim 遷移到 cri-dockerd

本頁面為你展示如何遷移你的 Docker Engine 節(jié)點(diǎn),使之使用 ?cri-dockerd? 而不是 dockershim。 在以下場景中,你可以遵從這里的步驟執(zhí)行操作:

  • 你期望不再使用 dockershim,但仍然使用 Docker Engine 來在 Kubernetes 中運(yùn)行容器。
  • 你希望升級到 Kubernetes v1.24 且你的現(xiàn)有集群依賴于 dockershim, 因此你必須放棄 dockershim,而 ?cri-dockerd? 是你的一種選項。

cri-dockerd 是什么?

在 Kubernetes v1.24 及更早版本中,你可以在 Kubernetes 中使用 Docker Engine, 依賴于一個稱作 dockershim 的內(nèi)置 Kubernetes 組件。 dockershim 組件在 Kubernetes v1.24 發(fā)行版本中已被移除;不過,一種來自第三方的替代品, ?cri-dockerd? 是可供使用的。?cri-dockerd? 適配器允許你通過 容器運(yùn)行時接口(Container Runtime Interface,CRI) 來使用 Docker Engine。

Note:
如果你已經(jīng)在使用 ?cri-dockerd?,那么你不會被 dockershim 的移除影響到。

如果你想要遷移到 ?cri-dockerd? 以便繼續(xù)使用 Docker Engine 作為你的容器運(yùn)行時, 你需要在所有被影響的節(jié)點(diǎn)上執(zhí)行以下操作:

  1. 安裝 cri-dockerd;
  2. 隔離(Cordon)并騰空(Drain)該節(jié)點(diǎn);
  3. 配置 kubelet 使用 ?cri-dockerd?;
  4. 重新啟動 kubelet;
  5. 驗證節(jié)點(diǎn)處于健康狀態(tài)。

首先在非關(guān)鍵節(jié)點(diǎn)上測試這一遷移過程。

你應(yīng)該針對所有希望遷移到 ?cri-dockerd? 的節(jié)點(diǎn)執(zhí)行以下步驟。

在開始之前

  • 安裝了 cri-dockerd 并且該服務(wù)已經(jīng)在各節(jié)點(diǎn)上啟動;
  • 一個網(wǎng)絡(luò)插件。

隔離并騰空節(jié)點(diǎn) 

  1. 隔離節(jié)點(diǎn),阻止新的 Pod 被調(diào)度到節(jié)點(diǎn)上:
  2. kubectl cordon <NODE_NAME>
    

    將 ?<NODE_NAME>? 替換為節(jié)點(diǎn)名稱。

  3. 騰空節(jié)點(diǎn)以安全地逐出所有運(yùn)行中的 Pod:
  4. kubectl drain <NODE_NAME> --ignore-daemonsets
    

配置 kubelet 使用 cri-dockerd 

下面的步驟適用于用 kubeadm 工具安裝的集群。如果你使用不同的工具, 你需要使用針對該工具的配置指令來修改 kubelet。

  1. 在每個被影響的節(jié)點(diǎn)上,打開 ?/var/lib/kubelet/kubeadm-flags.env? 文件;
  2. 將 ?--container-runtime-endpoint? 標(biāo)志,將其設(shè)置為 ?unix:///var/run/cri-dockerd.sock?。

kubeadm 工具將節(jié)點(diǎn)上的套接字存儲為控制面上 ?Node ?對象的注解。 要為每個被影響的節(jié)點(diǎn)更改此套接字:

  1. 編輯 ?Node ?對象的 YAML 表示:
  2. KUBECONFIG=/path/to/admin.conf kubectl edit no <NODE_NAME>
    

    根據(jù)下面的說明執(zhí)行替換:

    • ?/path/to/admin.conf?:指向 kubectl 配置文件 ?admin.conf? 的路徑;
    • ?<NODE_NAME>?:你要修改的節(jié)點(diǎn)的名稱。
  3. 將 ?kubeadm.alpha.kubernetes.io/cri-socket? 標(biāo)志從 ?/var/run/dockershim.sock? 更改為 ?unix:///var/run/cri-dockerd.sock?;
  4. 保存所作更改。保存時,?Node ?對象被更新

重啟 kubelet 

systemctl restart kubelet

驗證節(jié)點(diǎn)處于健康狀態(tài) 

要檢查節(jié)點(diǎn)是否在使用 ?cri-dockerd? 端點(diǎn), 按照查明節(jié)點(diǎn)上所使用的容器運(yùn)行時頁面所給的指令操作。 kubelet 的 ?--container-runtime-endpoint? 標(biāo)志取值應(yīng)該是 ?unix:///var/run/cri-dockerd.sock?。

解除節(jié)點(diǎn)隔離 

kubectl uncordon <NODE_NAME>


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號