侧边栏壁纸
博主头像
汪洋

即使慢,驰而不息,纵会落后,纵会失败,但一定可以达到他所向的目标。 - 鲁迅

  • 累计撰写 201 篇文章
  • 累计创建 78 个标签
  • 累计收到 122 条评论

K8S - 如何在 1.24.0 版本后继续使用 Docker 服役

汪洋
2022-05-12 / 0 评论 / 9 点赞 / 482 阅读 / 2,352 字

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 是什么

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

二、Docker Shim移除常见问题

为什么要移除 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 的支持,将促进这些领域的进一步发展。

我还能在 Kubernetes 1.23 中使用 Docker Engine 吗?

可以,如果使用 Docker Engine 作为运行时,1.20 在 kubelet 启动时,会打印一个警告日志。您在 1.23 之前的所有版本中都会看到此警告。dockershim 将在 Kubernetes 1.24 移除。

我仍然可以使用 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

我现有的容器镜像是否仍然有效?

是的,从 docker build 生成的图像将适用于所有 CRI 实现。您现有的所有镜像,仍将完全相同不需要做任何改动。

私人镜像是否仍然有效?

是的。所有 CRI 运行时都支持在 Kubernetes 中使用的相同的 pull secrets 配置,无论是通过 PodSpec 还是 ServiceAccount。

Docker 和容器是一回事吗?

Docker 普及了 Linux 容器模式,并在开发底层技术方面发挥了重要作用,但是 Linux 中的容器已经存在了很长时间,容器生态系统已经发展的比 Docker 广泛得多。OCI 和 CRI 等标准,帮助许多工具在容器的生态系统中发展壮大,其中一些替代了 Docker 的某些方面,而另一些则增强了现有功能。

今天有没有人在生产中使用其他运行时的例子?

在 Kubernetes 每个版本的测试中,都经过了其他运行时的验证。

此外,kind 使用 containerd 已经有一段时间了,并且已经看到其用例的稳定性有所提高。每天都会多次使用 Kind 和 containerd 来验证对 Kubernetes 代码库的任何更改。其他相关项目也遵循类似的模式,展示了其他容器运行时的稳定性和可用性。

最后一句评价:一个死不悔改,一个过河拆桥

内容来源于:DaoCloud

0

评论区