在节点上将容器运行时从 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 网站指南。
在提议添加额外的第三方链接的更改之前,你应该阅读内容指南。