Kubernetes教程

Kubernetes容器运行时更改

本篇教程将为运行1.23或更早版本Kubernetes集群的操作人员提供将容器运行时从Docker改为containerd的步骤。同时,我们还将提供一个示例场景,涉及从dockershim迁移到containerd的过程。

一、腾空节点

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

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

二、停止Docker守护进程

systemctl stop kubelet
systemctl disable docker.service --now

三、安装 Containerd

1、Linux:

(1)从官方的 Docker 仓库安装 containerd.io 包。

(2)配置 containerd:

sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

(3)重启 containerd:

sudo systemctl restart containerd

2、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

(2)解压缩并执行配置:

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"

(3)启动 containerd:

.\containerd.exe --register-service
Start-Service containerd

四、配置kubelet

配置 kubelet 使用 containerd 作为其容器运行时。编辑文件 /var/lib/kubelet/kubeadm-flags.env,将 containerd 运行时添加到标志中; --container-runtime-endpoint=unix:///run/containerd/containerd.sock。

使用 kubeadm 的用户应该知道,kubeadm 工具将每个主机的 CRI 套接字保存在该主机对应的 Node 对象的注解中。 要更改这一注解信息,你可以在一台包含 kubeadm /etc/kubernetes/admin.conf 文件的机器上执行以下命令:

kubectl edit no <node-name>

这一命令会打开一个文本编辑器,供你在其中编辑 Node 对象。 要选择不同的文本编辑器,你可以设置 KUBE_EDITOR 环境变量。

1、更改 kubeadm.alpha.kubernetes.io/cri-socket 值,将其从 /var/run/dockershim.sock 改为你所选择的 CRI 套接字路径 (例如:unix:///run/containerd/containerd.sock)。注意新的 CRI 套接字路径必须带有 unix:// 前缀。

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

五、重启kubelet

systemctl start kubelet

六、验证节点处于健康状态

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

七、移除Docker Engine

1、CentOS

sudo yum remove docker-ce docker-ce-cli

2、Debian

sudo apt-get purge docker-ce docker-ce-cli

3、Fedora

sudo dnf remove docker-ce docker-ce-cli

4、Ubuntu

sudo apt-get purge docker-ce docker-ce-cli

上面的命令不会移除你的主机上的镜像、容器、卷或者定制的配置文件。

注意:Docker 所提供的卸载 Docker Engine 命令指导中,存在删除 containerd 的风险。 在执行命令时要谨慎。

八、uncordon节点

kubectl uncordon <node-to-uncordon>

将 <node-to-uncordon> 替换为你之前腾空的节点的名称。

广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录