跨越业务应用和基础设施资源的鸿沟,工具将简单地容器化。
提起云,大家应该并不陌生,我们平时经常用的百度云盘,钉钉,阿里云邮箱等都属于云服务的范畴,与这些耳熟能详的云不同的是,容器云对于大多数人来说是一个陌生的概念,很多人甚至是第一次听说还有一种云叫容器云,然而,正是这个近几年才悄然兴起的云已经成为云计算领域的弄潮儿,那么我们今天就来跟大家谈谈什么是容器云,它和其他各种云有什么区别和联系?下面就让笔者带大家拨开云团,一探究竟。
IaaS,PaaS,SaaS :容器云为谁而生?
在介绍容器云之前,我们有必要对云计算的概貌做一个了解。
我们知道云计算的定义是一种基于互联网的计算方式,美国国家标准和技术研究院将云计算的服务方式分为:IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)。
其中,IaaS的本质是将企业所需的IT基础设施云化,主要包括网络,存储,服务器,虚拟化四个部分;PaaS的实质是将互联网的资源服务化为可编程的接口,主要面向企业开发和运维人员,通过PaaS可以实现应用的快速开发,敏捷部署和简易运维;SaaS则是大家比较熟悉的,它是构建于IaaS的基础之上,通过PaaS实现的最终展现给企业用户的应用软件,我们在企业办公中都或多或少地接触过SaaS产品。
可以通过一个简单粗暴的比喻帮助大家理解上述概念:如果你来网吧玩游戏,你看到的网络,主机,存储等基础设施可以比作IaaS,那么PaaS就是在你的电脑上还安装了操作系统,但是需要你自己开发配置游戏才能玩起来,而SaaS则是游戏都给你装好了,你只需要运行游戏软件就可以开黑了。
通过以上介绍,我们可以知道IaaS不是目的,而是基础,最终的目的是让SaaS可以更快上线,而这个目标则是通过PaaS的手段来实现的。
然而现实是传统的PaaS平台的部署方式是基于应用程序的,部署过程中会涉及到操作系统的更改、编程运行环境的安装配置、中间件的安装配置等复杂问题,通过手工或者简单自动化的方式部署低效且易错,也不能满足后期动态扩容,持续部署,简单维护的需求。为了跨越业务应用和基础设施资源的鸿沟,不管底层的IaaS是物理机,虚拟机,AWS,还是阿里云,都能够实现快速部署应用,容器技术应运而生。
容器技术顾名思义就是将应用所依赖的操作系统配置、基础软件、中间件及配置等统统打包到一个“容器”中进行安装。
传统的应用部署方式是通过操作系统的包管理器来安装应用,然而这样做的一个劣势在于,它把应用的运行,配置,库和生存周期和机器的操作系统纠缠在一起。容器技术是通过部署基于操作系统级别虚拟化的容器进行虚拟化而非通过硬件来进行虚拟化。这些容器之间相互隔离:它们有自己的文件系统,然而它们也无法看到彼此之间的进程,并且它们之间的计算资源也是有界限的。相较于虚拟机容器也更容易部署,并且因为它们是和底层设施和机器文件系统解耦的,它们可以在云和不同版本的操作系统间进行迁移。
容器技术主要包括容器引擎和容器编排两个部分,虽然容器技术多种多样,经过几年的发展,基于Docker容器引擎和Kubernetes容器编排的容器技术已经成为各大厂商的主流选择。而容器云就是基于容器技术的一个PaaS云平台,除了容器引擎和容器编排,还包括了基于底层容器技术开发出的更丰富的内容以及更友好的用户接入方式:
下面就对容器云的各个部分进行一个简单的介绍:
1、Docker:辛勤打包的码头工人
在容器技术兴起之后,各个厂商倾向于构建自己的容器标准,如CloudFoundry的Warden,OpenShift的Gear,随着Docker的横空出世,以及各大云计算厂商Amazon、Google、IBM、Microsoft、Red Hat 和 VMware等对于Docker的支持,Docker有着一统江湖的意味,甚至于有人认为Docker已经成为了容器引擎技术的事实标准。
Docker来源于一家叫dotCloud的PaaS技术服务商在2011年的核心引擎开源项目。Docker的英文原意是码头工人,这个词也非常贴切的形容了Docker要做的事情:就像下面的漫画展示的那样,Docker把和应用程序相关的东西打包到一个“集装箱”中,并且做成镜像存储到Docker仓库中,需要使用的时候就从仓库中取出这些镜像,把他们装到Docker容器中就可以运行起来了。
正如以上描述的一样, Docker之所以兴起是因为提供了一种更高级的通用的应用包,也就是大家常说的集装箱能力,有了Docker镜像和仓库标准后,就可以将源码打包,分发和部署的流程标准化。就相当于我们可以把各种复杂不同的东西打包到一个集装箱中,以集装箱为单位来定价和运输,而且有了集装箱与外界的隔离,可以运行在各种不同的环境中而不用考虑箱子内部的复杂情况对环境的依赖。
2、K8s:我们不生产容器,我们只是搬运容器的舵手
提起容器,大家更容易想到的是Docker,甚至有人将容器等同于Docker,事实上,Docker只是容器技术的一部分。当企业要大规模地将容器技术应用到生产中时,除了需要Docker提供稳定可靠地运行环境外,还需要考虑集群管理、高可用、安全、持续集成等方面的问题,而这不是单凭Docker就能解决的。这些关于容器集群管理的问题,就是容器编排问题,这正是Kubernetes要解决的问题。
Kubernetes始于Google 2014 年的一个项目。 Kubernetes的构建基于Google十多年运行大规模负载产品的经验,同时也吸取了社区中最好的意见和经验。Kubernetes这个单词起源于希腊语, 是“舵手”或者“领航员”的意思,是“管理者”和“控制论”的根源。 K8s是用8代替8个字符“ubernete”而成的缩写。正如其名字一样,在码头工人完成了将应用程序封装到集装箱后,就需要舵手来对众多的箱子进行编排和调度。
我们知道,目前的基础设施都是以主机为中心的,而随着容器技术的发展,剪断了物理机虚拟机等基础设施的束缚,特定的容器不再依赖于特定的主机,从而实现了以容器为中心的基础设施。K8s就是一个在集群主机间进行自动化部署、扩展和容器操作的提供以容器为中心基础设施的开源平台。通过K8s可以实现:
- 容器调度:按照业务需求快速部署容器到指定目标。
- 弹性伸缩:按照业务需求快速收缩和扩展运行容器数量。
- 自愈:自动替换,自动重启,自动复制,自动扩展。
- 负载均衡:保证任务均匀分布在集群的节点中。
3、容器应用层:将技术转化为生产力
上文我们介绍了实现运维大规模容器集群的两个技术基石,而容器云的最终目的是提高生产效率,只有将底层技术和上层应用层结合才能转化为实实在在的生产力。
容器应用层又可以分为PaaS服务层、界面及工具层。其中PaaS服务层通常会提供丰富的开发语言、开发框架、数据库及中间件的支持,界面及工具层是容器云和用户对接的最后一公里,好的界面和工具可以大大提高用户的工作效率,界面及工具层通常会提供自动化流程,多种用户接口,针对运维的模块和管理套件等。
通过上文我们知道,随着Docker和K8s逐渐成为两大主流的容器技术,各家厂商在容器云的底层技术使用上越来越趋于一致,在这种情况下,容器云好用与否很大程度上取决于容器应用层,而容器应用层也是各厂商最容易做出产品差异化的地方。
目前PaaS已经从早期的基于公有云提供应用交付工具,基于私有云打通业务流程提供针对业务的通用流程模块,发展到现在越来越依赖于场景驱动。除了提供上述两阶段的基础服务外,企业客户越来越需要容器应用层提供贴近具体场景的服务,比如现在风头正劲的工业物联网平台就为容器云提供了大量可以落地的具体场景。
笔者认为,随着容器技术的逐渐普及,容器云的广泛应用,PaaS厂商的竞争进入了下半场,谁能够更多更贴切地把容器应用层和具体应用场景结合起来,谁就能更有希望在茫茫云海中找到突出重围的道路。
容器云将何去何从
以上我们介绍了容器云的前世今生,容器云是基于容器引擎(Docker)和容器编排(K8s)两大基础技术,同时结合容器应用层(包括PaaS服务层,工具及界面层)构建的面向企业开发运维人员以实现快速开发,敏捷部署,简易运维的PaaS平台。那么容器云在未来会如何呢?
正所谓天下分久必合合久必分,我们看到容器技术在经历了错综复杂的竞争后逐渐趋于统一,笔者认为未来一定还会出现各种底层技术的变动,然而万变不离其宗的是容器应用层最大程度地满足客户的应用场景需求才是能使容器云真正落地的关键所在。
风起云涌时,容器正当道;落地生根日,应用是王道。