本任务给出将容器运行时从 Docker 改为 containerd 所需的步骤。 此任务适用于运行 1.23 或更早版本 Kubernetes 的集群操作人员。 同时,此任务也涉及从 dockershim 迁移到 containerd 的示例场景。 有关其他备选的容器运行时,可查阅 此页面进行拣选。
安装 containerd。进一步的信息可参见 containerd 的安装文档。 关于一些特定的环境准备工作,请遵循 containerd 指南。
kubectl drain <node-to-drain> --ignore-daemonsets
将 <node-to-drain> 替换为你所要腾空的节点的名称。
systemctl stop kubelet
systemctl disable docker.service --now
遵循此指南 了解安装 containerd 的详细步骤。
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
# 请审查配置信息。取决于你的安装环境,你可能需要调整:
# - sandbox_image (Kubernetes pause 镜像)
# - CNI 的 bin_dir 和 conf_dir 的位置
Get-Content config.toml
# (可选步骤,但强烈建议执行)将 containerd 排除在 Windows Defender 扫描之外
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 工具在每个节点的
/var/lib/kubelet/instance-config.yaml 文件中存储主机的
CRI 套接字。你可以在节点上创建这个 /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。
Docker 所提供的卸载 Docker Engine 命令指导中,存在删除 containerd 的风险。 在执行命令时要谨慎。
kubectl uncordon <node-to-uncordon>
将 <node-to-uncordon> 替换为你之前腾空的节点的名称。