此文档中的信息可能已过时
此文档的更新日期比原文晚,因此其中的信息可能已过时。如果能阅读英文,请查看英文版本以获取最新信息: Changing the Container Runtime on a Node from Docker Engine to containerd
本任务给出将容器运行时从 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> 替换为你之前腾空的节点的名称。