打开网络端口。默认情况下,mesos-slave 在端口 5051 上通信。确保它未被本地防火墙拦截。如果使用了防火墙,可以运行以下命令来打开一个针对公共区域的 TCP 端口:
1 2
# firewall-cmd --zone=public --add-port=5051/tcp -permanent # firewall-cmd -reload
Marathon UI 可在 mesos_master_ip:8080 网站上访问。
例如,如果 mesos-master 的 IP 地址为 192.168.122.31,那么可以在 :8080 网站上访问 Marathon UI 链接。
通过 Marathon 部署应用程序源代码可在 https://github.com/bpradipt/docker-mysql.git 网站上找到。
源代码包含用于在 Intel 和 Power (ppc64le) 系统上构建 MySQL Docker 镜像的 Docker 文件和相关设置脚本。
在以下示例中,192.168.122.48 是运行 Mesos 服务器和 Marathon 的系统的 IP 地址。
您可以使用 Marathon UI 或直接使用 REST API 部署应用程序。例如,以下命令使用了 Marathon 的 REST API 部署应用程序::
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
curl -X POST :8080/v2/apps -d @mysqlcontainer.json -H "Content-type: application/json" #cat mysqlcontainer.json { "id": "mysql", "cpus": 0.5, "mem": 64.0, "instances": 1, "container": { "type": "DOCKER", "docker": { "image": "ppc64le/mysql", "network": "BRIDGE", "portMappings": [ { "containerPort": 3306, "hostPort": 0, "servicePort": 0, "protocol": "tcp" } ] } }, "env": { "MYSQL_ROOT_PASSWORD" : "password", "MYSQL_USER" : "test", "MYSQL_PASSWORD" : "test", "MYSQL_DB" : "BucketList" } }
非零的 hostPort 会导致分配一个随机端口。也可以显式指定 hostPort 值。确保 hostPort 中指定的端口包含在一些资源信息中。例如,如��除了默认端口范围 31000 到 32000 外,还需要使用端口范围 7000 到 8000,可使用以下选项:
–resources="ports(*):[7000-8000, 31000-32000]"
本节将介绍如何使用 MySQL 服务来连接和使用通过 Marathon 部署的服务,并在一个示例 Web 应用程序中使用它。
源代码可在 https://github.com/bpradipt/sampleflaskapp.git 网站上获得。示例代码拥有针对 Intel 和 PowerPC LE (ppc64le) 架构的 Docker 文件。
使用 Docker 链接连接到一个服务
部署服务后,必须发现和连接该服务,也就是说,必须从一个应用程序链接到该服务。一个服务可依赖于另一个服务。因此,链接容器很重要。
在使用 Marathon 链接服务时,请注意以下几点:
Mesos/Marathon 没有一种方法来使用 Docker 链接别名。因此,如果您的应用程序配置依赖于一个链接别名,它可能不起作用。例如,如果 Web 应用程序依赖于一个数据库容器,而且为环境变量使用数据库链接前缀(DB_PORT、DB_TCP_ADDR 等),请确保应用程序配置不依赖于链接别名前缀。
链接的应用程序和服务需要部署在同一个主机上,它们才能通信。
使用 constraints 参数将链接的容器部署在同一个节点上,如下面的示例所示:
1 2 3 4 5 6
$ curl -X POST -H "Content-type: application/json" localhost:8080/v2/apps -d '{ "id": "sleep-cluster", "cmd": "sleep 60", "instances": 3, "constraints": [["hostname", "CLUSTER", "a.specific.node.com"]] }'
要使用上述代码,可以使用 hostname 参数启动 mesos-slave,如下面的示例所示:
1
# mesos-slave --master=zk://192.168.122.48:2181/mesos --containerizers=docker,mesos --executor_registration_timeout=10mins --ip=192.168.122.253 --hostname=Ubuntu
使用 Marathon API 启动链接的容器
该设置是在一个基于 OpenPOWER(PowerPC 架构)的环境中进行的。但是,您可以为基于 Intel 的环境使用相同的指令。
将目标容器名称指定为 link 键的值。此外,使用 constraints 参数确保新容器部署在运行目标容器的同一个主机上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
curl -X POST :8080/v2/apps -d @flaskcontainer.json -H "Content-type: application/json" # cat flaskcontainer.json { "id": "flaskappcontainer", "cpus": 0.5, "mem": 64.0, "instances": 1, "container": { "type": "DOCKER", "docker": { "image": "ppc64le/flaskapp", "network": "BRIDGE", "portMappings": [ { "containerPort": 80, "hostPort": 0, "servicePort": 0, "protocol": "tcp" } ], "parameters": [ { "key": "link", "value": "mesos-b81f9a21-3133-49de-acf6-988226eb6874-S18.5d3dcaa7-05c6-4a5b-af68-dba32b7d1835"} ] } }, "constraints": [ [ "hostname","CLUSTER","ubuntu" ] ] }
使用 mesos-DNS 发现和连接服务
mesos-DNS 创建应用程序来对 Mesos 集群中运行的每个应用程序建立 IP 地址和端口号映射。