写点什么

Docker Shim 被移除,K8s v1.24 升级该怎么办

作者:Daocloud 道客
  • 2022 年 3 月 15 日
  • 本文字数:2152 字

    阅读完需:约 7 分钟

Docker Shim 被移除,K8s v1.24 升级该怎么办

Kubernetes v1.24 将于今年 4 月正式发布,Docker Shim 被移除了,CRI Dockerd 登场。




如果您现在的 Kubernetes 节点,还是用 Docker,那您将无法升级到 1.24 版本,因为 Docker Shim 已经被移除了。有一个办法是,您可以选择从 Docker 切换到 Containerd,再升级 1.24 版本,不过所有 Pod 都需要重建一次。

重建工作量大怎么办?这里给您提供另外的选择,从 Docker Shim 切换到 CRI-Dockerd,让您无需重建直接升级。

01 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

02 Docker Shim 移除常见问题

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




DaoCloud 公司简介

「DaoCloud 道客」云原生领域的创新领导者,成立于 2014 年底,拥有自主知识产权的核心技术,致力于打造开放的云操作系统为企业数字化转型赋能。产品能力覆盖云原生应用的开发、交付、运维全生命周期,并提供公有云、私有云和混合云等多种交付方式。成立迄今,公司已在金融科技、先进制造、智能汽车、零售网点、城市大脑等多个领域深耕,标杆客户包括交通银行、浦发银行、上汽集团、东风汽车、海尔集团、屈臣氏、金拱门(麦当劳)等。目前,公司已完成了 D 轮超亿元融资,被誉为科技领域准独角兽企业。公司在北京、武汉、深圳、成都设立多家分公司及合资公司,总员工人数超过 400 人,是上海市高新技术企业、上海市“科技小巨人”企业和上海市“专精特新”企业,并入选了科创板培育企业名单。


发布于: 刚刚阅读数: 2
用户头像

驾驭数字方程式 2022.02.11 加入

遨游云原生,驾驭数字方程式,打造开放的云操作系统为企业数字化转型赋能

评论

发布
暂无评论
Docker Shim 被移除,K8s v1.24 升级该怎么办_Docker_Daocloud 道客_InfoQ写作平台