热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker和rkt快别争了,k8s才是容器生态的中心

开源项目CRI-O,其前身为OCID,官方简介是“OCI-basedimplementationofKubernetesContainerRuntimeInterface”。作为接

Docker和rkt快别争了,k8s才是容器生态的中心

开源项目 CRI-O ,其前身为 OCID ,官方简介是“ OCI-based implementation of Kubernetes Container Runtime Interface ”。作为接口,它使得 Kubernetes 不依赖于传统的容器引擎(比如 Docker ),也能够管理容器化工作负载。

该项目通过与 Kubernetes (或其商业版 CoreOS Tectonic )协作,可以帮助 DevOps 人员来管理容器的整个“生命周期”。

开发人员需要使用容器引擎构建镜像,通常情况下更喜欢用自己的 staging 环境做本地测试。但是管理和运营人员会发现,相对于标准容器引擎, Kubernetes 技术栈(比如编排系统、 CRI 和 CRI-O )更适合用来管理复杂的生产环境。

该项目将编排工具放在容器技术栈的重要位置,同时降低了容器引擎的重要性。 CRI 的一个 Contributor 说,让 Kubernetes 支持任意容器引擎,在理念上与 Open Container Initiative 一脉相承。容器引擎可以是 docker 或 CoreOS 的 rkt ,或 OCI 的 runc (它可以做很多如 Docker 或 CoreOS rkt 这类容器可以做的事情,比如从 registry 拉镜像,但它不会从 makefile 构建镜像)。

CRI-O 是什么?

「 尽管 Open Container Initiative 类似的部分已经与 CRI-O 的职责区别越来越大,两个项目的成员、贡献者和厂商也有很大重合,但 CRI-O 仍然是 OCI 的自然延伸,它为容器引擎和镜像提供了一套标准接口。」, Kubernetes 工程师 Kelsey Hightower 在 The New Stack 的采访中说道。

CRI-O 项目的设想是用户不应该依赖任何特定的容器引擎去完成工作负载。按照最初的设想,该项目将为 Kubernetes 提供一个工具集,使其能够管理容器的整个生命周期,而不需要 Docker 、 rkt 、 OpenShift 、 Photon 或任何其他容器引擎。

「 我们对容器引擎的功能要求很少,不管是 Docker 还是 rkt ,它们要做的工作都很少 」, Hightower 说,「 我们需要的是访问内核的 API ,不仅仅针对 Linux ,也可以是 Windows 。如果这是社区想要去的方向, Kubernetes 就要支持这些想法-因为在这一点上它比 Docker 公司更大 」。

在这一假设之下,是一个新奇的观点:编排才是容器生态的中心,而“引擎”就我们所知,只是一个开发工具。

另一方面, CRI (通用容器接口 API 和 Kubernetes )将给容器引擎厂商一个机会,以便接入 Kubernetes 系统。运行容器的环境中,只要暴露出适当的连接,不需要容器引擎进行代码重构就可以兼容 Kubernetes 。

其中一个方式是,在容器引擎和编排工具中间实现一个抽象层,容器厂商如何实现这一层完全取决于他们自己。

容器引擎中间层实现以后, CRI API (与 Kubernetes 连接的部分)将把更多的容器生命周期控制权交给 kubelet —— pod 的管理者。 Pod 是 Kubernetes 特有的概念,但容器生态系统必须采用这个概念。

对于 Kubernetes ,下一个版本的目标是 1.5 版本,包括 CRI 的最终版,允许 kubelet 与 Docker , rkt 、 Hyper.sh (中国团队开发)以及 CRI-O ( RedHat 领导开发)进行通信。

“关于如何与 Kubernetes 通信,很多不同的容器引擎都非常感兴趣”, Philips 说,“与其在 kubelet 中为每一个容器引擎构建一个接口,我们创造了一个更抽象的接口,允许容器引擎去接入而不用直接参与 Kubernetes 的工作。”

谁需要重构,重构什么?

Hightower 将 CRI (“ CRI ”在“ CRI-O ”之前)描述为一个抽象的概念,代表容器引擎应该支持的基本特性,而 Kubernetes 可以用来验证这些特性。一旦 CRI 完成,将重构 Kubernetes 代码以实现 CRI 。

