Mesos、Kubernetes和Swarm比较指南

本文展示如何为您选择最好的容器编排?

正如Marc Andreesen所说,“Software is eating the world”,所以现在所有公司,无论他们的时间长短火大小规模正在转型为软件公司。

随着这些公司软件组织的成熟,他们将需要改变对软件架构的思考方式,包括团队和软件的平台的思考方式。

70年代,整个应用程序运行在尘土飞扬的数据中心的一个“大型机”上非常良好,但现在企业是运行在云端的高可用性软件,同时他们的敏捷团队倾向于快速交付。

在过去,软件团队在那些大型机器中运行了数百万行代码的庞大应用程序,但是现在越来越多的公司采用“分而治之的策略”,而不是一个“Monolith单片整体”,你的应用程序被分为十个甚至数百个较小的应用程序。 我们称这些小应用程序为微服务。

运行许多微服务可能很复杂,因此管理它们需要一个协调器(有时也称为调度程序),用于跨数据中心发布分布式服务。 调度器有很多选择。

这篇博客文章将讨论调度器是什么,以及如何选择最适合您团队需求的调度器。

微服务是真棒
有很多文章已经对什么是微服务和为什么要采用它们进行了长期论述。因此,我们这里不再解释为什么它们很棒,我们只强调一些最好的特点:

1.微服务具有较小的代码库,构建起来更快,并且更容易测试和维护
2.微服务允许在整个组织中标准化工具
3.微服务通过将代码的关键任务部分与较低优先级的其他任务分开来以降低风险

所以,你决定你想“做微服务”
假设您已经使用微服务进行了beta测试,您的团队已在您的数据中心部署了第一个或第二个微服务。 慢慢地,你意识到这些部署不会像你想要的那么快...

什么减慢了微服务部署
传统的配置周期可能需要长达6周。

a. 不得不处理依赖和基本映像image
如果你想运行一个服务,你需要一台机器来运行它。对于这台机器不仅需要访问它必须运行的代码,还需要访问整个环境。 这台机器需要一个Java / Ruby / PHP环境,包括所有的packages / gems / modules等代码依赖的任何静态库。

虽然像工具封隔器简化了创建基础image,但是维护多个不同的image可能会非常耗时。

b. 不断更新您的基础设施
每当您更改有关您的环境(证书,凭据或依赖关系)时,您需要将这些更改传播到整个基础架构。
像工具T Terraform, Chef 和 Puppet 简化了您的基础架构更新,可以在你的云供应商创建依赖关系(AWS,Azure,谷歌云引擎等)

C. 拥有和维护多个可用区是不容易的
为了保证您的应用程序正常运行,重要的是有冗余服务。拥有多个可用区域现在是任何大型软件公司的基本要求。 但是,即使将基础架构作为代码的这种方式也是很不容易的,需要保持所有区域的同步,这对于即使是最好的开发和运营团队来说也是艰巨的苦差事。

容器救援
微服务可以以多种方式运行,或者直接运行在现有应用程序的机器上(会导致单点故障和维护噩梦),在单独的机器上(更昂贵),或者运行在编排器上的容器中,后者提供了应用程序的标准部署策略。

容器是一种低级虚拟化方法,它不是创建整个全部的虚拟机,只是创建一个仅包含应用程序代码+环境的映像。 这允许单个机器运行多个容器,而不必处理应用程序环境或依赖关系。两种最流行的是LXC和RKT。

在容器中运行应用程序提供了最灵活的方法,包括优化特定应用的使用,同时允许根据需要进行扩展服务。

使用调度器来管理容器而不是机器
调度器是您的应用程序居住的ship。调度器有不同的颜色和尺寸,包括从高贵的Kubernetes Nomad groups到Docker swarm。
最流行的调度程序是:
1.Mesos(Mesosphere)
2.Kubernetes(Google)
3.Nomad(Hashicorp)
4.Docker Swarm(Docker)
5.Cloud Foundry(Pivotal,HP,IBM,其他)
6.OpenShift(Redhat)

他们有什么不同?
虽然大多数调度程序运行Docker(或rkt)容器,但它们在两个主要方面策略和功能上有所不同。
策略:
1. Monolithic单片整体:Hadoop YARN,Docker swarm
单片战略有一个单点协调,知道整个系统的整个状态,并做聪明的分配。 它们通常是漂亮的静态系统,例如YARN,它允许在同一个硬件上运行像Hadoop和Spark这样的东西 -所以没有太多的可移动部件

2.双层(悲观并发):Mesos
两层调度程序比较自由:一个中央授权机构为运行在其上的每个框架提供资源,这些框架接受他们认为合适的资源。 因此,如果我们使用Mesos作为调度器,那么作为一个消费者,我们实际上会谈到像Marathon这样的一个框架,例如启动长时间运行的进程。

2.共享状态(乐观并发):Nomad,Kubernetes。
有共享的状态调度器,这些家伙启动容器最快。Nomad有一个基准测试,他们在5分钟内在5k个节点上启动1mm容器。 相当了不起。

对于大多数应用程序,策略并不重要,因此我们大部分将专注于功能。

功能 :



上图说明如下:
1.企业支持
除了Google之外,所有提供商都可以使用企业支持。Kubernetes支持仅适用于其GCE云产品,但有一些第三方提供商提供支持。

2.多数据中心/可用区支持
并非所有调度程序都支持多可用区。

3.Bare Metal裸机
大多数调度器除了Cloud Foundry以外可以安装在数据中心内的“裸机”或物理机器上。 这可以节省你对管理程序许可费用。

4.Volume卷安装
卷安装允许跨容器部署实现持久存储数据。 这是一个关键的区别,取决于您的应用程序的需求。 Mesos是这里的领导者,Kubernetes正在慢慢赶上。

5.安全管理
安全管理是一个很大的配置编排,它不会在你开始使用调度程序时消失。Docker和Mesos在这里没有内置的解决方案。

如何选择?
这是棘手的地方,所有的解决方案运行容器并扩展得很好,你最好需要选择一个适合你的工程团队。

1.功能方面
功能差异可能看起来很小,但是它们最终会非常显着,具体取决于您的应用程序需求。 例如卷的持久和私人私有dock注册支持通常是一些平台的限制。

2.合规性需求
您有严格的审核能力或合规性需求吗? 只有Cloud Foundry提供任何类型的用户/权限模型,它可能是太基本的您的要求。

3.动态支持
随着调度器越来越受欢迎,更多的选项每天都会出现

4.成熟度
下面是创建日期:
Cloud Foundry - 2011
Mesosphere - 2013
Kubernetes - 2014
Nomad - 2015

A Handy Guide to the Mesos-Kubernetes-Swarm Jungle

[该贴被banq于2016-11-24 10:26修改过]