老肖在MesosCon有话说 | 用SwarmKit玩转Mesos Cluster

感恩节过后,小数继续一本正经地和大家说干货~ 今天带来的是 数人云CTO肖德时在MesosCon的演讲《Shipping Mesos Cluster with SwarmKit》,都说Mesos高冷又复杂,想玩转Mesos,很多人都卡在了第一步上面,这怎么行!让老肖来告诉你,用容器的方式去玩Mesos,就是这么简单——

数人云是一家开源技术驱动的创业公司,我们能折腾,爱折腾。国内的Mesos开发者都知道Mesos这个技术很好——但是Mesos技术最重要一点就是首先要会搭建Mesos Cluster。

Mesos为何专家多,新手少?

大家有没有数过Mesos configure到底有多少个项?master和agent组件加起来包含120项,可想而知非常复杂。即使知道如何配置,仍然要根据产品要做优化。国内的网络非常复杂,并不是像国外一样用Amazon点一下就出来,国内有OpenStack和其他很多环境,如何解决网络问题、监控问题、Cluster管理问题?Mesos Unified resource management可以,但是也非常复杂。由此引出了我的一些想法:应该如何管理,如何分发这个好的软件。容器的出现指引了一个方向,至少容器是有能力去解决这个问题的。

第二个情况,Mesos的开源软件非常好。但是安装的时候,国内用户却没有一项是可以用的。这个“不可用”意思是看不到一项中国地区用的OS,国内使用的最多的环境可能是 CentOS,但是这里看到的大量的优化都在Ubuntu、Amazon等其他上面。有人说看到了Vagrant,单机版开发者可以随便用,但是它的下载都是十几G,下完以后对于国外来说就OK了,可以把DCOS和Mesos很方便地起来了。但是真的下完以后会发现它要做初始化,需要把Mesos的Cluster slave再下一遍。

所以数人云在国内推广Mesos有一个问题,我们总说Mesos很好,但是很多人并不会用Mesos,只会用Docker。Docker run一条命令就解决的问题,为什么Mesos做不到?Mesos社区的人说很简单,用Mesosphere package和rpm就可以装完了。但是这样的操作对于开发者来说,对于Mesos的new user来说是非常难的,而他们恰恰是社区里面最重要的一些用户。所以MesosCon来了很多专家,却很少能看到新手。

我们爱折腾,Mesos足够复杂

没关系,用Docker的技术可以解决这些问题,Mesos一样很酷。

数人云是个创业公司,所以很能折腾,把安装Mesos Cluster这件事遍历了一遍后,首先要用Ansible解决环境检查的问题,推进MesosCluster非常方便的部署起来,不管在开发环境、生产环境还是集成环境都可以装。

第一要解决的是NTPD的同步问题,第二是Zookeeper的配置问题,如果要启动replicate模式的话,需要手工先配好Zookeeper的配置。Ansible写一个脚本,slave的参数要配对,真正的用户在配slave时是没有技巧的。但是因为Mesos社区在国内的断层,用户很少有资源可以学习。实际上Mesos是很方便的,只要一条命令就能解决。

为什么在国内用容器的方式去解决这个问题也是非常痛苦呢?因为即使是国内业界最领先的IDC或者说IaaS厂商,仍然对容器技术不是特别了解,或者说不是非常在意容器。业内Top1的国内IaaS厂商的网站,提供了一个叫Container Service的服务,但是Docker image下载不了,要加一个加速器,但是看标红的地方,它的配置是过期的,这就是我们的业界环境。任何事情都有两面性,Mesos社区需要大家的帮助。

Mesos足够复杂,其分布式部署的方式在国内面临很多问题。举个简单的例子,当我们真正把Mesos带给客户的时候发现国内的用户网络为了安全考虑,设计一台机器一个网段,局域网内的机器不能互访,必须通过上层交换机才可以访问。还有一种情况是只有2台主机安装一个高可靠的Cluster,Zookeeper要保障 quonum 数为奇数才可以一致性,而客户提供了四台电脑,又该如何做?资源全部由 master 占用,slave 无法充分使用资源,其中有很多挑战。

