本任务概述了将容器运行时从 Docker 更新为 containerd 所需的步骤。它适用于运行 Kubernetes 1.23 或更早版本的集群操作员。此文档还涵盖了从 dockershim 迁移到 containerd 的示例场景。其他容器运行时可以从本页面中选择。
安装 containerd。有关详细信息,请参阅 containerd 的安装文档;有关具体的前置要求,请遵循 containerd 指南。
kubectl drain <node-to-drain> --ignore-daemonsets
将 <node-to-drain> 替换为您要驱逐的节点的名称。
systemctl stop kubelet
systemctl disable docker.service --now
遵循指南以获取安装 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
编辑文件 /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)。
systemctl start kubelet
运行 kubectl get nodes -o wide,containerd 将显示为我们刚更改的节点的运行时。
如果节点显示健康,请移除 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 说明。
kubectl uncordon <node-to-uncordon>
将 <node-to-uncordon> 替换为您之前驱逐的节点的名称。