1.概念
- Marathon可以通过Constraints来控制其app在何处运行
- 我们可以通过Marathon的REST API或者Marathon gem(marathon client)来设置app的constraints配置。
Constraints由三个部分组成:
字段名(field name),操作(operator), 可选参数(optional parameter)
其中字段名(field name)可以为mesos的一个slave的hostname或者Mesos slave的attribute。
2.实战
接下来我们结合实战,来介绍下Marathon Constrains的用法
字段名
Hostname字段
hostname 匹配slave的hostnames。
hostname支持所有的operator
Attribute字段
attribute 匹配Mesos slave的attributes字段。我们可以通过在mesos节点上运行mesosslave
help来学习如何设置mesos slave的attributes。
操作
UNIQUE operator
UNIQUE tells Marathon to enforce uniqueness of the attribute across all of an app’s tasks.
$ curl -v -X POST http://192.168.100.30:8080/v2/apps \
-H Content-Type:application/json -d '{
"id":"dataman",
"container": {
"type": "DOCKER",
"docker": {
"image":"192.168.100.13:5000/fchen/mynginx",
"network": "BRIDGE",
"portMappings": [
{ "containerPort": 80, "hostPort": 0, "protocol": "tcp"}
]
}
},
"constraints": [["hostname", "UNIQUE"]],
"cmd": "/usr/sbin/nginx -c /etc/nginx/nginx.conf",
"cpus": 0.1,
"mem": 128.0,
"instances": 5
}'
- field name = hostname, operator = UNIQUE, 在每个slave上只起一个instance。
- 由于我们申请了5个nginx instance,而我们Mesos集群节点只有4个slave,所以我们在Marathon的管理界面上看到app dataman为Deploying状态。