marathon 约束 constraints 限制

marathon 约束 Constraints 限制

Constraints控制在何处运行的应用程序,可以根据constraints属性,控制容器可以在哪个Agent节点上运行。

(往上看来好多文档写的都很类似,我就写一些不一样的吧。)

mesos agent 自定义 constraints 属性

rpm 安装的 mesos 可以在 /etc/mesos-slave/attributes 下定义这台agent。

1
echo "project:ppp1;IDC:BJ;oam:ops1" > /etc/mesos-slave/attributes

重启mesos-slave服务即可,

1
systemctl start mesos-slave

这样这台Agent就有利3个属性。

分别是:

  • project:ppp1
  • IDC:BJ
  • oam:ops1

另外其他的Agent机器耶可以有相同的属性,这样就可以变成一组。(容器可以固定在相同属性的Agent机器上)

源码安装,值需要加上 –attributes 参数即可,

1
/home/mesos/mesos-slave/sbin/mesos-agent --master=zk://10.0.0.52:2181,10.0.0.53:2181,10.0.0.54:2181/mesos --log_dir=/var/log/mesos --containerizers=docker,mesos --executor_registration_timeout=5mins --work_dir=/home/mesos/mesos --hostname=logstash00 --attributes=project:ppp1;IDC:BJ;oam:ops1

marathon 使用 constraints

好了, 现在说说marathon 应该怎么使用 constraints

容器固定在指定的Agent机器上

可以通过 hostaname 来指定容器在哪台Agent上运行。

1
2
3
4
5
6
curl -X POST -H "Content-type: application/json" localhost:8080/v2/apps -d '{
"id": "sleep-cluster",
"cmd": "sleep 60",
"instances": 3,
"constraints": [["hostname", "CLUSTER", "host-name.test.com"]]
}'

每个Agent上运行一个容器

所有应用程序的任务中强制执行属性的唯一性。 确保每个主机上只运行一个应用程序任务。

1
2
3
4
5
6
"constraints": [
[
"hostname",
"UNIQUE"
]
],

利用自定义属性约束

根据自定义属性来约束在哪些Agent节点上运行容器。

1
2
3
4
5
6
7
"constraints": [
[
"IDC",
"LIKE",
"BJ"
]
],

这样就可以在有 IDC:BJ 的Agent节点上运行容器了,当然,耶可以写多个约束限制天剑的。

不在哪个节点上

指定条件,不在哪个节点运行容器

1
2
3
4
5
6
7
"constraints": [
[
"IDC",
"UNLIKE",
"BJ"
]
],

支持正则

LIKE 接受一个正则表达式作为参数

1
2
3
4
5
6
7
"constraints": [
[
"project",
"LIKE",
"ppp[1-3]"
]
],

mesos 可以自定义 constraints 这个就很灵活了,我们在初始化 Agent 节点的时候,就可以定义很多属性来。容器发布的时候我们就很容易约束了。

官方文档:https://mesosphere.github.io/marathon/docs/constraints.html

感觉文章还可以的话,帮忙点点下面的广告哦! 谢谢支持!

感谢您的支持!