将 Docker 引擎节点从 dockershim 迁移到 cri-dockerd

本页面介绍如何将 Docker Engine 节点迁移为使用 cri-dockerd 而不是 dockershim。您应该在以下情况下执行这些步骤

  • 您希望弃用 dockershim 并继续使用 Docker Engine 在 Kubernetes 中运行容器。
  • 您希望升级到 Kubernetes v1.30,并且您现有的集群依赖于 dockershim,在这种情况下,您必须从 dockershim 迁移,而 cri-dockerd 是您的选择之一。

要详细了解 dockershim 的移除,请阅读常见问题解答页面

什么是 cri-dockerd?

在 Kubernetes 1.23 及更早版本中,您可以将 Docker Engine 与 Kubernetes 一起使用,依赖于 Kubernetes 中名为 *dockershim* 的内置组件。dockershim 组件已在 Kubernetes 1.24 版本中移除;但是,可以使用第三方替代方案 cri-dockerdcri-dockerd 适配器允许您通过容器运行时接口使用 Docker Engine。

如果要迁移到 cri-dockerd 以便可以继续使用 Docker Engine 作为容器运行时,则应为每个受影响的节点执行以下操作

  1. 安装 cri-dockerd
  2. 隔离并排空节点。
  3. 将 kubelet 配置为使用 cri-dockerd
  4. 重启 kubelet。
  5. 验证节点是否正常。

首先在非关键节点上测试迁移。

您应该为要迁移到 cri-dockerd 的每个节点执行以下步骤。

准备工作

隔离并排空节点

  1. 隔离节点以停止在其上调度新的 Pod

    kubectl cordon <NODE_NAME>
    

    <NODE_NAME> 替换为节点的名称。

  2. 排空节点以安全地驱逐正在运行的 Pod

    kubectl drain <NODE_NAME> \
        --ignore-daemonsets
    

将 kubelet 配置为使用 cri-dockerd

以下步骤适用于使用 kubeadm 工具设置的集群。如果您使用其他工具,则应使用该工具的配置说明修改 kubelet。

  1. 在每个受影响的节点上打开 /var/lib/kubelet/kubeadm-flags.env
  2. --container-runtime-endpoint 标志修改为 unix:///var/run/cri-dockerd.sock
  3. --container-runtime 标志修改为 remote(在 Kubernetes v1.27 及更高版本中不可用)。

kubeadm 工具将节点的套接字存储为控制平面中 Node 对象上的注释。要为每个受影响的节点修改此套接字,请执行以下操作

  1. 编辑 Node 对象的 YAML 表示形式

    KUBECONFIG=/path/to/admin.conf kubectl edit no <NODE_NAME>
    

    替换以下内容

    • /path/to/admin.conf:kubectl 配置文件 admin.conf 的路径。
    • <NODE_NAME>:要修改的节点的名称。
  2. kubeadm.alpha.kubernetes.io/cri-socket/var/run/dockershim.sock 更改为 unix:///var/run/cri-dockerd.sock

  3. 保存更改。Node 对象将在保存时更新。

重启 kubelet

systemctl restart kubelet

验证节点是否正常

要检查节点是否使用 cri-dockerd 端点,请按照找出您使用的运行时中的说明进行操作。kubelet 的 --container-runtime-endpoint 标志应为 unix:///var/run/cri-dockerd.sock

取消隔离节点

取消隔离节点以允许 Pod 在其上调度

kubectl uncordon <NODE_NAME>

后续步骤

本页面上的项目指的是提供 Kubernetes 所需功能的第三方产品或项目。Kubernetes 项目作者不对这些第三方产品或项目负责。有关更多详细信息,请参阅CNCF 网站指南

在提议添加额外第三方链接的更改之前,您应该阅读内容指南

上次修改时间:2024 年 3 月 8 日上午 11:46(太平洋标准时间):将 cri-dockerd 链接更改为英文内容中的官方文档 (fe501f8bfa)