单机版Mesos + Marathon + Deimos + Docker

最近关于Docker的Blog很多都提到了Mesos,确实是在复杂的应用环境下,如何管理集群是一个非常现实的问题。

本文就是参考各种资料,利用Vagrant+VirtualBox构建了一个单机版的Mesos环境。

1. 什么是Mesos?

Apache Mesos是一个分布式系统的集群管理软件,它能为我们需要执行的任务在复杂系统中进行资源分配等工作。

Mesos主要由4个模块组成。

  • 进行系统总体管理的Mesos master
  • 为集群提供资源的Mesos slave
  • 进行资源分配、调度(scheduling)的Framework
  • 在Mesos slave上执行具体命令的Executor

关于Mesos的架构,可以参考这里的官方说明

2. 什么是Marathon?

Marathon是Mesos的一个Framework,用来执行需要长时间运行的任务。如果把Mesos比喻成数据中心的Kernel的话,那么Marathon就是它的init活着upstart守护进程。

它还具备HA,Health Checks,服务发现等功能。

3. 什么是Deimos?

Deimos是一个Mesos的Docker接口(Plugin),Mesos的Executor,用来集成Docker容器,它是Mesos-Docker的替代产品。

4. 开始试验

4.1. 安装

如果你也用Vagrant的话,那么直接可以使用Provisioning脚本就可以了,我已经放到了GitHub上:https://github.com/liubin0329/mesos-marathon-deimos-vagrant

下载下来之后直接vagrant up就可以。

$ git clone git@github.com:liubin0329/mesos-marathon-deimos-vagrant.git
$ cd mesos-marathon-deimos-vagrant
$ vagrant up

如果是手工自己安装,可以参考install.sh脚本。

4.2. 测试

启动服务之后,就可以使用例子中的JOB测试了。

为了启动速度,我们预先pull镜像下来。

$ docker pull ubuntu

然后就可以提交Job了。

$ cd /vagrant
$ curl -X POST -H "Content-Type: application/json" localhost:8080/v2/apps -d@job.json

这个job.json很简单,其意义也很容易理解。主要是cmd这个参数,这是一个简单的理由nc命令实现的Web服务器,放8090端口的时候只是打印出Hello World而已。


{
  "container": {
    "image": "docker:///ubuntu:14 04",
    "options": ["-p", "8090:8090"]
  },
  "id": "ubuntu001",
  "instances": "1",
  "cpus": ".1",
  "mem": "256",
  "uris": [ ],
  "cmd": "while true; do echo 'HTTP/1 0 200 Ok'; echo; echo 'Hello World' | nc -l 8090; done"
}

值得注意的是如果你的机器硬件不是特别好,需要注意提交job的时候设施合适的CPU和内存使用量,否则很可能导致因为申请不到资源而不能启动任务。

5. 结束语

总的来说Mesos还是比较简单、容易上手,值得关注。

其实如果作为公司内部平台来说的话,如何在Flynn这样的PaaS或者Mesos之间选择应该也会令人头疼,可能对开发人员来说基于Git Flow的部署风格的PaaS更好一些。

不过Mesos的后台是Apache基金会和Twitter,甚至在Twitter来看,Mesos简直就是DataCenter的OS。



Posted in Docker, Tech

无觅相关文章插件,快速提升流量