炫科技
静水潜流,开源浪潮中的容器标准化

近年来,容器技术成为云计算领域热点,绝大多数客户和开发者在提及容器时最先想到的是开源。的确, Docker、DC/OS和Kubernetes等开源社区为开发者提供了巨大的参与舞台,也为客户带来了精妙的技术,但在提及开源的同时,人们往往忽略了在容器领域另一项开创性的工作——标准化。本文从华为公司实际参与过的容器标准化工作为出发点,为读者详细解读标准在容器技术产业化过程中的重要意义。

容器生态繁荣的基石 - Open Container Initiative

把时光拨回2014年,Docker公司除了Docker Container外开始关注集群管理、overlay网络、容器镜像的分发等内容,并将上述功能全部打包在一个镜像压缩文件中。Docker公司借助自己在Docker Container上的强势地位进入到其他技术领域的行为,迅速引发了其昔日合作伙伴CoreOS的反弹,导致后者在2014年底正式推出了App Container容器规范及其实现rkt与Docker Container进行直接的竞争。

市场分裂了。在CoreOS推出自己的容器引擎后,Intel及Hyper公司也推出了基于虚拟机的容器引擎,Google、华为等公有云服务提供商也有自己的容器引擎。一旦这个趋势蔓延下去,在较长的一段时间内,容器引擎及Image格式的百花齐放将会是让开发者和客户头痛的事情。要知道,集装箱对整个社会经济的作用只有在标准化的基础上才能体现,如果每个公司制造的集装箱造型各不相同,围绕各种集装箱的运输、调度、计费的复杂系统将大大超出集装箱给人类社会带来的便利,那么集装箱对人类社会影响的基石就不复存在。

容器技术在当时面临几乎一模一样的问题,一旦没有统一的容器引擎及容器镜像的格式,容器技术的使用门槛将被抬高,直到在市场的厮杀中某一容器引擎及格式(比如Docker)占据主流。先不说各个公司能否忍受将自己的解决方案完全构建在某一个公司的技术上所带来的巨大商业和技术不确定性,在日新月异的IT技术浪潮中完全可能产生新的替代技术,让所有的容器玩家在技术分裂和争斗中痛失全部市场。

图 1 2015年6月华为及其他19位玩家共同发起OCI

当时的形式让所有容器玩家都认为应该标准化容器引擎和镜像,保证容器技术的可移植性,这是容器行业繁荣的基石,任何其他行为包括围绕容器的技术创新也必须服从这个目的。因此,包括容器引擎的领先厂商Docker、挑战者CoreOS、容器技术玩家AWS、Google、华为、微软等20个有技术和产业远见的公司联合起来,于2015年6月在Linux Foundation下成立了Open Container Initiative(以下简称OCI),正式拉开了容器技术标准化的序幕。

图 2 围绕容器标准化的争论

OCI成立之初专注于容器运行时和镜像格式的标准化。Docker将runc贡献到社区作为runtime的基础,吸引了Google、Huawei、Red Hat、SUSE参与,同时CoreOS、Docker、Google、Hyper、华为、IBM、Intel、微软、Red Hat、SUSE联合起来成立专注定义规范的项目runtime spec和image spec。在标准化的同时,华为和Red Hat又贡献了runtime tools和image tools项目来验证容器的运行时和镜像是否符合标准。

从2015年开始,围绕着容器标准化的范围、制定、遵从等问题,产业界发生了数次反复和争论(如图2所示),但最终大家都在产业共识面前达成妥协,并于2017年发布了业界第一版容器标准(如图3所示),从而初步实现了容器的可移植性。随着OCI标准的正式推出,容器圈的各个玩家纷纷表示自己的产品符合OCI标准,Red Hat也在CNCF中发起了CRI-O项目,让Kubernetes可以直接调用OCI社区的容器运行时。今年5月2号在欧洲举办的KubeCon + CloudNativeCon上,Google发布了新的安全容器技术gVisor,并强调gVisor符合OCI标准。这次发布和数年前CoreOS发布rkt给开发者和客户的感觉完全不同,因为有OCI的存在,大家不再有市场分裂的焦虑,可以单纯享受技术的创新。

图 3 OCI发布业界第一个容器标准

容器标准的演进

在OCI发布第一版标准之后,社区通过广泛讨论,CoreOS、Docker、Google、华为、IBM、Intel、Red Hat、SUSE等公司一致认为镜像分发机制也应该进行标准化,这样可以打造更加坚实的容器可移植性,让容器技术提供商和客户不再受制于单个容器引擎和registry技术,可以根据自己的需要进行相应的选择。

除了OCI, CNCF社区也在进行标准化的工作。比如定义了Kubernetes和容器引擎间的接口CRI(Container Runtime Interface),在容器网络和安全领域立项了CNI(Container Networking Interface)和TUF(The Update Framework)规范。除此以外,还有独立的CSI(Container Storage Interface)项目进行容器存储的规范探索。华为公司积极和产业玩家一起定义上述这些重要的规范,如此一来,Kubernetes技术就可以专注容器编排调度,其他玩家可以围绕Kubernetes在容器引擎、容器网络和容器存储上进行创新,并通过标准化的接口进行实现。比如,Kubernetes通过CRI成功的接入了containerd、rkt、CRI-O、kata或者gVisor作为容器引擎,容器客户也可以由CNI规范选择Tigera、CoreOS、Weaveworks或华为的容器网络解决方案。

除了制定规范本身,CNCF社区也在2017年底发布Certified Kubernetes Program来保证各个玩家的商业实现符合特定的社区规范,实际上也打通了标准制定和标准认证的关系。目前包括华为云在内的32个平台首批通过社区认证,意味着客户可以用社区兼容的工具搭配华为云的容器服务进行使用,解决了互操作性的问题,降低客户被锁定的风险。

小结

CNCF和Kubernetes是容器领域看得见的战场,架构和模块是否被社区接受考验着每个参与公司的架构水平和代码能力。但是容器产业不应该忘记那些没有硝烟的标准化斗争,正是这些公司和个人的付出,让容器产业具有稳定的基石、迅速被市场接受、并以有秩序的创新向前发展。