Marathon(5):Constraints

Constraints

Constraints控制在何处运行的应用程序,允许对无论是容错(在多个节点上传播任务)还是本地(运行在相同的节点上运行所有的应用程序任务)进行优化。Constraints有三个部分:一个字段名,一个operator,和一个可选的参数。该字段可以是Agent节点的主机名或Agent节点的任何属性。

字段

Hostname字段

hostname字段设置的是代理节点的主机名。参见下面的UNIQUE operator使用示例。

hostname字段支持Marathon的所有operator。

Attribute字段

如果字段名称不是代理节点主机名,它将被视为一个Mesos代理节点属性。一个Mesos代理节点的属性,用来标记一个代理节点。参见mesos-slave –help来了解如何设置Attribute。

如果指定的属性没有在代理节点上定义的,大多数operator将拒绝在其上运行任务。事实上,到现在为止只有UNLIKE operator会(而且永远)接受这个请求,而其他operator将永远拒绝请求。

Attribute字段支持Marathon的所有operator。

Marathon支持text,scalar,range和set属性值。对于scalar,range和set,Marathon会将值进行格式化,然后以字符串形式进行值的比较。具体的格式与Mesos Attribute格式的匹配。对于range和set,格式分别是[begin-end,…]和{item,…}。例如,你可以将range写成[100-200],将set写成{a,b,c}。

LIKE和UNLIKE operator可以使用正则表达式; 要匹配ANY值,可以使用字符串.*。

Operators

UNIQUE operators

UNIQUE告诉Marathon在所有应用程序任务中强化属性的唯一性。例如,下面的Constraints确保每个主机上只有一个应用任务运行:

$ 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 operator

CLUSTER可以在Agent节点上运行的所有应用程序任务共享一个特定的属性。例如,如果你有特殊的硬件需求的应用程序这是非常有用的,或者如果你想同一机架上低延迟的运行它们:

$ 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 operator

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通过分析进入的请求(incoming offers)只知道不同的属性值(例如“rack_id”)。如果任务尚未准备好传递所有可能的值;需要指定Constraints中值数量。如果没有指定值的数量,你可能会发现任务只分布在一个值,即使您正在使用的GROUP_BYconstraints。例如,如果要跨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 operator

LIKE 接受一个正则表达式作为参数,并允许在正则表达式匹配的Agent节点运行任务:

$ 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 operator

就像LIKE operator,但只能运行在域名与正则表达不匹配的Agent节点:

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

MAX_PER operator
MAX_PER接受数字作为参数,用于指定每个组的最大值。它可以被用于限制穿过机架或数据中心的任务:

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

请注意,参数是必需的,否则你会得到一个警告。


参考资料:

[1]: http://mesosphere.github.io/marathon/docs/constraints.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值