这是数人云去年在Mesos上的架构,如果不断地去思考和容错,Mesos这个系统会做的非常复杂,因为它解决的不仅仅是Cluster,还有监控报警等问题,这是一张真实的架构图,Mesos价值就在于解决了复杂的问题。但是今年我们应该把Mesos简化,Mesos的Kernel这个概念很不错,许多开发者包括一些国内的开发者一直在贡献代码。

Mesos看上去简单,其实很复杂,有120多项参数,与Kubernetes相比,后者才是真正复杂,但是Kubernetes的好处在于它的配置项少。因为Mesos是按照生产级别的角度去设计的,而Kubernetes的思维是它的技术最好,所以先拿出一份Google reference,但是没有经过生产验证,Google内部也不使用。它们方向不一样,其结果也不一样。

将Mesos变简单的三种尝试

今天分享的主要目之一,就是想让Mesos的Cluster安装的这件事变的简单一点,或者让大家学会Mesos的用法。

第一,最好用的工具是MiniMesos,用一键的方式,一运行就起来了。但是有一个问题,业界的软件发展速度特别快,开发者比较挑剔,我用的正好是Mac,装上native Mac Docker client以后就跑不了,昨天去社区问了一下,立刻被merge了,原来是几个月前的问题了,虚拟机对外的 proxy端口没有打开,然而却被遗忘了。

在国内有一个问题是GitHub上的Https下载必须要有VPN,如果没有VPN玩不了Mesos,而老外发现不了这个问题。那么请装一个VPN,这是第一种尝试。

Mesos社区是非常可爱的,有事可以赶紧催它,很多人说自己没有贡献代码,但其实Option是非常重要的。虽然不是native speaker,也应该用英文去交流,可以从中学到很多东西,社区就是这样互助友爱的形式。

第二种方式,Compose。Docker Compose把Mesos的Zookeeper、master、slave、镜像等都编排好,然后用Docker-Compose空格OUT一起,Cluster就起来了。这种方式又进步了一点,它是个单机版的port,没有环境依赖,不会遇到VPN的问题,直接起就可以,国内有很多这种内部的镜像仓库,所以这会得到非常好的体验。

Mesos永远在说的问题是什么?它是一个Cluster,一个分布式系统,不能在单机上玩,对一个爱好者或者newcome来说,在多台机子上跑才是最好的体验。

接下来的尝试是重点,Swarm的功能虽然不能替代Mesos,但是是一个非常好的分发工具。它非常简单,只要安装一个binary,Docker现在binary分了几个,但是可以理解成一个。Docker内嵌了一个分布式的编排library,而且完全reference Mesos的特性,三行命令就可以创建一个Cluster。它用API的方式来去管理这些Cluster,其内部有一个raft 算法保证一致性系统,没有依赖,不需要再装一个Zookeeper。

如果只是把它当成一个工具,并不需要它永远是稳定的,只要在有限的范围内体现用处。在给新手和用户介绍时候非常方便,可以用它帮助介绍Mesos Cluster,并且支持负载均衡。现在即使把Mesos slave、agent、Marathon都装上,仍然没有服务发现的功能,因为Mesos的组件是非常标准化的,它希望这层东西有上层来支持,但是Docker的设计是什么都放,虽然不是production ready,但是作为一个工具非常好,也是开发者最想要的all in one。它内部的系统是CI加密的,自动生成,自动授权,网络状态它自己会同步,满足开发者的需求。

这张图是Swarm内部最核心的架构图,有master和agent,和Mesos Cluster的区别在于没有学习成本,都是现成的。它最多有一个docker daemon,而docker daemon在慢慢被去掉。Docker正在走一条它的路,从现在来看,Kubernetes也在被去掉,也许过两天某些feature也会被拿掉。

