將節點上的容器執行時從 Docker Engine 更改為 containerd
本任務概述了將容器執行時從 Docker 更新為 containerd 所需的步驟。它適用於執行 Kubernetes 1.23 或更早版本的叢集操作員。本任務還包括一個從 dockershim 遷移到 containerd 的示例場景。其他容器執行時可以在此頁面選擇。
準備工作
安裝 containerd。有關更多資訊,請參閱containerd 的安裝文件,並按照containerd 指南瞭解具體的先決條件。
排空節點
kubectl drain <node-to-drain> --ignore-daemonsets
將 <node-to-drain>
替換為您要排空的節點的名稱。
停止 Docker 守護程序
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 套接字儲存在每個節點上的
/var/lib/kubelet/instance-config.yaml
檔案中。您可以在節點上建立此 /var/lib/kubelet/instance-config.yaml
檔案。
/var/lib/kubelet/instance-config.yaml
檔案允許設定 containerRuntimeEndpoint
引數。
您可以將此引數的值設定為所選 CRI 套接字的路徑(例如 unix:///run/containerd/containerd.sock
)。
重啟 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 網站指南。
在提議新增額外第三方連結的更改之前,你應該閱讀內容指南。