• 为什么说容器运行时仍然很重要
  • 发布于 2个月前
  • 177 热度
    0 评论
如今,Kubernetes 及其关联项目已经成为云开发的核心焦点,“容器” 这个词几乎几乎已经被遗忘了,只作为一个技术细节被提及。尽管如此,CRI-O 容器运行时项目正在稳步增长,并不断引入新的功能来提升云计算的灵活性、安全性和性能。这种改进是 Kubernetes 用户急需的,而且这种工作只能在容器运行时层面上完成。

CRI-O 容器运行时项目已经从 CNCF 毕业,展示了其与另一个主要的容器运行时项目 containerd 相似的成熟度。这证明了两者都能为 Kubernetes 提供稳定且成熟的容器解决方案。尽管如此,为了进一步完善容器运行时环境,仍有大量的工作在进行,如管理设备和插件、加强供应链的安全,以及研发用 Rust 语言编写的新容器监控工具。在这些领域,两个项目都在进行合作,他们之间的关系更像是 “友好的竞争”。

“containerd 与 CRI-O 维护者之间的协同合作,让我们有机会一起开发 Kubernetes 的高级功能并共同维护诸如 cri-tools 之类的项目。” 这是 CRI-O 的主要维护者同时也是 Kubernetes SIG-Release 主席 Sascha Grunert 的观点。

一.什么是容器运行时?
大部分人把 Kubernetes 视为一个在服务器集群上运行容器的服务。但事实上,Kubernetes 并不直接运行容器。它负责调度这些容器,并通过容器运行时接口(CRI)发送请求给每个服务器节点上的容器运行时程序。这些运行时程序才负责真正的下载和运行容器。目前主流的容器运行时有两个:CRI-O 和 containerd,它们都是 CNCF 的开源项目。

CRI-O 的维护者 Peter Hunt 解释道:“大家可以把 Kubernetes(或更确切地说是 Kubelet)、CRI 和 CRI-O 想象成是老板、他们之间的交流语言和员工。Kubelet 通过 CRI 协议将关于容器、Pod、镜像的实际操作工作委托给 CRI-O。”

在 Kubernetes 的初期,它依赖 Docker 运行时来执行容器。然而,Docker 本质上是一个功能丰富、交互性强的开发环境,并不只是为了作为大型系统中的一个小部件。

因此,2016 年,Kubernetes 的开发者如 Antonio Murdaca 和 Mrunal Patel 开始研发一个专门的容器运行时,仅满足 CRI 的规范,这就是 CRI-O。一年后,Docker 将其核心的容器运行部分独立出来,命名为 containerd,并捐献给了 CNCF。这两个项目都获得了快速发展,到了 2022 年,Kubernetes 已经不再支持完整的 Docker 作为其容器运行时,转而推荐使用 CRI-O 或 containerd。

除了 CRI-O 和 containerd 这两个 CRI 实现外,OCI 和 CNCF 生态系统也在持续发展,探索新的运行容器和定制行为的方式。例如,Kata Containers 是一个 OCI 运行时,能够在虚拟机(VM)内运行 Pod。许多用户希望更深入地定制资源和容器创建,特别是当这些功能同时受到 CRI-O 和 containerd 的支持时。

二.NRI 为容器运行时增加插件
虽然各种替代的容器运行时极具吸引力,但它们也暴露出容器技术的碎片化问题。拥有多种容器运行时,特别是一些为特殊硬件设计的运行时,会给用户带来困惑和挑战。

2017 年,开放容器倡议(OCI)规范小组认识到了这个问题,并开始研究如何拓展容器运行时的方法。开发者尝试了多种方式,最终这导致了 “节点资源接口”(NRI)的诞生,它是一套规范和 API,允许供应商为容器运行时创建插件。NRI 是 containerd 和 CRI-O 开发者之间的合作成果。该项目于 9 月发布了 0.5 版本,并预计在 2023 年底发布 1.0 稳定版。

通过 NRI,插件开发者可以调整容器运行时的行为,如将容器绑定到特定的 CPU 核心或支持特殊的硬件。例如,AI 和机器学习系统可以在 NVIDIA 的 GPU 上运行容器。这意味着,系统供应商和所有者可以为他们的专有硬件编写设备管理器,包括边缘设备,以优化容器行为。

随着 Kubernetes 在边缘计算和 AI 场景中的应用增多,能够在特定的硬件环境中运行的需求也在增加。仅靠 Kubernetes 本身是无法实现这些需求的;它需要容器运行时的支援。NRI 正是为此而生。

三.用 Rust 重写 Conmon
容器运行时涉及多个组件。其中一个是 conmon,意为 “容器监视器”,它负责分发执行请求并响应容器事件。Conmon 的历史可以追溯到 CRI-O 的创始,因此它带有较早的代码和技术债务。在 2022 年,CRI-O 的维护者们开始用 Rust 语言重写 conmon。Rust 作为一种较新的编程语言,因其出色的内存安全性而备受关注,这使得美国网络安全和基础设施安全局特别关注该语言。


用户评论