如果 CRI-O 成功,容器引擎厂商不需要对引擎代码库进行修改,就可以简单地与 Kubernetes 交互。

“现在,如果你想很 happy 地玩耍 Kubernetes ,必须构建一堆东西,而且可能修改你目前的做事方式”, Hightower 说,“你查看现有的代码库,看看为 Docker 做了哪些东西。在某种程度上,你需要付出类似的努力,去修改适合你的运行时引擎,从而与 Kubernetes 很好的配合。”

就像 CoreOS 的 Philips 解释的一样,每个容器引擎将利用一个中间层—— 它能够将容器引擎的 API 请求,转化成 Kubernetes 可以处理的形式。

“考虑到 CRI 的运行机制,你需要一个 GRPC daemon 去监听请求”, Philips 说,“它能与 kubelet 通信;反过来, kubelet 可以通过 socket 对实现 CRI 的引擎发送一个远程调用”。

Philips 说,“目前对 Docker 和 rkt 的支持将被合并到 CRI 接口”。 CoreOS rkt 对 CRI 的实现目前已经在 Github 上开源,项目名称为 rktlet 。不管是 rktlet ,还是 Docker 对 CRI 的实现(不管将来叫什么名字),他预计都被重构为 CRI 。

Google 的 Hightower 说:“尽管 Docker 已经要求与 Kubernetes 一起实现中间层,最终仍然是 Google 的工程师去实现,而不是 Docker 的。 Philips 也表示,不管谁去实现中间层, Docker 和其它容器引擎厂商遵循同样的规则,都不能搞特权。

“为了与 CRI 集成, Docker Engine 和 rkt Engine 都处在不断变化中”, Brandon Philips 如是说。

OCI 镜像格式的最终标准还没有确定, OCI 发言人也表明 OCI 镜像格式 1.0 发布之前还有两个迭代版本。

同时, Docker 在不断增强其容器引擎的特性,并且捆绑了 Swarm 编排工具和服务发现。

“我认为这一切进展都不错,” Philips 说,“人们可能不喜欢这样——这很正常,每个人都可以有自己的观点。对于 Kubernetes ,我们仍然会提供一包东西。但我们在创造和改进它时,不认为它仅仅是一件商品(还有情怀)。

超越 Kubernetes

“前面我们谈到 Pod ,为了正确地实现它,你还需要了解很多东西”, Hightower 说,“把负担推给容器引擎,让它们去写一拖代码才能与 kubernetes 愉快地玩耍,这一点对于每个容器引擎都很不公平。想想看:他们还要为 Mesos 和 Swarm 去实现类似功能的代码,想想都可怕。为了简化这部分功能,我们将把 Kubernetes 专属的逻辑放到 kubelet 中;对于外部而言,通过一种友好的方式使用容器引擎本来就具备的特性。

假设这已经是事实,现有容器引擎特性被隐藏在一个接口后面,该接口能够将 pod 为中心基于 kubelet 的逻辑从 kubernetes 隔离出来,与 Kubernetes 之外但有同样 API 的编排工具交互,这个编排工具对 API 可能有一套完全不同的实现方式(饼越来越大)。

我们和 Mesosphere 创始人 Ben Hindman 也探讨了这种可能性。

“我认为这个行业需要的是可拼凑的组件”, Hindman 对 The New Stack 解释说。“在 Kubernetes 案例中,我认为这很关键。 Kubernetes 依靠 Docker 做容器管理,并且他们尝试构建编排。当 Docker 整合 Swarm 时,他们不仅有一个容器管理器,也在做编排。仅仅从架构的角度来看,这是非常合理的。我想说的是:如果我们只做一个容器管理的组件,让很多人可以利用,岂不是很更好?”

对于 Docker 公司有意向将 runc 作为开放标准, Hindman 非常认同,但他也不忘吐槽:完整的编排不仅仅是与与容器引擎交互。

“还有很多,比如下载镜像、镜像打包、镜像解包 —— 还有更多的事情必须去做。

对我来说,我认为行业中还在就一个问题争论:这些东西应不应该被分解和模块化?它不仅仅是 fork the repo 那么简单,还需要在架构上解释得通。”[ Ben Hindman ]。

