“
Kubernetes v1.24 将于今年 4 月正式发布,Docker Shim 被移除了,CRI Dockerd 登场。
如果您现在的 Kubernetes 节点,还是用 Docker ,那您将无法升级到 1.24 版本,因为 Docker Shim 已经被移除了。有一个办法是,您可以选择从 Docker 切换到 Containerd ,再升级 1.24 版本,不过所有 Pod 都需要重建一次。
重建工作量大怎么办?这里给您提供另外的选择,从 Docker Shim 切换到 CRI-Dockerd ,让您无需重建直接升级。
CRI-Dockerd 其实就是从被移除的 Docker Shim 中,独立出来的一个项目,用于解决历史遗留的节点升级 Kubernetes 的问题。
我们发布了一个 CRI Docker 的安装卸载脚本,方便您维护您的集群。
只要您的节点提前切换到 CRI Dockerd ,就可以直接把使用 Docker 的 Kubernetes 旧版本,升级到 1.24 版本。
从 Docker Shim 切换到 CRI Docker
wget -O install.sh https://raw.githubusercontent.com/klts-io/setup-cri-dockerd/main/install.sh
./install.sh
回退
wget -O uninstall.sh https://raw.githubusercontent.com/klts-io/setup-cri-dockerd/main/uninstall.sh
./uninstall.sh
CRI-Dockerd 项目地址:
https://github.com/Mirantis/cri-dockerd
安装脚本项目地址:
https://github.com/klts-io/setup-cri-dockerd
2.1 为什么要移除 Docker shim
Kubernetes 的早期版本仅适用于特定的容器运行时:Docker 引擎。后来,Kubernetes 增加了对使用其他容器运行时的支持。创建 CRI 标准是为了实现编排器 (如 Kubernetes) 和许多不同的容器运行时之间的互操作性。Docker Engine 没有实现该接口 (CRI),因此,Kubernetes 项目创建了兼容代码来帮助过渡,并使 dockershim 代码成为 Kubernetes 本身的一部分。
dockershim 代码一直是一个临时解决方案 (因此得名:shim)。您可以在 Dockershim Removal Kubernetes Enhancement Proposal 中阅读有关社区讨论和规划的更多信息。事实上,维护 dockershim 已经成为 Kubernetes 维护者的沉重负担,但是带来的作用却越来越少。
Dockershim Removal Kubernetes Enhancement Proposal:
https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221-remove-dockershim
此外,在这些较新的 CRI 运行时中,实现了与 dockershim 基本不兼容的功能,例如 cgroups v2 和用户命名空间。取消对 dockershim 的支持,将促进这些领域的进一步发展。
2.2 我还能在 Kubernetes 1.23 中使用 Docker Engine 吗?
可以,如果使用 Docker Engine 作为运行时,1.20 在 kubelet 启动时,会打印一个警告日志。您在 1.23 之前的所有版本中都会看到此警告。dockershim 将在 Kubernetes 1.24 移除。
2.3 我仍然可以使用 Docker Engine 作为我的容器运行时吗?
如果您在自己的 PC 上使用 Docker 来开发或测试容器:没有任何变化。无论您为 Kubernetes 集群使用什么容器运行时,您仍然可以在本地使用 Docker 。容器使这种操作性成为可能。
如果是 Kubernetes 中还是要继续使用 Docker 可以尝试该适配器 cri-dockerd 和我们为您提供的维护脚本 setup-cri-dockerd 。
cri-dockerd:
https://github.com/Mirantis/cri-dockerd
setup-cri-dockerd:
https://github.com/klts-io/setup-cri-dockerd
2.4 我现有的容器镜像是否仍然有效?
是的,从 docker build 生成的图像将适用于所有 CRI 实现。您现有的所有镜像,仍将完全相同不需要做任何改动。
2.5 私人镜像是否仍然有效?
是的。所有 CRI 运行时都支持在 Kubernetes 中使用的相同的 pull secrets 配置,无论是通过 PodSpec 还是 ServiceAccount 。
2.6 Docker 和容器是一回事吗?
Docker 普及了 Linux 容器模式,并在开发底层技术方面发挥了重要作用,但是 Linux 中的容器已经存在了很长时间,容器生态系统已经发展的比 Docker 广泛得多。OCI 和 CRI 等标准,帮助许多工具在容器的生态系统中发展壮大,其中一些替代了 Docker 的某些方面,而另一些则增强了现有功能。
2.7 今天有没有人在生产中使用其他运行时的例子?
在 Kubernetes 每个版本的测试中,都经过了其他运行时的验证。
此外,kind 使用 containerd 已经有一段时间了,并且已经看到其用例的稳定性有所提高。每天都会多次使用 Kind 和 containerd 来验证对 Kubernetes 代码库的任何更改。其他相关项目也遵循类似的模式,展示了其他容器运行时的稳定性和可用性。
本文作者
张世明
现任 「 DaoCloud 道客」云原生研发工程师
Kubernetes 社区 Reviewer
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.