编排Orchestration这一术语来源于音乐领域,根据作曲家的作品,编曲决定音乐作品的某一部分由某种乐器以某种方式在某个时机来演奏,这一过程称为编排。
编排这一术语被借用到了IT领域,在SOA和微服务体系中,有针对Service的Service Orchestration,在Cloud 体系中,有针对云资源描述的Cloud Orchestration。随着容器技术的发展与成熟,越来越多的企业与个人选择将传统应用容器化,或者直接开发以容器为基础的云原生应用,随之将应用运行于容器平台中。面对复杂的容器运行环境,容器编排的需求随之而来,总体来说容器编排负责容器的启停调度,并且通过管理容器集群来提升容器使用率。

容器编排负责满足两方面需求:
功能需求
资源调度:统一管理集群的Memory/CPU/GPU/Volumes/IPs/Ports资源。
容器管理:统一管理容器的放置/副本/扩展/滚动部署/升级/降级/搭配。
服务管理:管理服务标签/组/命名空间/依赖关系/负载均衡/就绪性检查。
非功能需求
可扩展性/可用性/灵活性/可用性/可移植性/安全等。

典型的生产应用需要处理运行在跨主机上的容器的负载,处理跨主机和生产环境要求的复杂结构需要一些管理工具,一些流行的解决方案包括Mesos/Kubernetes/Docker Swarm。根据451 Research最近的一份调查统计,Mesos/Kubernetes/Docker Swarm占据了容器调度市场绝大部分市场份额(注:图中的CoreOS TECTONIC基于Kubernetes),本文将对这三种容器调度工具做一个比较:


Mesos是一个分布式调度系统内核,早于Docker产生,Mesos 作为资源管理器,从DC/OS(数据中心操作系统)的角度提供资源视图。主/从结构工作模式,主节点分配任务,并用从节点上的Executor负责执行,通过Zookeeper给主节点提供服务注册、服务发现功能。通过Framework Marathon 提供容器调度的能力。
Mesos主要基本概念:
Mesos Master:将作业分配给Slave节点,并将资源提供给Framework.
Mesos Slave:运行Mesos Agent ,并执行执行分配的任务。
Zookeeper:服务注册、服务发现,同时可以在高可用的环境中选取Master节点。
Framework:资源的二度调度框架,通过在Agent上部署Executor来执行计划的任务。Mesos支持的Framework 有Hadoop/Spark/MPI/Marathon,通过Marathon Framework完成容器编排的功能。


Docker Swarm是一个由Docker开发的调度框架。由Docker自身开发的好处之一就是标准Docker API的使用,Swarm由多个代理(Agent)组成,把这些代理称之为节点(Node)。这些节点就是主机,这些主机在启动Docker Daemon的时候就会打开相应的端口,以此支持Docker远程API。这些机器会根据Swarm调度器分配给它们的任务,拉取和运行不同的镜像。
Swarm基本概念:
Manager:在整个集群中分配任务,集群中控制Worker的节点。
Worker:运行由Manager节点分配的任务.
Services:跨节点的执行特定接口的一组容器。.
Key-valuestore:内建的Key-Value存储解决方案,做服务发现、服务注册以及主节点选举工作。


Kubernetes是基于Google在过去十五年来大量生产环境中运行工作负载的经验。Kubernetes的实现参考了Google内部的资源调度框架,但并不是Borg的内部容器编排系统的开源,而是借鉴Google从运行Borg获得的经验教训,形成了Kubernetes项目。它使用Label和Pod的概念来将容器划分为逻辑单元。Pods是同地协作(co-located)容器的集合,这些容器被共同部署和调度,形成了一个服务,这是Kubernetes和其他两个框架的主要区别。相比于基于相似度的容器调度方式(就像Swarm和Mesos),这个方法简化了对集群的管理.
Kubernetes基本概念:
ControlPlane:暴露应用程序接口(API),调度部署和管理整个集群。
WorkerNodes:物理或者虚拟的服务器,负责运行工作负载。
APIServer:外部与Kubernetes的互动点。
Etcd:默认采用CoreOS 的产品etcd ,提供键值存储、服务发现、服务注册功能。
Kubelet:节点上的代理,负责执行Kubernetes Master分配的任务。
Pods:由同一主机上部署的一个或几个容器组成的计算能力单位,执行相同的任务。
Services:Pods的前端和Load Balancer ,为Pods提供Floating IP。
Replicationcontrollers:负责维护指定数目的 Pods。
Labels:key-value标签以一种非层次化、松散的方式标记、查找Kubernetes中的Pods/Replication Controllers/Services等资源。
特点比较
Mesos:
经过时间的检验,作为资源管理器的Apache Mesos在容器之前就已经出现很久了,支持运行容器化化和非容器化的工作负载。可以支持应用程序的健康检查,开放的架构。支持多个框架和多个调度器,通过不同的Framework可以运行Haddop/Spark/MPI等多种不同的任务。
Docker Swarm:
从Docker1.12版本开始,Swarm 随Docker一起默认安装发布。由于随Docker引擎一起发布,无需额外安装,配置简单。支持服务注册、服务发现,内置Overlay Network以及Load Balancer。与Docker CLI非常类似的操作命令,对熟悉Docker的人非常容易上手学习。
Kubernetes:
最流行等容器编排解决方案框架,基于Google庞大的生态圈及社区产生的产品。通过Pods这一抽象的概念,解决Container之间的依赖于通信问题。Pods, Services, Deployments是独立部署的部分,可以通过Selector提供更多的灵活性。内置服务注册表和负载平衡。
容器的使用在技术中日益广泛使用,各IT厂商围绕容器生态圈,在容器运行时、容器存储、容器网络、容器安全等等各个领域,展开激烈竞争,不亚于一场战争。在容器生态方面,甲骨文继续加大在开源方面的投入,甲骨文研发团队推出三个开源工具,分别是:Smith、Crashcart和Railcar。Smith 是一个微容器构建工具,能够协助构建更轻量、更安全的容器镜像;Crashecart是一个容器调试工具,能够给开发人员提供更好的调试体验;Railcar是一个符合OCI标准的Container Runtime,是Docker Container Runtime和CoreOS rkt Container Runtime之外的另一种选择,可以在Github上找到这三个项目的开放源码。在近期的CoreOS Fest大会,甲骨文宣布会加大在Kubernetes上的投入,一方面投入更多的资源在Kubernetes开源社区,另一方面,会推出基于Kubernetes的云服务。已经有人断言:容器是未来,容器的战场在容器编排,让我们拭目以待,看谁会赢得这场容器编排之战。
作者简介
向志华,Oracle云平台高级售前顾问,专注 Application PaaS 产品及服务,同时关注Docker容器产品及Kubernetes容器调度产品方向。13年IT行业从业经验,擅长J2EE产品架构及开发,参与过Openstack相关产品研发工作。您可以通过george.xiang@oracle.com,与他联系。
了解更多,敬请关注甲骨文开发者社区......

更多精彩,请大家关注以下二维码抢先注册!





