marathon參考(1)應用基礎

翻譯https://mesosphere.github.io/marathon/docs/application-basics.html
在marathon中,應用是一個完整的概念。每個應用是一個典型的長運行的服務,這個服務有很多實例,並且是運行在多個主機上。

Hello Marathon:一個內嵌的shell腳步

讓我們開始一個簡單的例子:編寫一個app,打印Hello Marathon到stdout,然後sleep 5秒,周而復始。你可以使用下面的應用定義文件(json格式)來描述應用:

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

注意:cmd是我們要執行的命令。它的值會以/bin/sh -c ${cmd}的方式執行。

mesos執行在它自己的沙箱環境執行所有的任務。這個沙箱在每個slave節點上是一個指定的目錄,其中包含很多相關的日誌文件。

在應用中使用資源

通常應用逗號依賴一些資源集。例如文件和壓縮文件等。爲了解決資源集的問題,marathon有uris的概念。它利用mesos抓取外部資源。

我們先看一個實例:

{
    "id": "basic-1", 
    "cmd": "./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 UI,點擊進入這個應用運行mesos節點的沙箱,你應該可以找到cool-script.sh這個文件。

注意mesos v0.22及以上版本,默認是不能編譯下載的可執行文件的,所以cmd應該修改爲:chmod u+x cool-script.sh && ./cool-script.sh

marathon也可以獲取駐留在壓縮包中的文件。marathon在執行cmd文件之前,執行解壓壓縮包的操作,支持壓縮包給格式爲:

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

下面是壓縮包的實例:

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

marathon還可以下載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"
    ]
    ...
}

marathon還支持下載其他很多資源,支持URI的協議如下:

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

一個簡單的基於docker的應用

使用marathon我們可以運行docker鏡像。

下面的實例中,我們注重看一個docker應用:一個使用python編寫的web服務,它使用python:3鏡像。容器內部,這個web服務運行在8080端口(這個端口號使用containerPort定義)。容器的外部,marathon分配任意個接口(hostPort設置爲0)。

{
  "id": "basic-3",
  "cmd": "python3 -m http.server 8080",
  "cpus": 0.5,
  "mem": 32.0,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "daocloud.io/library/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"

我們可以在marathon ui界面查看隨機分配的訪問端口訪問應用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章