在節點上將容器運行時從 Docker Engine 變更為 containerd
此任務概述了將您的容器執行階段從 Docker 更新到 containerd 所需的步驟。 它適用於執行 Kubernetes 1.23 或更早版本的叢集運營商。 這也涵蓋了從 dockershim 遷移到 containerd 的範例情境。 可以從此頁面中選擇替代的容器執行階段。
開始之前
安裝 containerd。 有關更多資訊,請參閱 containerd 的安裝文件,有關具體先決條件,請遵循containerd 指南。
排空節點
kubectl drain <node-to-drain> --ignore-daemonsets
將 <node-to-drain>
替換為您要排空的節點名稱。
停止 Docker daemon
systemctl stop kubelet
systemctl disable docker.service --now
安裝 Containerd
遵循指南以取得安裝 containerd 的詳細步驟。
從官方 Docker 儲存庫安裝
containerd.io
套件。 有關為您的 Linux 發行版設定 Docker 儲存庫和安裝containerd.io
套件的說明,請參閱containerd 入門。組態 containerd
sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml
重新啟動 containerd
sudo systemctl restart containerd
啟動 Powershell 會話,將 $Version
設定為所需的版本(例如:$Version="1.4.3"
),然後執行以下命令
下載 containerd
curl.exe -L https://github.com/containerd/containerd/releases/download/v$Version/containerd-$Version-windows-amd64.tar.gz -o containerd-windows-amd64.tar.gz tar.exe xvf .\containerd-windows-amd64.tar.gz
解壓縮和組態
Copy-Item -Path ".\bin\" -Destination "$Env:ProgramFiles\containerd" -Recurse -Force cd $Env:ProgramFiles\containerd\ .\containerd.exe config default | Out-File config.toml -Encoding ascii # Review the configuration. Depending on setup you may want to adjust: # - the sandbox_image (Kubernetes pause image) # - cni bin_dir and conf_dir locations Get-Content config.toml # (Optional - but highly recommended) Exclude containerd from Windows Defender Scans Add-MpPreference -ExclusionProcess "$Env:ProgramFiles\containerd\containerd.exe"
啟動 containerd
.\containerd.exe --register-service Start-Service containerd
組態 kubelet 以使用 containerd 作為其容器執行階段
編輯檔案 /var/lib/kubelet/kubeadm-flags.env
並將 containerd 執行階段新增到標誌;--container-runtime-endpoint=unix:///run/containerd/containerd.sock
。
使用 kubeadm 的使用者應注意,kubeadm
工具會將每個主機的 CRI socket 作為註解儲存在該主機的 Node 物件中。 若要變更它,您可以在具有 kubeadm /etc/kubernetes/admin.conf
檔案的機器上執行以下命令。
kubectl edit no <node-name>
這將啟動一個文字編輯器,您可以在其中編輯 Node 物件。 若要選擇文字編輯器,您可以設定 KUBE_EDITOR
環境變數。
將
kubeadm.alpha.kubernetes.io/cri-socket
的值從/var/run/dockershim.sock
變更為您選擇的 CRI socket 路徑(例如unix:///run/containerd/containerd.sock
)。請注意,新的 CRI socket 路徑理想情況下必須以
unix://
為前綴。儲存文字編輯器中的變更,這將更新 Node 物件。
重新啟動 kubelet
systemctl start kubelet
驗證節點是否健康
執行 kubectl get nodes -o wide
,containerd 會顯示為我們剛變更的節點的執行階段。
移除 Docker Engine
如果節點顯示為健康,請移除 Docker。
sudo yum remove docker-ce docker-ce-cli
sudo apt-get purge docker-ce docker-ce-cli
sudo dnf remove docker-ce docker-ce-cli
sudo apt-get purge docker-ce docker-ce-cli
先前的命令不會移除主機上的映像檔、容器、卷或自訂組態檔案。 若要刪除它們,請遵循 Docker 的說明以解除安裝 Docker Engine。
注意
Docker 的解除安裝 Docker Engine 說明會建立刪除 containerd 的風險。 執行命令時請小心。解除封鎖節點
kubectl uncordon <node-to-uncordon>
將 <node-to-uncordon>
替換為您先前排空的節點名稱。
此頁面上的項目參考第三方產品或專案,這些產品或專案提供 Kubernetes 所需的功能。 Kubernetes 專案作者不對這些第三方產品或專案負責。 有關更多詳細資訊,請參閱 CNCF 網站指南。
在提出新增額外第三方連結的變更之前,您應該閱讀內容指南。