通过Docker来部署Mesos集群


【编者的话】Apache Mesos系统是一套资源管理调度集群系统,可以用来管理Docker集群,换个思路,本文介绍了如何通过Docker容器来部署一个单节点和多节点的Mesos集群,整个过程非常简单,只需要七个命令即可完成,整个步骤作者也记录到了GitHub,推荐学习。

这篇文章将教你如何使用Docker容器部署一个单节点的Mesos集群,整个部署过程非常简单,只需要七个命令。在部署之前你需要准备一个装有Docker的环境,这个非常简单,我不赘述。我们总共需要启动四个容器,分别是:
  • ZooKeeper
  • Meso Master
  • Marathon
  • Mesos Slave Container


如上面提到的,我们只需要一个可以运行的Docker Server,你可以通过任何你喜欢的方式来获得Docker,比如在本地的Vagrant中安装Docker、使用Boot2Docker、使用CoreOS或者在AWS安装。整个的部署过程我都放到了GitHub上了,包括所有的容器构建的Dockerfile文件, 你可以本地去构建这些镜像, 或者从Docker Hub上下载已经构建好的镜像。我们所使用的是Docker Hub上的镜像是:


部署步骤

第一步:获取Docker Server的IP,并赋值到HOST_IP变量中,在接下来的步骤中我们还会用到。
root@docker-server:/# HOST_IP=10.11.31.7

第二步:启动ZooKeeper容器。
docker run -d \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
garland/zookeeper

第三步: 启动Mesos Master。
docker run --net="host" \
-p 5050:5050 \
-e "MESOS_HOSTNAME=${HOST_IP}" \
-e "MESOS_IP=${HOST_IP}" \
-e "MESOS_ZK=zk://${HOST_IP}:2181/mesos" \
-e "MESOS_PORT=5050" \
-e "MESOS_LOG_DIR=/var/log/mesos" \
-e "MESOS_QUORUM=1" \
-e "MESOS_REGISTRY=in_memory" \
-e "MESOS_WORK_DIR=/var/lib/mesos" \
-d \
garland/mesosphere-docker-mesos-master

第四步: 启动Marathon。
docker run -d \
-p 8080:8080 \
garland/mesosphere-docker-marathon --master zk://${HOST_IP}:2181/mesos \
--zk zk://${HOST_IP}:2181/marathon

第五步: 启动Mesos Slave。
docker run -d \
--name mesos_slave_1 \
--entrypoint="mesos-slave" \
-e "MESOS_MASTER=zk://${HOST_IP}:2181/mesos" \
-e "MESOS_LOG_DIR=/var/log/mesos" \
-e "MESOS_LOGGING_LEVEL=INFO" \
garland/mesosphere-docker-mesos-master:latest

第六步: 访问 Mesos 页面。
Mesos Web 页面地址是:
http://${HOST_IP}:5050

mesos.png

第七步: 通过Marathon的Web页面启动一个Job。Marathon Web页面地址是:http://${HOST_IP}:8080。

Marathon 可以让你部署长期运行的Job到Mesos Slave容器上, 这个可以帮助你去检查你的集群是否启动,并且处于running的状态, 打开上面的地址后你会看到下面的页面:
marathon1.png

点击右上角的“New App”按钮,创建一个新的Job/Task, 我们这里只是输出一个”hello“到文件"/tmp/output.txt"里面,然后我们可以到容器中查看文件是否创建,并检查下这个Job是不是一直在运行。
marathon2.png

第八步: 检查Job/Task是不是在运行
接下来让我们检查下Job/Task是不是一直在Mesos Slave上面运行。
在Docker Server上运行下面的命令, 这个命令会让你进到Mesos Slave 容器中,然后再使用tail命令查看/tmp/output.txt文件里面的内容。
docker exec -it mesos_slave_1 /bin/bash
root@ca83bf0ea76a:/# tail -f /tmp/output.txt

你会看到每隔一秒钟“hello”就会被追加到这个文件中。

注意:多节点的Mesos环境部署步骤请参考这里

原文链接:Deploy a Mesos Cluster with 7 Commands Using Docker(翻译:左伟 校对:李颖杰)

7 个评论

部署了一下,体验了一把,挺好的
不错 全程无障碍!
怎么我访问marathon web界面全是黑底呢...除了黑底之外什么都没有了
不应该是docker on mesos吗, docker向mesos请求资源. 怎么反了...
我觉得也不是很靠谱啊。我尝试过在docker下面编译mesos,这个是没问题的。但是到make check的时候,mesos的testcase会有容器相关的测试。会在一个docker里面启动另一个或者多个容器,这样就失败了,无法通过make check。不过文章说有Mesos的image,这个好奇怪啊。难道这个mesos master不能执行task,全靠slave吗?
怒赞!
为何我的mesos-slave创建的时候会显示无法找到文件或者文件夹呢?

要回复文章请先登录注册