文章目录
  1. 1. 准备工作
  2. 2. 搭建环境
  3. 3. 服务发现
  4. 4. 其他方法

如果我们在marathon上部署了一个tomcat服务并希望它能暴露给外网,应该怎么做呢?Bamboo提供了一个非常方便运行的办法帮我们做到这一点。它集成了HAproxy,当marathon检测到应用挂掉并重启应用时,bamboo能够检测到并更新HAproxy的配置文件,然后自动重启HAproxy,从而无须人工干预便能持续不断地对外提供服务。

准备工作

参考《用容器轻松搭建Marathon运行环境》的准备工作一节,用vagrant搭建两台虚拟机masterslave

搭建环境

参考《用容器轻松搭建Marathon运行环境》的搭建环境一节,但是用下面这个命令来启动marathon。它相比原来的命令多了一个--event_subscriber http_callback的参数,如果不配置,便不能实现HAproxy动态加载服务的功能。

master
1
2
3
4
5
6
7
docker run -d \
--net=host \
--name=ma \
mesosphere/marathon:v0.15.0 \
--master zk://192.168.33.18:2181/mesos \
--zk zk://192.168.33.18:2181/marathon \
--event_subscriber http_callback

现在启动Bamboo镜像,在里面指定marathon的地址:

master
1
2
3
4
5
6
7
8
9
10
11
12
docker run -d \
-p 8000:8000 \
-p 80:80 \
--name=bam \
-e MARATHON_ENDPOINT=http://192.168.33.18:8080 \
-e BAMBOO_ENDPOINT=http://192.168.33.18:8000 \
-e BAMBOO_ZK_HOST=192.168.33.18:2181 \
-e BAMBOO_ZK_PATH=/bamboo \
-e BIND=":8000" \
-e CONFIG_PATH="config/production.example.json" \
-e BAMBOO_DOCKER_AUTO_HOST=true \
gregory90/bamboo:0.2.11

在浏览器打开http://192.168.33.18:8000/应该能看到下图:

服务发现

现在让我们用marathon来启动一个tomcat服务。在任意一台机器上运行以下命令,把创建tomcat服务的请求发送给marathon的REST api:

1
2
3
4
5
curl -X POST http://192.168.33.18:8080/v2/apps \
-H "Content-type: application/json" \
-d '{"cpus":0.5,"mem":200,"disk":0,"instances":1,"id":"tomcat",
"container":{"docker":{"image":"tomcat","network":"BRIDGE","portMappings":
[{"containerPort":8080,"hostPort":0,"servicePort":0,"protocol":"tcp"}]}}}'

分别刷新marathon和bamboo,就能看到它们各自多了个tomcat的服务。点击bamboo页面上的/tomcat记录最右边的加号按钮,在acl里输入path_beg -i /(表示运行在根目录上,有兴趣的话可以参考HAproxy的ACL语法),然后点击Create按钮:

顺利的话,打开http://192.168.33.18/应该能看到tomcat出现啦:

这个时候,在marathon的页面上点击tomcat这行记录,便会到tomcat application页面里。如下图选中当前的tomcat实例,点击Kill按钮:

稍等几秒,就会看到tomcat的服务运行地址从192.168.33.19:31071变成了192.168.33.19:31571,端口因机而异。再回去刷新tomcat的http://192.168.33.18/页面,是不是仍然提供服务呢?如果你手快,应该能看到503 Service Unavailable,那就多刷新两下 :) 到slave虚拟机上用命令删除tomcat容器,再观察一下,是不是一样的效果呢?

其他方法

Marathon官方还支持其它三种服务发现的方法

  1. Mesos-DNS:Mesosphere公司提供的DNS产品,不仅适用于marathon,而且适用于其它Mesos Framework。
  2. Marathon-lb:感觉上跟k8s的NodePort有点像,不过它像Bamboo那样包含了HAproxy。
  3. haproxy-marathon-bridge:现在已经不推荐了。需要在每个slave上安装HAproxy,定时更新HAproxy的配置文件。
文章目录
  1. 1. 准备工作
  2. 2. 搭建环境
  3. 3. 服务发现
  4. 4. 其他方法