Kubernetes(k8s)手册 Kubernetes 将节点上的容器运行时从Docker Engine改为containerd

2024-02-25 开发教程 Kubernetes(k8s)手册 匿名 0

腾空节点

kubectl drain <node-to-drain> --ignore-daemonsets

将 ​<node-to-drain>​ 替换为你所要腾空的节点的名称

停止 Docker 守护进程

systemctl stop kubelet
systemctl disable docker.service --now

安装 Containerd

  • Linux
  1. 从官方的 Docker 仓库安装 ​containerd.io​ 包。关于为你所使用的 Linux 发行版来设置 Docker 仓库,以及安装 ​containerd.io​ 包的详细说明,可参见 开始使用 containerd。
  2. 配置 containerd:
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
重启 containerd:
sudo systemctl restart containerd
  • Windows(PowerShell)

启动一个 Powershell 会话,将 ​$Version​ 设置为期望的版本(例如:​$Version="1.4.3"​), 之后运行下面的命令:

  1. 下载 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
# 请审查配置信息。取决于你的安装环境,你可能需要调整:
# - the 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

配置 kubelet 使用 containerd 作为其容器运行时

编辑文件 ​/var/lib/kubelet/kubeadm-flags.env​,将 containerd 运行时添加到标志中: ​--container-runtime=remote​ 和 ​--container-runtime-endpoint=unix:///run/containerd/containerd.sock"​。

对于使用 kubeadm 的用户,可以考虑下面的问题:

kubeadm ​工具将每个主机的 CRI 套接字保存在该主机对应的 Node 对象的注解中。 使用 ​kubeadm ​的用户应该知道,​kubeadm ​工具将每个主机的 CRI 套接字保存在该主机对应的 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 套接字路径 (例如:​unix:///run/containerd/containerd.sock​)。

注意新的 CRI 套接字路径必须带有 ​unix://​ 前缀。

  • 保存文本编辑器中所作的修改,这会更新 Node 对象。

重启 kubelet

systemctl start kubelet

验证节点处于健康状态

运行 ​kubectl get nodes -o wide​,containerd 会显示为我们所更改的节点上的运行时。

最后,在一切顺利时删除 Docker。

  • CentOS
sudo yum remove docker-ce docker-ce-cli
Debian
sudo apt-get purge docker-ce docker-ce-cli
Fedora
sudo dnf remove docker-ce docker-ce-cli
Ubuntu
sudo apt-get purge docker-ce docker-ce-cli