在 RHEL 7.1 little endian 上设置 Mesos/Marathon 集群(3)

打开网络端口。默认情况下,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]"

连接到使用 Marathon 框架部署的服务

本节将介绍如何使用 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 地址和端口号映射。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3bdc2089e653c52f31beb667a3cb34c0.html