Mesosphere 的 DC/OS 环境中也有这些组件做铺垫, Hindman 解释说,已经无需依赖 runc 或任何 Docker 组件。容器社区的真正目标,正如他所说的,是在组件之间指定架构层面上的边界,并建立它们之间建立适当的接口。

这是否意味着 Mesosphere 支持 CRI-O , CRI-O 的目标也如 Kelsey Hightower 向我们解释的一样,与 Hindman 预计的完全兼容吗?

然而 Hindman 并不是为 OCI 呐喊,需要注意的是, Mesosphere 是 OCI 的创始成员之一。 OCI 的最初的目的是开发一种通用的运行时格式,让 runc 能够以容器的方式启动它。容器社区也关心镜像格式,包括容器在非运行状态下的文件系统和元数据。所以 OCI 也接受这套理念。

“对于我们而言,镜像格式比运行时格式更有趣,也有意义” , Hindman 说,“ Mesosphere 之所以拥抱 universal containerizer ,原因是希望支持所有开放格式的容器,包括 OCI 。”

但在这样一个最佳架构中,可能没有方法去规范工作负载的调度器。不同调度器的特性可能千差万别。因此,如果以这种方式,努力通过一个文件描述工作负载(可能是配置文件、元数据文件或 manifest 文件),并且试图对所有调度器通用,最终制定出来的标准可能满足不了任何调度器的需求,进而妨碍调度器本身特性的扩展。

但是,确定一个通用镜像格式则简单很多,最终取决于 Linux 是否支持该格式。“如果支持它,我们可以公开它。在镜像格式上,我认为没有太大的争论,因此,把它作为一个标准就 OK 。”

Hindman 总结说, Mesosphere 将继续支持 OCI ,将来会以同样的粒度支持 CRI-O 。但跟 CRI-O 相比, Mesosphere 的“ universal container runtime ”将以不同的方式被支持。

未来在编排领域,我们会看到一个激烈竞争的市场,而不是容器引擎领域。

本文由时速云翻译,如若转载,需注明转载自“时速云”

原文链接: http://thenewstack.io/cri-o-m...

——————————————————————————————————————————————————

◆◆◆ 对文章内容有什么建议的小伙伴,欢迎留言~ ◆◆◆


推荐阅读
  • 无论你是刚毕业的大学生,还是想在职业中寻求进步的经验丰富的IT专家,这些提示都可以帮你成为DevOps工程师。DevOps工程是一个备受称赞的热门职业。不管你是刚毕业正在找第一份工 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 2017年软件开发领域的七大变革
    随着技术的不断进步,2017年对软件开发人员而言将充满挑战与机遇。本文探讨了开发人员需要适应的七个关键变化,包括人工智能、聊天机器人、容器技术、应用程序版本控制、云测试环境、大众开发者崛起以及系统管理的云迁移。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • java电商,java电商项目面试题
    本文目录一览:1、为什么很多商家选择Java商城系统? ... [详细]
  • 关于ScrumXPDevOps的学习
    最近听了ECUG大会上孙敬云老师的分享感觉受益匪浅,毕竟大学课本上只讲到瀑布模型就没有下文了,工作以后一直贯彻的都是Scrum路线,一直也没有时间好好的去学习整理这部分的知识,直到 ... [详细]
  • 一家位于长沙的知名网络安全企业,现面向全国诚聘高级后端开发工程师,特别欢迎具有一线城市经验的技术精英回归故乡,共创辉煌。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • 本文介绍了 Python 中的基本数据类型,包括不可变数据类型(数字、字符串、元组)和可变数据类型(列表、字典、集合),并详细解释了每种数据类型的使用方法和常见操作。 ... [详细]
  • 在拉斯维加斯举行的Interop 2011大会上,Bitcurrent的Alistair Croll发表了一场主题为“如何以云计算的视角进行思考”的演讲。该演讲深入探讨了传统IT思维与云计算思维之间的差异,并提出了在云计算环境下应具备的新思维方式。Croll强调了灵活性、可扩展性和成本效益等关键要素,以及如何通过这些要素来优化企业IT架构和运营。 ... [详细]
author-avatar
hyc_erasme
新手上路、多多照顾
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有