基于Docker搭建单机版Mesos/Marathon
摘要: 本文介绍了基于Docker搭建单机版Mesos/Marathon的方法,Mesos/Marathon的所有组件均运行于单个容器中。
GitHub地址:
- 作者: KiwenLau
- 日期: 2015-09-18
一. 简介
Mesos是集群资源管理系统,Marathon是运行在Mesos之上的集群计算架构。将Mesos和Marathon打包到Docker镜像中,开发者便可以在本机上快速搭建Mesos/Marathon集群,进行学习和测试。
kiwenlau/single-mesos镜像非常简单。Docker容器运行在Ubuntu主机之上,Mesos和Marathon运行在该容器之中。具体来讲,Docker容器中运行了一个Mesos Master和一个Mesos Slave,以及Marathon和ZooKeeper。集群架构如下图:
二. 搭建Mesos/Marathon集群
1. 下载Docker镜像:
sudo docker pull kiwenlau/single-mesos:3.0 |
2. 运行Docker容器:
sudo docker run -p 5050:5050 -p 8080:8080 --name mesos -it -w /root kiwenlau/single-mesos:3.0 |
docker run命令运行成功后即进入容器内部,以下为输出:
Start ZooKeeper... |
三. 测试Mesos/Marathon集群
1. 通过curl命令调用Marathon的REST API, 创建一个hello程序:
curl -v -H "Content-Type: application/json" -X POST --data "@hello.json" http://127.0.0.1:8080/v2/apps |
下面为hello.json。由cmd可知,该程序每隔1秒往output.txt文件中写入hello。
{ |
curl执行结果:
* Hostname was NOT found in DNS cache |
2. 查看hello程序的运行结果:
tail -f output.txt |
当你看到终端不断输出”hello”时说明运行成功。
3. 使用浏览器查看Mesos和Marathon的网页管理界面
注意将IP替换运行Docker容器的主机IP地址
Mesos网页管理界面地址:http://192.168.59.10:5050
Mesos网页管理界面如图,可知hello程序正在运行:
Marathon网页管理界面地址:http://192.168.59.10:8080
Marathon网页管理界面如图,可知hello程序正在运行:
4. 通过Marathon网页管理界面创建测试程序
在Marathon的网页管理界面上点击”New APP”,在弹框中配置测试程序。ID为”hello”, Command为”echo hello >> /root/output.txt”, 然后点击”Create”即可。如下图:
四. 存在的问题
其实,参考Setting up a Single Node Mesosphere Cluster,可以很快地在ubuntu主机上直接搭建一个单节点的Mesos/Marathon集群。但是,当我安装该教程的步骤将Mesos/Marathon集群打包到Docker镜像中时,遇到了一个比较奇怪的问题。
在Docker容器中使用“sudo service mesos-master start”和“sudo service mesos-slave start”命令启动Mesos Master和Mesos Slave时,出现“mesos-master: unrecognized service”和“mesos-slave: unrecognized service”错误。但是,我在ubuntu主机上安装Mesos/Marathon集群后,使用同样的命令启动Mesos并没有问题。后来,我是通过直接执行mesos-master和mesos-slave命令启动Mesos,命令如下:
/usr/sbin/mesos-master --zk=zk://127.0.0.1:2181/mesos --quorum=1 --work_dir=/var/lib/mesos --log_dir=/log/mesos |
/usr/sbin/mesos-slave --master=zk://127.0.0.1:2181/mesos --log_dir=/log/mesos |
由这个问题可知,虽然在Docker容器几乎可以运行任意程序,似乎和Ubuntu主机没有区别。但是事实上,Docker容器与ubuntu主机并非完全一致,而且这些细节的不同点比较坑。这一点很值得探讨,可以让大家在使用Docker时少走些弯路。对于提到的问题,虽然是解决了,然而我仍然不清楚其中的原因:(
五. Docker镜像备份
我将Docker镜像上传到了灵雀云(Alaudo)的Docker仓库,可以通过以下命令下载和运行:
sudo docker pull index.alauda.cn/kiwenlau/single-mesos:3.0 |
sudo docker run -p 5050:5050 -p 8080:8080 --name mesos -it -w /root index.alauda.cn/kiwenlau/single-mesos:3.0 |
六. 参考
- Setting up a Single Node Mesosphere Cluster
- Setting up a Cluster on Mesos and Marathon
- An Introduction to Mesosphere
- How To Configure a Production-Ready Mesosphere Cluster on Ubuntu 14.04
- Deploy a Mesos Cluster with 7 Commands Using Docker
- sekka1/mesosphere-docker
- Marathon: Application Basics
- Marathon: REST API
关于Fundebug
Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了30亿+错误事件,付费客户有阳光保险、达令家、核桃编程、荔枝FM、微脉等众多品牌企业。欢迎大家免费试用!
版权声明: 转载时请注明作者KiwenLau以及本文地址: https://kiwenlau.com/2015/09/18/150918-single-mesos-docker/