基于Docker快速搭建(支持Docker管理的)单节点Mesos+Marathon集群开发环境

jopen 9年前
 

在进行Mesos+Marathon开发的时候,最麻烦的事情莫过于基础环境的搭建。Mesos还好有mesosphere帮忙 build好了,但是你想使用最新版还得自己make,在install的时候,还会遇到fetch code.google.com的网络问题,折腾环境的过程早已经把一腔热血泼灭了。因此为了快速搭建Mesos+Marathon单节点开发环境,使用 Docker弄了一套。

Mesos是集群资源管理系统,Marathon是运行在Mesos之上的集群计算架构。将Mesos和Marathon打包到Docker镜像中,开发者便可以在本机上快速搭建Mesos/Marathon集群,进行学习和测试。

本镜像非常简单。Docker容器运行在Ubuntu主机之上,Mesos和Marathon运行在该容器之中。具体来讲,Docker容器中运行了一个Mesos Master和一个Mesos Slave,以及Marathon和ZooKeeper。

由于很多同学搭建Mesos是为了管理Docker镜像,而且Mesos也原生支持了Docker,因此使用marathon管理Docker是 一件非常amazing的事情。但是奈何默认marathon配置没有加上对Docker的支持,因此你需要自己去配置一下启动参数和两个文件,这样才能 使用marathon管理Docker容器。

已经有同学实现了Docker搭建单节点的Mesos+Marathon环境,但是经过试用,发现只能运行非容器化的应用,对于Docker是不支持的,在log里面一直报错。

None of the enabled containerizers (mesos) could create a container for the provided TaskInfo/ExecutorInfo message

goolge得知是因为没有在mesos-slave上配置对于Docker的支持,因此需要增加配置。

首先需要在mesos-slave这台机器上install docker,这个就不详细说了,安装Docker已经是必备的技能。

为了让Mesos知道我们要使用Docker作为虚拟化工具,需要增加两个文件如下

echo 'docker,mesos' > /etc/mesos-slave/containerizers    echo '5mins' > /etc/mesos-slave/execu`enter code here`tor_registration_timeout

这两个文件的意思是,一个说我将要使用Docker作为我第一选择,然后如果不行的话再去使用Mesos。然后第二个文件是设置超时时间,因为每个image都需要pull下来,如果pull的时间太长就会被认为是超时。

这是完了这两个文件后,还需要在启动mesos-slave的时候增加一个参数。

/usr/sbin/mesos-slave --containerizers=docker,mesos --master=zk://127.0.0.1:2181/mesos --log_dir=/log/mesos >>/dev/null 2>&1 &  

这样slave就会可以支持Docker了。其实根据我最后的使用经验来看,这个slave仅仅是使用了docker-client,真正的 docker-daemon是使用的host的,这样对于端口映射就会非常简单的完成,就像你在本地机器自己装了一个Docker一样。

最后启动容器就OK了。

docker run -p 8080:8080 -p 5050:5050 --name mesos -ti -w /root -v /sys/fs/cgroup:/sys/fs/cgroup -v /var/run/docker.sock:/var/run/docker.sock single-docker-mesos

这里比较奇怪的参数是那两个-v,一个是将本地的Docker Daemon绑定到容器内部,另外一个是将cgroup绑定到容器内部,因为Docker的运行需要cgroup的支持,这样Marathon就能在容器内部管理外部的容器了。

基于Docker快速搭建(支持Docker管理的)单节点Mesos+Marathon集群开发环境

基于Docker快速搭建(支持Docker管理的)单节点Mesos+Marathon集群开发环境

最后,其实上面这些东西只要明白大概意思就可以,真正使用灰常的简单。我把代码放到 GitHub 上,你可以clone下来本地build,然后run一下就可以测试使用Marathon 管理Docker了,如果你还嫌麻烦,我把已经build好的image传到了灵雀云上,你可以直接pull下来使用,更加方便。