发布于 2015-12-05 11:12:27 | 549 次阅读 | 评论: 0 | 来源: 网络整理

Mesos 提供资源预定机制进行。这一概念和静态预定一起首次在 0.14.0 版本里引用。这使 Mesos 从属启动时可以让运营商指定所预定的资源。在 0.23.0 版本里,它和动态预定一起扩展了,这可以让运营商和授权框架可以动态地预定集群中的资源。

如果没有重大更改引入动态预定,这意味着现有的静态预留机制会继续支持。

在两种预定类型中,资源只会为一个 role 保留。

静态预订(自 0.14.0)

 

运营商可以用资源预定的方式为一个 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 端点动态管理预定。

动态预定(自 0.23.0)

 

这次,静态预定资源不能为另一个 role 预定,也不能被预定。动态预定可以使运营商和授权框架在 slave 启动后预定或者取消预定。

我们需要从运营商和授权框架获取指导准则来认证或者授权操作。授权经由 ACL 机制指定。 (即将推出)

  • Offer::Operation::Reserve 和 Offer::Operation::Unreserve 消息可以作为资源响应发回给框架。
  • /reserve 和 /unreserve HTTP 端点可以为运营商管理动态预定(即将推出)。

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>
            }
          }
        ]
      }
    }

未预定的资源现在可以提供给其他框架。

/reserve (自 0.25.0)

 

假设我们希望保留 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 响应之一:

  • 200 OK:成功
  • 400 BadRequest:无效的参数(如缺少参数)。
  • 401 Unauthorized:未经授权的请求。
  • 409 Conflict:资源不足,无法满足预约操作。

/unreserve (自 0.25.0)

 

假设我们要取消预定上述动态预定的资源,我们可以像这样发送一个 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

如果用户接收到以下信息:

  • 200 OK:成功
  • 400 BadRequest:无效的参数(如缺少参数)。
  • 401 Unauthorized:未经授权的请求。
  • 409 Conflict:资源不足,无法满足取消预定操作。
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务