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

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