marathon參考(6): 約束Constraints

約束控制程序運行,允許優化容錯或指定應用運行位置。約束由3個部分組成:field名稱、操作符和一個可選參數。這個field可能是slave主機名或任何mesos salve的屬性。

屬性Fields

Hostname Fields

hostname屬性匹配slave hostname,參看UNIQUE操作符的實例。
hostname字段支持marathon所有的操作。

Attribute field

如果這個字段名稱不是以上提到的,它將被視爲mesos slave屬性。mesos slave屬性是一個標記slave節點的方法,參考mesos-slave –help獲取更多屬性信息。

如果在slave節點上指定的屬性沒有定義,大多數operator將拒絕在slave節點上運行程序。實際上,只有UNLIKE operator將接受這個請求,其他的都拒絕。

attribute字段支持marathon所有的operator。

注意marathon只支持attribute文本值,不能處理任何數字值。例如foo:bar會被任何,但是marathon不能匹配cpu:4這個樣的值。

操作符Operators

UNIQUE

UNIQUE告訴marathon強制所有應用程序的任務的唯一性。例如下面的約束,在每個host只能運行一個應用任務。

$ curl -X POST -H "Content-type: application/json" localhost:8080/v2/apps -d '{
    "id": "sleep-unique",
    "cmd": "sleep 60",
    "instances": 3,
    "constraints": [["hostname", "UNIQUE"]]
  }'

CLUSTER

CLUSTER允許你在slave節點上運行所有的應用任務。如果你有特殊的硬件需要,或者你爲了低延遲想運行它們在同一個rack,如下面的實例:

$ curl -X POST -H "Content-type: application/json" localhost:8080/v2/apps -d '{
    "id": "sleep-cluster",
    "cmd": "sleep 60",
    "instances": 3,
    "constraints": [["rack_id", "CLUSTER", "rack-1"]]
  }'

你也可以使用這個屬性讓應用程序運行在一個指定的節點,使用hostname屬性:

$ 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"]]
  }'

GROUP_BY

GROUP_BY可用於將任務均勻地分散到機架或數據中心,提高可用性:

$ curl -X POST -H "Content-type: application/json" localhost:8080/v2/apps -d '{
    "id": "sleep-group-by",
    "cmd": "sleep 60",
    "instances": 3,
    "constraints": [["rack_id", "GROUP_BY"]]
  }'

marathon通過分析從mesos獲取的信息,只能知道關於屬性的不同rack_id值。如果任務沒有分佈在所有可能的值,那麼任務需要在約束中指定值的數量。如果你沒有指定數量,你會發現任務被分在一個值,儘管你使用的是GROUP_BY約束。例如,你要跨3個機架,要是使用下面的配置:

$ curl -X POST -H "Content-type: application/json" localhost:8080/v2/apps -d '{
    "id": "sleep-group-by",
    "cmd": "sleep 60",
    "instances": 3,
    "constraints": [["rack_id", "GROUP_BY", "3"]]
  }'

LIKE

LIKE接受一個正則表達式作爲參數,允許在slave節點運行你的任務,這個些節點是正則表達式匹配的節點。下面的例子是應用在機架rack-1到rack-3上運行,並均勻分佈。

$ curl -X POST -H "Content-type: application/json" localhost:8080/v2/apps -d '{
    "id": "sleep-group-by",
    "cmd": "sleep 60",
    "instances": 3,
    "constraints": [["rack_id", "LIKE", "rack-[1-3]"]]
  }'

注意,這個參數是必須的。

UNLIKE

和LIKE相似,任務只能運行在和正則表達式不匹配的slave節點上。下面的例子是應用不在機架rack-7到rack-9上運行。

$ curl -X POST -H "Content-type: application/json" localhost:8080/v2/apps -d '{
    "id": "sleep-group-by",
    "cmd": "sleep 60",
    "instances": 3,
    "constraints": [["rack_id", "UNLIKE", "rack-[7-9]"]]
  }'

原文https://mesosphere.github.io/marathon/docs/constraints.html

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