当前位置 博文首页 > 适己而忘人者,人之所弃;克己而立人者,众之所戴。:Marathon(

    适己而忘人者,人之所弃;克己而立人者,众之所戴。:Marathon(

    作者:[db:作者] 时间:2021-07-11 10:01

    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

    cs