别人一直问我各种容器技术有什么区别和好处,尤其是在编排方面――常常被称为“容器平台”。以白纸黑字的形式记下答案要胜过不断地重复同一个答案。
尽管一提起容器,大多数人只想到Docker(大约2014年),但是容器和容器平台实际上已经存在了好长时间。但是我们不妨先提一下大多数人了解的现代平台:Heroku、Google AppEngine、Cloud Foundry、OpenShift、AWS Beanstalk和dotCloud。
早期的PaaS时代
大约在2009年至2011年这段期间,大多数这种平台进入市场时抱着这个目标:为应用程序开发人员简化工作,“只需将代码推送到生产环境”。按照大多数人的定义,这些平台被称为平台即服务(PaaS)。在某种程度上,这种平台在为开发人员简化任务方面做得很到位,其秘诀就在于把IaaS及相关服务(负载均衡即服务、数据库即服务和身份验证等)的种种复杂性隐藏起来。不过深入底层,就会发现大多数这种平台使用某种形式的Linux容器,隔离和运行开发人员的应用程序。这些就是最初的自主开发/ DIY容器调度工具/编排工具。
不过这些早期的平台也存在一些限制:
其中一些平台只在特定的云环境里面运行;
其中一些平台只支持一两种语言;
其中一些平台是开源平台,而其他平台是封闭程度不一的专有软件;
大多数开源平台缺乏社区的大力支持。
所以在2011年至2013年这段期间,许多文章宣称PaaS已死亡、为何它没有得到大规模的采用。
开放标准涌现
而在2014年左右,发生了两件非常重要的事情。头一件大事是,dotCloud关门大吉,但是它拆分出了docker项目,简化了开发人员使用容器来包装应用程序的方式。docker用于容器包装的做法流行起来,如今这个市场有了一项用于包装应用程序的伪标准。另一件大事是,谷歌决定开源Kubernetes项目,而Mesos项目从Twitter和加州大学伯克利分校开展的工作中分离出来。这为市场提供了内置大规模要素的开源容器调度工具/编排工具方面的选择。这三大活动帮助开发人员了解在构建可扩展的容器平台时应当把精力主要放在哪里。
开放容器平台无处不在
进入到2016年至2017年后,市场与2009年至2011年的早期平台相比已有了很大的发展。几乎各大平台(或公共云)现在都支持Kubernetes或Mesos这种调度工具/编排工具,支持docker项目这种容器映像和运行时环境的格式。开放容器计划(OCI)进一步对容器映像和运行时环境的格式实现了标准化,成为不再与单单一家公司密切相关的标准。Kubernetes从开发人员那里获得支持的力度四倍于其他替代的容器调度工具/编排工具,这主要是由于Kubernetes社区具有开放性,另外由于默认调度工具支持许多类型的应用程序。
展望未来……
未来只会以迅猛的步伐加快发展。由于社区专注于开放的框架和标准,公司企业在做今后5年至10年的平台决策方面会更胸有成竹、游刃有余。