最早的PaaS平台方案初步解决了很多客户对于应用弹性的需求,但是在容器技术之前,构建一套PaaS平台面临着组件多、量级大、改造成本高等挑战,而且对于运行在不同 PaaS 平台上的应用,很难避免应用对平台的深度依赖。譬如,不同的PaaS平台对弹性、高可用、性能、监控、日志、版本更新等的实现方式不同,则对其上应用的架构要求也不同;另外,在编程语言和技术栈方面,也会导致应用对平台供应商的深度绑定。总之,在传统PaaS平台面前,我们在开发应用时不得不配合平台的要求。 而容器技术的出现,很好的解决了上述问题。容器是以应用为中心的虚拟化环境,与编程语言、技术栈无关,比传统PaaS灵活;对应用的支撑也比底层平台多,可以发挥微服务架构的优势。同时,容器是基于轻量级虚拟化的技术,天生具有高密度的特性,可以更加高效地使用资源。
互联网和海量数据正以前所未有的增长趋势冲击着整个数据中心行业,随着互联网、电子商务、社交网络、移动办公等互联网应用的迅速发展,传统数据中心逐渐难以满足新业务的发展需求,传统数据中心面临不匹配业务的灵活变化、能耗高、运维难、密度低、不满足云和虚拟化弹性伸缩场景,也面临着应用的快速、批量、移动部署慢等问题。 软件定义数据中心负责将存储、计算、网络资源依据策略进行自动化调度与统一管理、编排和监控,同时根据用户需求形成不同的服务并提供计费等功能。容器技术可充分利用底层的各项计算、存储和网络资源,灵活构建容器应用,实现具备应用轻量级的容器承载能力、应用集群的松耦合和资源动态弹性伸缩的能力、实现可视化运维和自动化管控的能力、实现平台自动化部署和升级的能力,从而解决了容器平台对基础设施资源调用的需求,容器平台将数据中心转化成为一个更加灵活高效的业务应用平台,其开放性和兼容性契合了数据中心对异构、大规模、可移植、互操作等方面的需求,容器技术为云计算的实施提供了强有力的支撑。
传统IaaS在应用过程中面临运维方面的问题,传统IaaS服务没有从根本上加速企业内部的开发运维效率,更多的主要是体现对于IT部门的技术优化和提升一定的运维能力,运维和开发人员之间依然存在传统IT手段同样的沟通成本。容器技术三个方面的优势可以有助于解决传统IaaS面临的问题。首先,容器的本质是一种操作系统级别的虚拟化,启动一个应用容器其实就是启动一个进程,因此使得容器占用空间小、资源利用率高、本身非常轻,执行起来效率较高。这些是容器技术与传统虚拟机技术的最大差别。其次,容器技术使用镜像方式能够将应用程序和它依赖的操作系统、类库以及运行时环境整体打包,统一交付,使得运维压力大大降低。最后,容器技术与底层所使用的平台无关,容器可以在Linux平台各发行版上兼容,这意味着应用架构一旦转换为容器化并且迁移部署之后,就可以在任何云平台之间无缝迁移。
传统软件架构特性是单体应用,开发周期至少以月为单位进行发布和升级,代码一般使用一种语言开发,不同的组件紧耦合,经常依赖于公共的库,部署周期以月为单位,部署依赖人工操作,组件版本复杂,操作风险高,时间管理成本均居高不下。 将容器技术引入到开发和运维环节具有以下几个方面的优势:一是提供了交付环境一致性。从开发到运维的工作流程中,由于基础环境的不一致造成了诸多问题,但通过使用容器技术在不同的物理设备、虚拟机、云平台上运行,将镜像作为标准的交付物,应用以容器为基础提供服务,实现多套环境交付的一致性;二是提供了快速部署。工具链的标准化将DevOps所需的多种工具或软件进行容器化,在任意环境实现快速部署。三是轻量和高效。与虚拟机相比,容器仅需要封装应用及相关依赖文件,更加轻量,提高资源利用率。因此企业通过容器技术进行DevOps的实践,可较好的缩短软件发布周期,提升产品交付迭代速度,提高生产效率。
容器技术与在应用过程中需要与以下几个方面技术进行集成才能在各应用场景中进行应用。一是与IaaS管理平台集成。如果容器选择在VM中运行,就需要与VM的管理平台进行对接。在私有云场景下需要对接例如OpenStack(容器技术与OpenStack技术集成具体可参考附录C)、VMware产品;在公有云场景下,需要与公有云服务提供商,例如阿里云、百度云、AWS等公司提供的VM进行集成。二是与开发工具集成。开发工具相关技术的集成是构建持续集成、持续发布以及DevOps环境的必须条件,目前比较常用的开发工具包括Jenkins、Shippable(for Docker)等。三是与网络进行集成。不同的应用运行于容器集群时有网络的互通需求,因此容器技术在具体场景应用时需要与网络二层或三层功能模块进行集成,以达到互通。四是与存储管理模块集成。存储是应用数据存储的必备,不同的存储在性能、存储空间、易用度等方面差别较大,如果要支持更多的应用,容器平台需要内置外部存储管理插件,与存储平台进行集成。
容器技术拥有快速扩展、灵活性和易用性等诸多优势,但在容器应用过程中会遇到以下几个方面的问题:一是兼容性方面,容器版本在快速更新中,以Docker 相关技术为例,每隔1-3个月左右就有版本的升级,一些核心模块依赖于高版本内核,运维时存在版本兼容问题。二是目前容器技术没有统一的标准,例如:在容器层面有Docker Container、Mesos Container、rkt、CRI-O等众多容器技术产品;此外,Google 虽然在联合容器业界相关的厂商制定标准,但目前也未在容器方面进行完全的统一。三是管理容器环境和应用也较为复杂,不仅需要多类技术支撑,包括容器管理、编排、应用打包、容器间的网络、数据快照等,还需要增加对容器的监控。四是容器在应用过程中还需要考虑在容器间、容器与系统间的性能隔离,内核共享带来的安全隔离问题。五是在使用习惯角度上,容器使用习惯会有别于主机或虚拟机,容器技术在应用过程中大部分用户需要逐步引导才能适应容器的使用方式。
容器技术从2014年风靡全球信息技术的各个领域开始,从最初的熟悉了解容器技术的应用范围到落地容器实践过程中,业界厂商和用户都不得不思考企业级云计算架构之下,容器技术能解决什么样的问题。从2016年的业界发展趋势来判断,企业用户对应用交付提出了服务化、分布式、容器化需求,通过容器技术实现IT应用的快速交付能力是落实企业战略目标的手段之一。 当前容器技术发展速度之快,已经超越当年Docker社区对容器技术的定义范畴,它承载着对下一代云计算技术变革的诉求。容器技术主要依赖的cgroup和namespace内核技术从生产实践中可满足企业用户的需求,并且创造性地定义了以应用为中心的开发模型,伴随着应用集装箱的镜像模式,可以部署到不同的系统平台并提供应用服务。当前的容器技术在不断的扩张自己的应用场景, DevOps、云平台、CI/CD、物联网服务、安全领域、金融领域和电商领域等开始慢慢探索应用实践。当前云计算厂商在众多企业容器需求中创新并实践多种多样的解决方案,容器技术也是当前云计算时代必然经历的一次历程。 正如本白皮书中详细展示的国内外生态图厂商群体一样,在每一个基础领域都在逐步形成容器生态圈,如图4.1。本白皮书通过容器技术的分析解读帮助各行业用户能理解并参与制定各个细分市场的行业标准实践。在未来的某个时间里,容器技术实践的能力模型会被定义并评级,各行业企业会参考容器应用能力模型定义出自己的容器需求,容器技术提供商在中国开源云联盟的指导下会提供标准化容器解决方案,实现容器技术落地的双赢。中国开源云联盟容器工作组会继续肩负起国内容器技术的落地标准推广工作,并把国内的容器实践标准反馈给国际上容器社区,比如Linux基金会下属的OCI社区和CNCF联盟,为推动制定国际容器技术标准添砖加瓦。