在 RHEL 7.1 little endian 上设置 Mesos/Marathon 集群-2
 
- UID
- 1066743
|

在 RHEL 7.1 little endian 上设置 Mesos/Marathon 集群-2
安装和设置 Mesos 从属节点确保所有 Mesos 从属节点都配置了 Docker 设置。有关在 RHEL LE 上安装和配置 Docker 的更多信息,请参阅 。
- 运行以下命令来安装需要的包:# yum install mesos python-mesos
- 配置 Mesos 从属节点。编辑 /etc/sysconfig/mesos-slave 中的 HOSTNAME 变量来指向 Mesos 主节点 IP,然后设置 MESOS_EXECUTOR_REGISTRATION_TIMEOUT 和 MESOS_IP 变量。
例如,如果 mesos-master 的 IP 地址为 192.168.122.31,mesos-slave 的 IP 地址为 192.168.122.48,则配置文件类似于:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # This file contains environment variables that are passed to mesos-slave.
# To get a description of all options run mesos-slave --help; any option
# supported as a command-line option is also supported as an environment
# variable.
# The mesos master URL to contact. Should be host:port for
# non-ZooKeeper based masters, otherwise a zk:// or file:// URL.
MESOS_master=192.168.122.31:5050
MESOS_EXECUTOR_REGISTRATION_TIMEOUT=10mins
MESOS_IP=192.168.122.48
# For isolated sandbox testing
#MESOS_master=127.0.0.1:5050
# For a complete listing of options execute 'mesos-slave --help'
MESOS_log_dir=/var/log/mesos
MESOS_work_dir=/var/run/mesos
MESOS_containerizers=docker,mesos
# systemd cgroup integration
MESOS_isolation='cgroups/cpu,cgroups/mem'
MESOS_cgroups_root='system.slice/mesos-slave.service'
MESOS_cgroups_hierarchy=/sys/fs/cgroup
|
- 运行以下命令来重新启动 mesos-slave 服务:
# service mesos-slave restart - 打开网络端口。默认情况下,mesos-slave 在端口 5051 上通信。确保它未被本地防火墙拦截。如果使用了防火墙,可以运行以下命令来打开一个针对公共区域的 TCP 端口:
1
2
| # firewall-cmd --zone=public --add-port=5051/tcp -permanent
# firewall-cmd -reload
|
Marathon UI 可在 http://mesos_master_ip:8080 网站上访问。
例如,如果 mesos-master 的 IP 地址为 192.168.122.31,那么可以在 http://192.168.122.31:8080 网站上访问 Marathon UI 链接。
通过 Marathon 部署应用程序源代码可在 网站上找到。
源代码包含用于在 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 http://192.168.122.48: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]"
连接到使用 Marathon 框架部署的服务本节将介绍如何使用 MySQL 服务来连接和使用通过 Marathon 部署的服务,并在一个示例 Web 应用程序中使用它。
源代码可在 网站上获得。示例代码拥有针对 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 http://192.168.122.48: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" ]
]
}
|
|
|
|
|
|
|