发布于 2015-12-05 11:12:27 | 545 次阅读 | 评论: 0 | 来源: 网络整理
Mesos 提供资源预定机制进行。这一概念和静态预定一起首次在 0.14.0 版本里引用。这使 Mesos 从属启动时可以让运营商指定所预定的资源。在 0.23.0 版本里,它和动态预定一起扩展了,这可以让运营商和授权框架可以动态地预定集群中的资源。
如果没有重大更改引入动态预定,这意味着现有的静态预留机制会继续支持。
在两种预定类型中,资源只会为一个 role 保留。
运营商可以用资源预定的方式为一个 role 配置 slave。预定的资源经由 --resources 标志指定。例如,我们假设在一个 slave 中有 12 个 CPU 和 6144MB 的 RAM 可用,我们想要预定 8 个 CPU 和 4096MB 的 RAM 资源给 ads role。我们可以这么做:
$ mesos-slave \
--master=<ip>:<port> \
--resources="cpus:4;mem:2048;cpus(ads):8;mem(ads):4096"
现在,在这个 slave 上就有了 8 个 CPU 和 4096MB 的 RAM。 CAVEAT:为了修改静态预定,运营商必须排空并重启新配置的病指定 --resources 标志的 slave。 NOTE:此功能支持向后兼容性。我们推荐通过 --resources 标志从 slave 中指定资源,并且用主 HTTP 端点动态管理预定。
这次,静态预定资源不能为另一个 role 预定,也不能被预定。动态预定可以使运营商和授权框架在 slave 启动后预定或者取消预定。
我们需要从运营商和授权框架获取指导准则来认证或者授权操作。授权经由 ACL 机制指定。 (即将推出)
Offer::Operation::Reserve
框架能够通过资源报价周期预定资源。假设我们收到一个资源报价有 12 个 CPU 和 6144 MB RAM 可以预定。
{
"id": <offer_id>,
"framework_id": <framework_id>,
"slave_id": <slave_id>,
"hostname": <hostname>,
"resources": [
{
"name": "cpus",
"type": "SCALAR",
"scalar": { "value": 12 },
"role": "*",
},
{
"name": "mem",
"type": "SCALAR",
"scalar": { "value": 6144 },
"role": "*",
}
]
}
我们可以通过发送 Offer::Operation 消息来预定 8 个 CPU 和 4096 MB RAM。 We can reserve 8 CPUs and 4096 MB of RAM by sending the following Offer::Operation message.
{
"type": Offer::Operation::RESERVE,
"reserve": {
"resources": [
{
"name": "cpus",
"type": "SCALAR",
"scalar": { "value": 8 },
"role": <framework_role>,
"reservation": {
"principal": <framework_principal>
}
},
{
"name": "mem",
"type": "SCALAR",
"scalar": { "value": 4096 },
"role": <framework_role>,
"reservation": {
"principal": <framework_principal>
}
}
]
}
}
然后,资源报价将包含下列预定资源:
{
"id": <offer_id>,
"framework_id": <framework_id>,
"slave_id": <slave_id>,
"hostname": <hostname>,
"resources": [
{
"name": "cpus",
"type": "SCALAR",
"scalar": { "value": 8 },
"role": <framework_role>,
"reservation": {
"principal": <framework_principal>
}
},
{
"name": "mem",
"type": "SCALAR",
"scalar": { "value": 4096 },
"role": <framework_role>,
"reservation": {
"principal": <framework_principal>
}
},
]
}
Offer::Operation::Unreserve 框架能够通过资源报价周期取消预定的资源。 在 Offer::Operation::Reserve中,我们为 role 预定了 8 个 CPU 和 4096 MB 的 RAM。首先,我们收到一个资源报价(复制/粘贴上述内容):
{
"id": <offer_id>,
"framework_id": <framework_id>,
"slave_id": <slave_id>,
"hostname": <hostname>,
"resources": [
{
"name": "cpus",
"type": "SCALAR",
"scalar": { "value": 8 },
"role": <framework_role>,
"reservation": {
"principal": <framework_principal>
}
},
{
"name": "mem",
"type": "SCALAR",
"scalar": { "value": 4096 },
"role": <framework_role>,
"reservation": {
"principal": <framework_principal>
}
},
]
}
我们通过发送 Offer::Operation 消息来取消 8 个 CPU 和 4096 MB RAM 的预定。Offer::Operation::Unreserve 有一个资源域可以让我们来取消资源的预定。
{
"type": Offer::Operation::UNRESERVE,
"unreserve": {
"resources": [
{
"name": "cpus",
"type": "SCALAR",
"scalar": { "value": 8 },
"role": <framework_role>,
"reservation": {
"principal": <framework_principal>
}
},
{
"name": "mem",
"type": "SCALAR",
"scalar": { "value": 4096 },
"role": <framework_role>,
"reservation": {
"principal": <framework_principal>
}
}
]
}
}
未预定的资源现在可以提供给其他框架。
假设我们希望保留 8 个 CPU 和 4096 MB RAM 用于 slave 的 ads role,我们要像这样发送 HTTP POST 给 /reserve HTTP 端点:
$ curl -i \
-u <operator_principal>:<password> \
-d slaveId=<slave_id> \
-d resources='[ \
{ \
"name": "cpus", \
"type": "SCALAR", \
"scalar": { "value": 8 }, \
"role": "ads", \
"reservation": { \
"principal": <operator_principal> \
} \
}, \
{ \
"name": "mem", \
"type": "SCALAR", \
"scalar": { "value": 4096 }, \
"role": "ads", \
"reservation": { \
"principal": <operator_principal> \
} \
} \
]' \
-X POST http://<ip>:<port>/master/reserve
用户收到下面的 HTTP 响应之一:
假设我们要取消预定上述动态预定的资源,我们可以像这样发送一个 HTTP POST 请求到 /unreserve:
$ curl -i \
-u <operator_principal>:<password> \
-d slaveId=<slave_id> \
-d resources='[ \
{ \
"name": "cpus", \
"type": "SCALAR", \
"scalar": { "value": 8 }, \
"role": "ads", \
"reservation": { \
"principal": <operator_principal> \
} \
}, \
{ \
"name": "mem", \
"type": "SCALAR", \
"scalar": { "value": 4096 }, \
"role": "ads", \
"reservation": { \
"principal": <operator_principal> \
} \
} \
]' \
-X POST http://<ip>:<port>/master/unreserve
如果用户接收到以下信息: