将 Docker Engine 节点从 dockershim 迁移到 cri-dockerd
本页面向您展示如何将 Docker Engine 节点迁移为使用 cri-dockerd
而不是 dockershim。在以下情况下,您应该遵循这些步骤
- 您想从 dockershim 切换出来,并且仍然使用 Docker Engine 在 Kubernetes 中运行容器。
- 您想升级到 Kubernetes v1.32,而您现有的集群依赖 dockershim,在这种情况下,您必须从 dockershim 迁移,而
cri-dockerd
是您的选择之一。
要了解更多关于移除 dockershim 的信息,请阅读常见问题解答页面。
什么是 cri-dockerd?
在 Kubernetes 1.23 及更早版本中,您可以将 Docker Engine 与 Kubernetes 一起使用,依赖于 Kubernetes 的一个内置组件,名为dockershim。dockershim 组件在 Kubernetes 1.24 版本中被移除;但是,第三方替代方案 cri-dockerd
可用。 cri-dockerd
适配器允许您通过容器运行时接口使用 Docker Engine。
如果您想迁移到 cri-dockerd
以便您可以继续使用 Docker Engine 作为您的容器运行时,您应该对每个受影响的节点执行以下操作
- 安装
cri-dockerd
。 - 隔离并排空节点。
- 配置 kubelet 以使用
cri-dockerd
。 - 重启 kubelet。
- 验证节点是否健康。
首先在非关键节点上测试迁移。
您应该对每个要迁移到 cri-dockerd
的节点执行以下步骤。
开始之前
cri-dockerd
已安装并在每个节点上启动。- 一个网络插件。
隔离并排空节点
隔离节点以阻止新的 Pod 在其上调度
kubectl cordon <NODE_NAME>
将
<NODE_NAME>
替换为节点的名称。排空节点以安全地驱逐正在运行的 Pod
kubectl drain <NODE_NAME> \ --ignore-daemonsets
配置 kubelet 以使用 cri-dockerd
以下步骤适用于使用 kubeadm 工具设置的集群。如果您使用不同的工具,您应该使用该工具的配置说明修改 kubelet。
- 在每个受影响的节点上打开
/var/lib/kubelet/kubeadm-flags.env
。 - 将
--container-runtime-endpoint
标志修改为unix:///var/run/cri-dockerd.sock
。 - 将
--container-runtime
标志修改为remote
(在 Kubernetes v1.27 及更高版本中不可用)。
kubeadm 工具将节点的套接字作为 Node
对象上的注解存储在控制平面中。要修改每个受影响节点的此套接字
编辑
Node
对象的 YAML 表示KUBECONFIG=/path/to/admin.conf kubectl edit no <NODE_NAME>
替换以下内容
/path/to/admin.conf
:kubectl 配置文件的路径,admin.conf
。<NODE_NAME>
:您要修改的节点的名称。
将
kubeadm.alpha.kubernetes.io/cri-socket
从/var/run/dockershim.sock
更改为unix:///var/run/cri-dockerd.sock
。保存更改。
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 网站指南。
您应该在提出添加额外第三方链接的更改之前阅读内容指南。