使用Google发起、Kubernetes工程师开发的容器运行时接口(CRI),经过与Kubernetes或Kubernetes的商业实例(如CoreOS Tectonic)进行交互,该软件能够帮助DevOps专家管理整个“容器生命周期”。git
开发者须要容器引擎来建立和构建容器镜像,也可使用本身的模拟环境。在管理更复杂的生产环境时,管理和运营团队会发现使用Kubernetes stack——即调度框架、CRI和CRI-O——会比将调度框架和标准容器引擎配对更加方便。
另外你们要注意:光理论是不够的。在此顺便送你们十套2020最新JAVA架构项目实战教程及大厂面试题库,进我扣裙 :七吧伞吧零而衣零伞 (数字的谐音)转换下能够找到了,还能够跟老架构师交流github
该项目将容器调度工具,而非容器引擎,推上了容器栈组件的当家位置。CRI的贡献者告诉咱们,CRI容许Kubernetes使用任何容器引擎,只要该引擎符合开放容器倡议的规范,包括OCI本身的runC引擎,它能够作到品牌容器引擎如Docker和CoreOS的rkt的许多功能,包括从registry中pull镜像的功能,但不能从makefile构建镜像。面试
CRI-O是什么
谷歌开发工程师, Kubernetes引擎的倡导者和领导者,Kelsey Hightower,在接受The New Stack采访时谈到,尽管开放容器倡议已经减轻了它对CRI-O的责任(但其成员和贡献者仍是相同的供应商和相同的人),但该项目是“OCI的天然进程”,是在发展容器运行时和镜像的标准接口。网络
CRI-O项目最重要的主张是,用户不该该对建立工做负载并用以stage的容器产生依赖。按照最初的设想,该项目将对Kubernetes提供工具,使其不须要Docker、rkt、OpenShift、Photon等任何的品牌容器,就能够管理容器的全生命周期。架构
Hightower 表示,“咱们从容器运行时中须要获得的东西并很少——不管是Docker仍是rkt ,它们要作的都不多,主要是把内核的API给咱们。因此这并不只仅是关于Linux的,咱们也能够用在Windows系统上。若是这是社区想要发展的方向,咱们须要Kubernetes去支持这些想法——由于这比Docker Inc.更重要,这才是重点。”框架
此主张的潜在假设是,调度框架位于容器生态系统的中心位置,而咱们必须认识到“引擎”其实只是一个开发工具。模块化
另外一方面,CRI(经过Kubernetes开发,也是为了Kubernetes而开发的API)向容器引擎制造商们提供了一个机会,即实现Kubernetes的开放接口,这样一来,拥有容器引擎的环境即可以合理链接。据一位谷歌核心工程师表示,这些链接能够在没有容器引擎提供商“重构”引擎的状况下实现Kubernetes的兼容性。工具
相反,一个叫作shim的抽象层能够被插入容器引擎和调度框架之间。容器供应商们如何实现shim抽象层就取决于他们了。学习
完成以后,CRI API(和Kubernetes链接的部分)能够将更多的容器生命周期控制交给Kubelet——即Kubernetes专属的容器管理器,它将被容器生态系统所采用。开发工具
Kubernetesd的下一个版本,即1.5版本的目标是,包含一个定型的CRI用来使kubelet和Docker、rkt、中国的容器供应平台Hyper.sh(https://www.hyper.sh/),以及由红帽领导开发的CRI-O进行交互。
Philips表示,“许多不一样的容器运行时都想和Kubernetes进行交互,因此咱们没有在kubelet中为每个容器进行时构建单独的接口,而是建立一个更加抽象的接口,让其余人不需与Kubernetes上游工做直接相关也能够接入。
谁重构谁
Hightower描述容器运行时接口(CRI-O中的CRI)为容器引擎应该支持的基本特性的抽象。一旦CRI被完成,Kubernetes计划重构本身的代码库以实现CRI。
若是CRI-O成功了,他解释说,全部容器引擎生产者都没必要再更改引擎的代码库,只要和Kubernetes交互操做就好了。
Hightower认可,“目前,想要玩好Kubernetes,须要构建一堆东西,并且可能改变目前使用的一些方式,你必须本身查看代码库搞清楚一些东西,这就是咱们为Docker作的,如何为你的运行时引擎调整到适合你的方式,同时也适用与Kubernetes。”
CoreOS的Philips解释道,每个容器引擎会利用shim组件,它能够将容器本地词汇的API请求翻译为Kubernetes能够理解的形式。
Philips 说,“因为CRI的工做方式的缘由,你须要一个GRPC 守护进程,它会监听这些请求,并和kubelet进行交流。”反过来,kubelet会经过套接字向实现了CRI的引擎发送远程调用反馈。
“当前的Docker和rkt支持正被拉进CRI接口,”philis解释道。CoreOS的rkt对CRI的实现目前在GtiHub上,名为rktlet(https://github.com/kubernetes-incubator/rktlet)。他但愿不论是rktlet仍是Docker的实现,最终都能重构进CRI中。
Docker已经要求实现和Kubernetes之间的shim了,谷歌的Hightower告诉咱们,这个shim是Kubernetes而不是Docker的工程师生产的。Philips说,无论谁来实现CRI shim,Docker都会被重制以适应和其余人的合做。
“为了和CRI结合,Docker容器和rkt容器都在发生改变。” ——Brandon Philips,CoreOS
OCI镜像格式的最终标准还未敲定,尽管OCI的一位发言人曾告知《The New Stack》,在发布OCI镜像格式的1.0版本以前还保留两个候选版本。
同时,Docker继续加强其容器引擎,将特征联系起来,好比其Swarm 调度框架和服务发现。
“我以为一切都好,”他说,“固然可能有人不喜欢,但不要紧,每一个人均可以有本身的意见。Kubernetes——咱们也提供一堆东西。但咱们更相信咱们是在作一些商品之上的东西”
Kubernetes 及展望
“要正确实现咱们所说的pod,须要了解不少事情,” Hightower解释道,“把负担分解到每一个容器运行时的作法对这些容器运行时来讲是不公平的,想要玩一玩Kubernetes还必须实现那么多代码。这样想吧:他们还要为了Mesos、Swarm等等分别再作一些不一样的事。为了简化,咱们将把Kubernetes特有的逻辑保存在kubelet内部,而在外部,咱们只会用到本地容器运行时已有的东西。”
假设真的实现了一个能理解当前容器化语言的接口,可以抽象出面向pod、基于kubelet的逻辑,而相同的API能够和Kubernetes以外的东西对接时,能够以不一样的方式抽象出本身的逻辑。
咱们和Mesosphere的创始人Ben Hindman探讨了这种可能性。
“我以为行业真正在探寻的东西,是能够被灵活操做的部件,” Hindman 向 The New Stack解释道,“我认为,以Kubernetes为例,这很是关键。Kubernetes以往是依赖于Docker去作容器管理的,他们也曾尝试去构建调度。Docker并入了Swarm以后,他们就有了一个能够用来作调度的容器管理器。因此单从构架和工程师的角度,我会说‘咱们要是有一个作容器管理的组件就行了……这样可能有成倍的人来使用’”。
Hindman相信Docker是很想把runc做为开放标准的。但调度须要的不只仅是和运行时进行交互操做。
“还有更多的相关的东西。下载镜像、打开镜像——要作的还有不少。我认为行业中曾被普遍探讨的是,这些东西是否是应该被分解和模块化?怎么作才能在构架层面上更有意义,而不是针对一次fork。”——Ben Hindman,Mesosphere
Hindman解释说,Mesosphere的DC/OS 环境中也有这种组件,它们已经可以脱离对runc和Docker组件的依赖。这如他所说,容器社区真正要追求的目标,是肯定组件之间的架构界限,并在其中创建良好的接口。
这是否意味着Mesosphere支持CRI-O,其目标——正如Kelsey Hightower所说——和Hindman以前所说的彻底一
尽管Hindman并不表明OCI,但必须注意到Mesosphere是OCI的创始成员之一。正如Hindman回应的,OCI的初衷是发展一种常规运行时模式,并使runc能够将其做为一个容器来打开。容器化社区也十分关心镜像格式问题,其中包括容器rest状态时的文件系统和元数据。OCI也十分认同上文中的目标, Hindman表示,“其实,这比运行时格式更吸引咱们。”
至于Mesosphere为何着手去作所谓的“万能容器”,Hindman继续说道,“是为了生产面向全部开放格式的容器,包括OCI。”
Hindman说,但在这最佳的构架下,可能并无标准化的调度工做负载的方式,由于调度任务特征的差别性太大。所以,以前为了实现任何调度器均可以部署和打开,而去寻找单一配置文件、元数据文件或者描述工做负载的努力,也随着Hindman所谓“最低共同标准规范”而终止,该“规范”拥有功能集更为普遍的调度器。
而决定通用的镜像格式,相比之下就简单多了。它归结于Linux是否支持该格式。“若是Linux支持,咱们就公开该标准。我认为你们不会在镜像格式的问题上有太多争议,所以,把它当作标准是彻底没问题的。”
Mesosphere将继续支持OCI(或者叫“OCID”),Hindman总结说,也会根据支持OCI的程度继续支持CRI-O。可是Mesosphere的“通用容器运行时”会以不一样的方式进行这项支持。
市场将会变得更具竞争力,彼时市场的主角将会是调度框架,而不是被调度的内容。
最后注意:光理论是不够的。在此顺便送你们十套2020最新JAVA架构项目实战教程及大厂面试题库,进我扣裙 :七吧伞吧零而衣零伞 (数字的谐音)转换下能够找到了,还能够跟老架构师交流本文的文字及图片来源于网络加上本身的想法,仅供学习、交流使用,不具备任何商业用途,版权归原做者全部,若有问题请及时联系咱们以做处理