Apache Mesos(6)-使用Marathon部署程序

目录
  1. 安装和配置Marathon
    1. 安装Marathon
      1. 通过包管理器
      2. 通过Tarball
    2. 配置Marathon
  2. 创建应用程序实例
    1. 部署一个简单的程序
      1. 通过web界面部署
      2. 通过JSON描述部署
    2. 部署一个基于Docker容器的应用程序

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/http://andyyoung01.16mb.com/

本篇文章我们来安装Marathon框架,并且使用它来进部署一个简单的基于命令行的程序和一个基于Docker容器的程序。

安装和配置Marathon

对于安装较新的Marathon版本(Version 1.1.2),需要满足以下的一些先决条件:

如果需要Marathon框架高可用,需要将它部署到几个节点上,就像部署Mesos master时一般需要奇数个节点一样。部署有3个实例的Marathon可以满足大多数环境的要求,这些实例使用ZooKeeper ensemble进行领导者的选举和状态的保持。
对于简单的安装,可以将Marathon部署到与Mesos master相同的机器上。

安装Marathon

通过包管理器

安装Marathon的最简单的方法是通过Mesosphere提供的安装源,使用包管理器进行安装。根据Linux的发行版,使用如下命令安装Marathon:

  • RHEL/CentOS:sudo yum install marathon
  • Ubuntu:sudo apt-get install marathon
通过Tarball

下载和解压最新的Marathon版本:

$ curl -O http://downloads.mesosphere.com/marathon/v1.1.2/marathon-1.1.2.tgz
$ tar xzf marathon-1.1.2.tgz

当然也可以从源代码编译安装,请参考https://github.com/mesosphere/marathon

配置Marathon

与Mesos类似,Marathon也可以通过基于文件、环境变量和命令行参数的方式来配置。基于文件的配置在/etc/marathon/conf/文件夹。下表列举了一些比较重要的配置:
“Marathon的配置选项”

完整的配置参数,可以参考http://mesosphere.github.io/marathon/docs/command-line-flags.html

当Marathon安装配置完成后,可以使用sudo service marathon start启动服务。如果使用的是Tarball进行的安装,需要进入Tarball的解压目录,使用如下方式启动:

$ ./bin/start --master zk://zk1.foo.bar:2181,zk2.foo.bar:2181,zk3.foo.bar:2181/mesos --zk zk://zk1.foo.bar:2181,zk2.foo.bar:2181,zk3.foo.bar:2181/marathon

上面的命令行参数,--master用来寻找Mesos masters,--zk用来寻找ZooKeeper来存储状态信息。它们是分开的配置选项的原因是Mesos master可以通过其它方式来发现。
服务启动起来后,可以通过http://marathon-ip:8080来访问其web界面。

创建应用程序实例

在Marathon框架下,每一个应用程序都代表着一个长期运行的服务,它可以是在不同主机上运行的多个实例。一个应用程序实例被称为一个任务。应用程序的定义描述了启动和维护该任务的所有内容。

部署一个简单的程序

Marathon安装完成后,可以通过其web界面部署程序;也可以使用JSON描述应用,然后通过REST的API进行部署。

通过web界面部署

如下图所示,首先点击创建应用程序的按钮,在出现的新应用程序对话框中,填入要运行程序的命令等信息,最后点创建应用按钮。新程序便部署成功:
{% asset_img 2.png “Marathon web界面部署应用”%}
{% asset_img 3.png “Marathon web界面部署应用”%}

通过JSON描述部署

在刚才相同的部署界面,右上角有一个JSON Mode,点击后便切换为JSON模式,可以在其中填入JSON的描述,最后点击创建应用按钮。新程序便部署成功:
{% asset_img 4.png “Marathon JSON描述部署应用”%}
{% asset_img 5.png “Marathon JSON描述部署应用”%}
在使用JSON进行部署时,还可以不通过web界面,使用curl命令调用Marathon提供的REST的API,例如上面的例子,可以将上面的JSON描述存为一个文本文件,文件名为hello-marathon.json,然后执行下面的命令:

curl -H 'Content-type: application/json' -d @hello-marathon.json http://marathon-ip:8080/v2/apps"

关于curl命令的详细用法请参考其man pagetutorial

注意:上面例子中Command输入框的值或JSON描述中的cmd的值是需要执行的命令。它由底层的Mesos executor通过/bin/sh -c ${cmd}包装。

部署一个基于Docker容器的应用程序

使用Marathon运行基于docker的程序,需要首先在每个slave节点安装配置好docker(版本1.0.0+),并且每个slave上的containerizers选项配置了’docker,mesos’,以及把executor_registration_timeout选项的超时延长,详细配置信息请参考http://mesosphere.github.io/marathon/docs/native-docker.html
之后可以使用与上面介绍的方法类似的步骤来部署基于docker的程序。例如下面的basic-3.json文件包含了描述docker程序的信息,一个基于Python的web服务器,使用了python:3的镜像。在容器的内部,web服务器运行在8080端口上(containerPort的值)。hostPort的值设置为0表示Marathon将会在此Mesos slave上分配一个随机端口,来映射到容器内部的8080端口上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"id": "basic-3",
"cmd": "python3 -m http.server 8080",
"cpus": 0.5,
"mem": 32.0,
"container": {
"type": "DOCKER",
"docker": {
"image": "python:3",
"network": "BRIDGE",
"portMappings": [
{ "containerPort": 8080, "hostPort": 0 }
]
}
}
}

下面可以使用HTTP API来部署basic-3程序:

curl -X POST http://marathon-ip:8080/v2/apps -d @basic-3.json -H "Content-type: application/json"