mesos slave增加属性

mesos+marathon是一个很好用的资源调度框架.
原先我们很多调度原则都是基于hostname来进行,但是这样其实很不方便。

其实很早mesos slave就支持使用attribute了。

首先需要在mesos slave服务器上增加相应的attribute

1
echo "rack:bj-h;type:v4c;internet:no" > /etc/mesos-slave/attriburtes

如果这个服务器上还运行着对应容器,那我们先挪走这些容器。然后重启mesos-slave进程

1
2
3
sudo rm -rf /data/apps/mesos-slave/data/meta/slaves/latest
sudo systemctl restart mesos-slave
ps aux | grep mesos-slave | grep attribute

这个时候应该可以在进程里看到对应的attribute了。如果发现起不来,那看下日志,看网上有人说在某些版本里会有问题

不知道从哪个版本开始,当mesos-slave设置attributes属性时,无法设置,需要添加一个属性:

1
echo "additive" > /etc/mesos-slave/reconfiguration_policy 

然后再设置attributes就可以了。

然后我们就可以在marathon里定义自己想要的服务了。比如我随便搞一个测试的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
"id": "/testtag",
"cmd": "sleep 100",
"cpus": 0.1,
"mem": 32,
"disk": 0,
"instances": 1,
"constraints": [
[
"rack",
"CLUSTER",
"bj-h"
]
],
"healthChecks": [
{
"protocol": "COMMAND",
"command": {
"value": "ps aux | grep -c sleep"
},
"gracePeriodSeconds": 300,
"intervalSeconds": 60,
"timeoutSeconds": 20,
"maxConsecutiveFailures": 3,
"ignoreHttp1xx": false
}
],
"portDefinitions": [
{
"port": 10009,
"protocol": "tcp",
"labels": {}
}
]
}

这里就是指定运行在bj-h这个rack上。当然这里CLUSTER还有很多写法,具体可以参考: https://mesosphere.github.io/marathon/docs/constraints.html

  • CLUSTER
  • LIKE
  • UNLIKE
  • GROUP_BY
  • MAX_PER
  • UNIQUE
  • IS
    这几个放一起可以玩的花样会特别多的。