From 625ed5e1dd78f2a61cbff576b792578403d74d9f Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Fri, 25 Feb 2022 17:14:55 +0800 Subject: [PATCH] [zh] Translate change runtime containerd page --- .../change-runtime-containerd.md | 253 ++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md diff --git a/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md new file mode 100644 index 0000000000..0b281a2191 --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md @@ -0,0 +1,253 @@ +title: 将节点上的容器运行时从 Docker Engine 改为 containerd +weight: 8 +content_type: task + + + + +本任务给出将容器运行时从 Docker 改为 containerd 所需的步骤。 +此任务适用于运行 1.23 或更早版本 Kubernetes 的集群操作人员。 +同时,此任务也涉及从 dockershim 迁移到 containerd 的示例场景, +以及可以从[此页面](/zh/docs/setup/production-environment/container-runtimes/) +获得的其他容器运行时列表。 + +## {{% heading "prerequisites" %}} + +{{% thirdparty-content %}} + + +安装 containerd。进一步的信息可参见 +[containerd 的安装文档](https://containerd.io/docs/getting-started/)。 +关于一些特定的环境准备工作,请参阅[此页面](/zh/docs/setup/production-environment/container-runtimes/#containerd)。 + + +## 腾空节点 {#drain-the-node} + +``` +# 将 替换为你所要腾空的节点的名称 +kubectl drain --ignore-daemonsets +``` + + +## 停止 Docker 守护进程 {#stop-the-docker-daemon} + +```shell +systemctl stop kubelet +systemctl disable docker.service --now +``` + + +## 安装 Containerd {#install-containerd} + +此[页面](/zh/docs/setup/production-environment/container-runtimes/#containerd) +包含安装 containerd 的详细步骤。 + +{{< tabs name="tab-cri-containerd-installation" >}} +{{% tab name="Linux" %}} + + +1. 从官方的 Docker 仓库安装 `containerd.io` 包。关于为你所使用的 Linux 发行版来设置 + Docker 仓库,以及安装 `containerd.io` 包的详细说明,可参见 + [Install Docker Engine](https://docs.docker.com/engine/install/#server)。 + + +2. 配置 containerd: + + ```shell + sudo mkdir -p /etc/containerd + containerd config default | sudo tee /etc/containerd/config.toml + ``` + + +3. 重启 containerd: + + ```shell + sudo systemctl restart containerd + ``` + +{{% /tab %}} +{{% tab name="Windows (PowerShell)" %}} + + +启动一个 Powershell 会话,将 `$Version` 设置为期望的版本(例如:`$Version="1.4.3"`), +之后运行下面的命令: + + +1. 下载 containerd: + + ```powershell + 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. 解压缩并执行配置: + + ```powershell + 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" + ``` + + +3. 启动 containerd: + + ```powershell + .\containerd.exe --register-service + Start-Service containerd + ``` + +{{% /tab %}} +{{< /tabs >}} + + +## 配置 kubelet 使用 containerd 作为其容器运行时 + +编辑文件 `/var/lib/kubelet/kubeadm-flags.env`,将 containerd 运行时添加到标志中: +`--container-runtime=remote` 和 `--container-runtime-endpoint=unix:///run/containerd/containerd.sock"`。 + + +对于使用 kubeadm 的用户,可以考虑下面的问题: + +`kubeadm` 工具将每个主机的 CRI 套接字保存在该主机对应的 Node 对象的注解中。 + + +要更改这一注解信息,你必须执行下面的操作: + +在一台包含 `/etc/kubernetes/admin.conf` 文件的机器上,执行 +`kubectl edit no <节点名称>`。 + + +这一命令会打开一个文本编辑器,供你在其中编辑 Node 对象。 +要选择不同的文本编辑器,你可以设置 `KUBE_EDITOR` 环境变量。 + +- 更改 `kubeadm.alpha.kubernetes.io/cri-socket` 值,将其从 + `/var/run/dockershim.sock` 改为你所选择的 CRI 套接字路径 + (例如:`unix:///run/containerd/containerd.sock`)。 + + 注意新的 CRI 套接字路径必须带有 `unix://` 前缀。 + +- 保存文本编辑器中所作的修改,这会更新 Node 对象。 + + +## 重启 kubelet {#restart-the-kubelet} + +```shell +systemctl start kubelet +``` + + +## 验证节点处于健康状态 {#verify-that-the-node-is-healthy} + +运行 `kubectl get nodes -o wide`,containerd 会显示为我们所更改的节点上的运行时。 + +{{% thirdparty-content %}} + + +最后,在一切顺利时删除 Docker。 + +{{< tabs name="tab-remove-docker-enigine" >}} +{{% tab name="CentOS" %}} + +```shell +sudo yum remove docker-ce docker-ce-cli +``` +{{% /tab %}} +{{% tab name="Debian" %}} + +```shell +sudo apt-get purge docker-ce docker-ce-cli +``` +{{% /tab %}} +{{% tab name="Fedora" %}} + +```shell +sudo dnf remove docker-ce docker-ce-cli +``` +{{% /tab %}} +{{% tab name="Ubuntu" %}} + +```shell +sudo apt-get purge docker-ce docker-ce-cli +``` +{{% /tab %}} +{{< /tabs >}} +