Marathon(1):Application 基础

Application基础

Application在Marathon中是一个完整的概念。每个Application通常代表一个长期运行的服务,其中会有在多台主机上运行多个实例。一个应用实例被称为任务(An application instance is called a task)。在应用程序定义(application definition)描述了启动和维护任务所需的一切。

Hello Marathon:内联Shell脚本

让我们先从一个简单的例子:每5秒钟打印一个Hello Marathon到stdout,无限循环。你可以使用下面的JSON应用程序定义来描述应用程序:

{
    "id": "basic-0", 
    "cmd": "while [ true ] ; do echo 'Hello Marathon' ; sleep 5 ; done",
    "cpus": 0.1,
    "mem": 10.0,
    "instances": 1
}

注意,cmd在上面的例子中是被执行的命令。它的值由通过底层Mesos executor 封装成 /bin/sh -c ${cmd}

这里写图片描述

当你定义和启动应用程序,Marathon将执行传递给Mesos。Mesos会为每个任务创建一个sandbox目录。sandbox目录是每一个agent节点(Mesos-slave)上的目录,充当一个执行环境,并包含相关的日志文件。在stderrstdout流也写入的sandbox目录。

在Application中使用资源

要运行任何不平凡的应用程序,通常依赖于资源的集合:文件和/或压缩包。为了管理资源分配,Marathon有URIs的概念。URIs使用Mesos fetcher做下载(和潜在)提取资源方面的辅助工作

在我们深入这个话题,让我们看一个例子:

{
    "id": "basic-1", 
    "cmd": "`chmod u+x cool-script.sh && ./cool-script.sh`",
    "cpus": 0.1,
    "mem": 10.0,
    "instances": 1,
    "uris": [
        "https://example.com/app/cool-script.sh"
    ]
}

上面的例子主要做了以下工作:在执行cmd前,下载资源https://example.com/app/cool-script.sh(通过Mesos),并使其在应用任务的sandbox中可用。你可以通过访问Mesos UI检查这些下载,点击进入Mesos工作节点的sandbox,你现在应该找到Mesos下载的cool-script.sh。

注:由于Mesos v0.22及以上版本,fetcher代码默认不会使下载的文件的可执行文件默认情况下。在上面的例子中,cmd首先使该文件的可执行。

正如上面已经提到的,Marathon也知道如何处理压缩包中的应用程序资源。目前,Marathon(通过Mesos,并在cmd执行前)首先尝试解压缩/提取资源具有以下扩展名的文件:

  • .tgz
  • .tar.gz
  • .tbz2
  • .tar.bz2
  • .txz
  • .tar.xz
  • .zip

通过下面的例子来演示在实际情况下是什么样:假设在这个地址下https://example.com/app.zip,有一个可执行的应用的zip。这个zip文件包含脚本cool-script.sh,这就是要执行的脚本。具体方法如下:

{
    "id": "basic-2", 
    "cmd": "app/cool-script.sh",
    "cpus": 0.1,
    "mem": 10.0,
    "instances": 1,
    "uris": [
        "https://example.com/app.zip"
    ]
}

需要注意的是在对比的例子basic-1,我们现在有一个cmd看起来如下:app/cool-script.sh。这来是由于zip压缩包被下载并解压,目录app根据文件名app.zip创建的。

还需要注意的是,你还可以指定许多资源,而不是唯一的一个。所以,例如,您可以像下面一样提供一个Git仓库和一些CDN资源:

{
    ...
    "uris": [
        "https://git.example.com/repo-app.zip", "https://cdn.example.net/my-file.jpg", "https://cdn.example.net/my-other-file.css"
    ]
    ...
}

在开发和部署阶段的典型模式是,将app binary放置在一个可以通过URI下载 的自动化构建系统中。Marathon可以支持很多类型的资源,支持以下URI schemes

  • file:
  • http:
  • https:
  • ftp:
  • ftps:
  • hdfs:
  • s3:
  • s3a:
  • s3n:

一个简单的基于Docker的应用程序

用Marathon可以很简单的用Docker镜像运行应用程序。参见在Marathon上运行Docker容器了解器进一步的细节和高级选项。

在下面的示例应用程序定义中,我们将关注一个简单的Docker应用程序:一个机遇Python的的Web Server使用Python:3镜像。在容器内,Web服务器使用端口8080containerPort的值)。将hostPort设置为0,使Marathon就可以在Mesos slave(Mesos新版本上逐步将slave的名字改为agent)上随机分配端口,并把它到映射到容器内端口8080。

{
  "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://10.141.141.10:8080/v2/apps -d @basic-3.json -H "Content-type: application/json"

这假定您已经将上面的JSON保存到一个名为basic-3.json的文件中,并且使用playa-mesos,一个基于Vagrant的Mesos sandbox环境,用来测试我们的部署。当您提交上述定义到Marathon,你应该会在Marathon界面上看到像下面的界面(用于任务和配置选项卡,分别对应)。

这里写图片描述

这里写图片描述

这项练习的结果是,Marathon在Docker容器中运行了一个基于Python的Web Server,通过地址http://10.141.141.10:31000就可以访问容器根目录提供的服务内容。


参考资料:

[1]: http://mesosphere.github.io/marathon/docs/application-basics.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值