website/content/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md

8.9 KiB
Raw Permalink Blame History

title weight content_type
将节点上的容器运行时从 Docker Engine 改为 containerd 10 task

本任务给出将容器运行时从 Docker 改为 containerd 所需的步骤。 此任务适用于运行 1.23 或更早版本 Kubernetes 的集群操作人员。 同时,此任务也涉及从 dockershim 迁移到 containerd 的示例场景。 有关其他备选的容器运行时,可查阅 此页面进行拣选。

{{% heading "prerequisites" %}}

{{% thirdparty-content %}}

安装 containerd。进一步的信息可参见 containerd 的安装文档。 关于一些特定的环境准备工作,请遵循 containerd 指南

腾空节点

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

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

停止 Docker 守护进程

systemctl stop kubelet
systemctl disable docker.service --now

安装 Containerd

遵循此指南 了解安装 containerd 的详细步骤。

{{< tabs name="tab-cri-containerd-installation" >}} {{% tab name="Linux" %}}

  1. 从官方的 Docker 仓库安装 containerd.io 包。关于为你所使用的 Linux 发行版来设置 Docker 仓库,以及安装 containerd.io 包的详细说明, 可参见开始使用 containerd
  1. 配置 containerd

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

    sudo systemctl restart containerd
    

{{% /tab %}} {{% tab name="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
    
  1. 解压缩并执行配置:

    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"
    
  1. 启动 containerd

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

{{% /tab %}} {{< /tabs >}}

配置 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 环境变量。

  • 更改 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 widecontainerd 会显示为我们所更改的节点上的运行时。

移除 Docker Engine

{{% thirdparty-content %}}

如果节点显示正常,删除 Docker。

{{< tabs name="tab-remove-docker-engine" >}} {{% tab name="CentOS" %}}

sudo yum remove docker-ce docker-ce-cli

{{% /tab %}} {{% tab name="Debian" %}}

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

{{% /tab %}} {{% tab name="Fedora" %}}

sudo dnf remove docker-ce docker-ce-cli

{{% /tab %}} {{% tab name="Ubuntu" %}}

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

{{% /tab %}} {{< /tabs >}}

上面的命令不会移除你的主机上的镜像、容器、卷或者定制的配置文件。 要删除这些内容,参阅 Docker 的指令来卸载 Docker Engine

{{< caution >}}

Docker 所提供的卸载 Docker Engine 命令指导中,存在删除 containerd 的风险。 在执行命令时要谨慎。 {{< /caution >}}

uncordon 节点

kubectl uncordon <node-to-uncordon>

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