Kubernetes 弃用 DockerShim 后怎么迁移到 containerd?

文章导读
Kubernetes 弃用 DockerShim 后迁移到 containerd 的核心步骤包括:首先腾空节点并停止 Docker 服务,接着安装并配置 containerd 生成默认配置文件,然后修改 kubelet 参数指定 containerd 的 CRI 套接字路径,最后重启 kubelet 并验证节点状态。迁移前务必备份数据并确保业务高可用,因为重建 Pod 可能导致短暂中断,建议在业务
📋 目录
  1. A 将节点容器运行时从 Docker 迁移到 Containerd
  2. B 从 Docker 到 Containerd:Kubernetes 容器运行时迁移实战指南 - 指南
  3. C Kubernetes 弃用 Dockershim,转向 Containerd:影响及如何应对
  4. D FAQ
A A

Kubernetes 弃用 DockerShim 后迁移到 containerd 的核心步骤包括:首先腾空节点并停止 Docker 服务,接着安装并配置 containerd 生成默认配置文件,然后修改 kubelet 参数指定 containerd 的 CRI 套接字路径,最后重启 kubelet 并验证节点状态。迁移前务必备份数据并确保业务高可用,因为重建 Pod 可能导致短暂中断,建议在业务低峰期操作。同时需要注意,Containerd 不具备镜像构建功能,完成迁移后无法在节点上使用 Docker Build 功能构建镜像,但拉取镜像不受影响。

将节点容器运行时从 Docker 迁移到 Containerd

Kubernetes 社区已经在 v1.24 版本中移除 Dockershim,为保持与社区技术路线同步,并提升集群运行的稳定性与资源效率,强烈建议您将节点容器运行时从 Docker 逐步迁移至官方推荐的 Containerd,以确保未来与 Kubernetes 版本的兼容性和持续支持。Containerd 是 Kubernetes 支持的行业标准容器运行时,与 Docker 相比,Containerd 资源占用更低、容器启动更快、兼具更高稳定性与安全性。前提条件 已创建至少一个集群,并且该集群支持 Containerd 节点,详情请参见节点操作系统与容器运行时对应关系。您的集群中存在容器运行时为 Docker 的节点或节点池。注意事项 节点容器运行时的迁移会重建节点上运行的业务 Pod,理论上可能会导致业务短暂中断,因此强烈建议您迁移的业务保证多实例高可用部署,并且建议先在测试环境试验迁移的影响,然后在业务低峰期进行生产环境迁移,以最大限度避免可能存在的风险。

从 Docker 到 Containerd:Kubernetes 容器运行时迁移实战指南 - 指南

一、背景 Kubernetes 自 v1.24 起移除了 dockershim,不再原生支持 DockerEngine,用户需迁移至受支持的 CRI 兼容运行时,如:Containerd(推荐,高性能、轻量级) CRI-O(专为 Kubernetes 设计) Docker Engine + cri-dockerd(兼容方案,但需额外维护) 二、迁移步骤 1.前置准备 当前是 3 个 node 节点,都是 docker 运行时,现在驱逐 node-3 节点 #移除节点 [root@master-1 ~]# kubectl drain node-3 --ignore-daemonsets#停止相关服务 [root@node-3 ~]# systemctl stop kubelet[root@node-3 ~]# systemctl stop docker[root@node-3 ~]# systemctl disable docker --now[root@node-3 ~]# systemctl stop kube-proxy 2.部署 containerd 服务 Containerd 部署指南 3.修改 kubelet 参数 加上 containerd 运行时参数--container-runtime=remote --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock

Kubernetes 弃用 Dockershim,转向 Containerd:影响及如何应对

Kubernetes1.24 版本发布时,正式宣布弃用 Dockershim,转向 Containerd 作为默认的容器运行环境。Kubernetes 以 CRI(Container Runtime Interface) 容器运行时接口制定接入准则,用户可以使用 Containerd、CRI-O、CRI- Dockerd 及其他容器运行时作为 Kubernetes 的容器引擎。Kubernetes 为何弃用 Dockershim? Docker 在早期没有实现 Container Runtime Interface (CRI),而 CRI 是 Kubernetes 后来增加的对额外运行时的支持标准。Dockershim 的存在是为了支持将 Docker 硬编码到 Kubernetes 中,但随着容器化成为行业标准,Kubernetes 项目增加了对额外运行时的支持,比如通过 Container Runtime Interface (CRI) 容器运行时接口来支持运行容器。因此,在 Kubernetes1.20 版本发布的时候提到未来会弃用 Dockershim 引擎,而在 Kubernetes1.24 版本发布时,正式弃用之。什么是 Containerd ? containerd 是一种容器运行时引擎,原属于 Docker 的组件的一部分,主要提供容器生命周期管理 (从创建到销毁容器)、拉取和推送镜像、存储管理 (管理镜像及容器数据的存储)、调用 runc 容器运行等,现已由开源社区拆分脱离出来单独作为容器运行时项目。

FAQ

Kubernetes 从哪个版本开始正式移除 Dockershim?

Kubernetes 自 v1.24 版本起正式移除了 Dockershim,不再原生支持 DockerEngine。

Kubernetes 弃用 DockerShim 后怎么迁移到 containerd?

迁移到 containerd 后是否还能使用 Docker 构建的镜像?

可以,Docker 和 Containerd 使用的镜像格式兼容,拉取镜像不受影响,但无法在节点上使用 Docker Build 功能。

迁移过程中业务会中断吗?

节点容器运行时的迁移会重建节点上运行的业务 Pod,理论上可能会导致业务短暂中断,建议保证多实例高可用部署。