但是Mesos的每个功能都是有设计文档的,有design、docreview的,所以Mesos每加一个feature,绝不会过两天丢掉再换一个。Mesos非常重视用户,它的每一件事都非常稳定,参加邮件列表会知道,它发布release的时候,如果有任何的异议它是不会发的。

那么Swarmkit有什么好处?它的用户非常多,从全球来看,Swarm、Kubernetes社区是相当庞大的社区。Swarmkit刚推出来的时候一堆的bug,无法使用,但是依然很多人感兴趣去尝试。它修bug非常快,没有什么design。看板上一百多个bug,在一个月之内就全修完了,这个速度不是一般的开源项目能做到的,可见它的社区热度特别高。

我们的做法很简单,使用镜像包装Mesos组件,打完镜像用Mesos的Swarm模式分发Mesos Cluster。

然后使用DAB,这种最新的DSL语音过程来分发。它和Docker一样的体验,一键部署,之后会有demo为大家演示。

普及一下,Swarm跟Mesos一样有master和slave,所以这里用vagrant起到三个容器来做演示,有一个master,另外两个用另外一种术语,一个叫manager,一个叫worker,demo中有两个worker。它们三个要进行通信的话都会暴露一个HTTP的接口,这是Docker的一些特性,可以忽略不计。这是基于DockerSwarm做的控制面板,主要是为了演示方便,其实用命令行就可以解决,3行命令:第一行,Docker swarm init,第二行Docker Swarmjoin token,拿到一个token,第三条命令Docker Swarm join,把token加上即可连上,非常方便。

但是Mesos的Cluster从来不会有这种情况发生。Mesos的配置有120项,Swarm只有三条命令,没有配置。所以它作为一个分发工具非常方便,这是一个极端的例子,用一个面板去管这些机器。

Stack的概念是Docker提出来的,类似POD的概念,里面有service,不再细说。

Demo里发了四个应用,如果要在Swarm上发布应用,点一下2048的应用,然后再点一下descovery,应用发布以后,Docker的Swarm有一个功能是服务发现。无论把应用装在哪台机器上,从任何一台机器、任何一个端口都可以访问到这个服务,这就是Docker的服务发现。它用了一个IPVS在kernel层的技术,是LVS里面的一个很老的技术了。而Mesos认为这个并不在它的scope里面,Mesos的生态圈是一层一层组建的,绝不是all in one。Docker的这个Cluster非常方便,它可以任意的去分发镜像,也可以服务发现。

我发了两个slave,这时就轮到Docker的作用了,也是今天在三台虚拟机上架设Cluster的原因。Docker的目的是快速分发,最重要的分发就是agent,agent可以随意的扩张和减少,比如现在变成三个,配置都是一样的,它可以快速地自由收缩。

Mesos master是可以实时发现的,很多容器用户最关心的就是这个,容器能动态扩缩,这个特性应该和Mesos爱好者展示一下,他们没有体验过这种feature,但是要模拟这个实验非常复杂,所以这里用Docker Swarm的控制面板来方便地管理。

用三个DAB文件下发,就可以组建一个这样的Cluster,然后把DAB文件组成了一个Mesos Cluster,非常快,这正是Docker轻量级的特点。

总个结

使用Mesos最大的问题在于第一步如何安装,用容器的方式去安装部署Mesos Cluster是最好最方便的一种方式,而且能把Mesos Cluster feature、动态的特性完整的展现出来。用单机版展现不出来,用多机版又没有一个标准的可复制的环境,配置非常复杂。而现在DAB文件和镜像都是现成的,社区里面有很多镜像,只要有一个DAB文件,然后通过控制面板可视化地部署完成,非常简单。

此外,我们认为Marathon的一些特性满足不了使用Mesos的需求,数人云在调度器方面做的一个开源的组件——Swan,做到了Marathon没有做到的一些很好的feature,大家有兴趣可以去GitHub看一下(https://github.com/Dataman-Cloud/swan)。

我的分享就到这里,谢谢大家。

小数提示:想看视频回放和Demo的同学,可以点击“http://t.cn/RfI3W3b” 在线观看哦!