Kubernetes 计划在即将发布的 1.24 版本里弃用 dockershim
【编者的话】Kubernetes 计划在即将发布的 1.24 版本里弃用并移除 dockershim。
Kubernetes 计划在即将发布的 1.24 版本里弃用并移除 dockershim。使用 Docker 引擎作为其 Kubernetes 集群的容器运行时的工作流或系统需要在升级到 1.24 版本之前进行迁移。1.23 版本将会保留 dockershim,对该版本的支持则会再延长一年。
Docker 是 Kubernetes 使用的第一个容器运行时。最开始对于 Docker 的支持部分被硬编码在 Kubernetes 的代码里,但是随着项目的发展,Kubernetes 开始添加更多的运行时支持。Kubernetes 社区决定转向更加结构化和标准化的接口,而不是直接把第三方的解决方案集成到核心代码里。这就有了容器运行时接口(CRI),容器网络接口(CNI)以及容器存储接口(CSI)这些标准。
正如 Mirantis 的 CTO Adam Parco 所说:
由于 Docker 不符合 CRI 标准,dockershim 更多充当的是 kubelet 和 Docker 之间的一个翻译层。然后 Docker 再通过接口形式调用 containerd 来执行容器。containerd 之前是作为一个自包含的容器运行时从 Docker 项目里提取出来,随后它便成为第一个符合 CRI 标准的运行时。可以看到,弃用 dockershim 以后 kubelet 便可以和 containerd 这样的容器运行时直接通信。
对于大多数人来说,弃用 dockershim 不是什么问题,因为他们甚至可能都感觉不到,他们实际上并没有使用 Docker 本身,他们用的是符合 CRI 标准的 containerd。对于那些人来说,这跟之前没什么两样。
分别采用 containerd 和 dockershim 的 Kubernetes 工作流对比(来源: Kubernetes)
正如 Kubernetes 博客上最近的一篇文章所提到的,从 dockershim 迁移出去是为了让 Kubernetes 的代码库能够更好地和新的接口模型保持一致。一些新开发的功能,比如 cgroups v2 还有用户命名空间,它们和 dockershim 在很大程度上是不兼容的。正如最近这篇博客文章的作者所说:“对 Docker 和 dockershim 的依赖已经渗透到 CNCF 生态系统的各种工具和项目里,这会导致我们的代码变得更加脆弱。”
如果你当前使用的是 Docker 来构建应用容器的话,那这些容器仍然可以在其他的容器运行时上运行。但是一旦使用替代的容器运行时,Docker 的一些命令可能就不起作用了或者会产生不同的结果。举个例子,
docker ps
或者 docker inspect
无法再获取容器的信息了,docker exec
也不工作了。在梳理对 dockershim 的依赖的时候还有一些额外的注意事项,这包括需要确保没有用到特权 Pod 来执行一些 Docker 命令,比如
docker ps
,重启 Docker service,或者是修改 Docker 的一些特定文件。我们还需要留意一下 Docker 配置文件里有没有私有镜像仓库或者镜像同步源的设置。如果有的话,其他运行时也需要重新配置一下这些设置。我们还应该检查跑在 Kubernetes 基础设施之外的一些脚本,识别出用到 Docker 命令的部分。这也许包括 SSH 到机器上排障,节点的启动脚本,又或者是直接装在节点上的一些监控和安全客户端。
Mirantis 和 Docker 已经达成一致,他们将会共同维护 dockershim 的代码,后续它将作为一个相对于 Kubernetes 而言更加独立、开源并且符合 CRI 接口的项目存在。这意味着 Mirantis 容器运行时(MCR)将会是符合 CRI 标准的运行时。如果遇到不希望或者不能接受 dockershim 下线的情况,他们的 cri-dockerd 将可以用作 dockershim 的一个外部替代品。
Kubernetes 1.24 版本的发布团队和 CNCF 已经承诺了将会及时提供此次发布相关的文档,目前计划是在 4 月份。这里面包含了博客文章,更新代码示例,教程,以及一份迁移指南。
该团队认为,继续进行迁移已经不存在任何主要障碍。他们确实有注意到,最近的 11 月 11 日 SIG Node 兴趣小组以及 12 月 6 日 Kubernetes 指导委员会会议上有关推迟弃用 dockershim 的讨论。然而,此时他们已经同意继续推进在即将发布的 1.24 版本里移除 dockershim 的工作。
原文链接:Kubernetes Proceeding with Deprecation of Dockershim in Upcoming 1.24 Release(翻译:吴佳兴)