[+]文章目录

Mesos 提供了一个从磁盘资源中创建永久卷标的机制。当启动一个任务,你可以创建一个存在于任务沙箱外的卷标,此卷标在任务结束或者完成后依然存在。当任务退出 时,它的资源 —— 包括永久卷标 —— 可以返回给框架,这样框架就可以重新启动同样任务,启动回复任务,或者启动一个新的将之前任务的输出作为输入的任务。永久卷标可以让如 HDFS 和 Cassandra 在 Mesos 内存储数据。 持久卷标只能从预定的磁盘资源创建,无论是静态预定或动态预定。一个动态预定永久卷标在没有明确破坏卷标的情况下取消预定。这些规则限制了一些意外错误, 例如:在集群中,一些包括了敏感数据的永久卷标被提供给其他框架。 请查看 Reservation 文档来查阅更多信息。 永久卷标可以由运营商和授权框架创建。我们需要一个从运营商或框架中获取 principal 来认证/授权操作。 授权由现有 ACL 机制指定。(即将推出)

  • Offer::Operation::Create 和 Offer::Operation::Destroy 消息可以通过 acceptOffers API 发回给框架
  • 运营商可以用/create 和 /destroy HTTP 端点来管理永久卷标。(即将推出)

在下面的章节中,我们会通过例子来解释:

Offer::Operation::Create 框架可以通过资源提供周期来创建卷标。假设我们需要预定一个 2048MB 的动态磁盘空间。

 
{
  "id" : <offer_id>,
  "framework_id" : <framework_id>,
  "slave_id" : <slave_id>,
  "hostname" : <hostname>,
  "resources" : [
    {
      "name" : "disk",
      "type" : "SCALAR",
      "scalar" : { "value" : 2048 },
      "role" : <framework_role>,
      "reservation" : {
        "principal" : <framework_principal>
      }
    }
  ]
}

我们可以通过 acceptOffers API 发送 Offer::Operation 消息在 2048MB 的磁盘中创建永久卷标。 Offer::Operation::Create 有一个卷标域可以用于指定永久卷标信息,我们需要指定的信息如下:

  • 每个 slave 的每个 role 所需要的永久卷标 ID
  • 容器内到卷标的非嵌套相对路径
  • 卷标的权限,目前来讲,只可能是“RW”
 
{
  "type" : Offer::Operation::CREATE,
  "create": {
    "volumes" : [
      {
        "name" : "disk",
        "type" : "SCALAR",
        "scalar" : { "value" : 2048 },
        "role" : <framework_role>,
        "reservation" : {
          "principal" : <framework_principal>
        },
        "disk": {
          "persistence": {
            "id" : <persistent_volume_id>
          },
          "volume" : {
            "container_path" : <container_path>,
            "mode" : <mode>
          }
        }
      }
    ]
  }
}

后续资源将包括以下永久卷标

 
{
  "id" : <offer_id>,
  "framework_id" : <framework_id>,
  "slave_id" : <slave_id>,
  "hostname" : <hostname>,
  "resources" : [
    {
      "name" : "disk",
      "type" : "SCALAR",
      "scalar" : { "value" : 2048 },
      "role" : <framework_role>,
      "reservation" : {
        "principal" : <framework_principal>
      },
      "disk": {
        "persistence": {
          "id" : <persistent_volume_id>
        },
        "volume" : {
          "container_path" : <container_path>,
          "mode" : <mode>
        }
      }
    }
  ]
}

Offer::Operation::Destroy 框架可以通过资源供给周期取消永久卷标。在 Offer::Operation::Create 内,我们在 2048 MB 磁盘资源中创建了永久卷标。 直到我们确定取消掉它后,Mesos 才会把它当垃圾收走。假设我们想取消掉创建的卷标:

 
{
  "id" : <offer_id>,
  "framework_id" : <framework_id>,
  "slave_id" : <slave_id>,
  "hostname" : <hostname>,
  "resources" : [
    {
      "name" : "disk",
      "type" : "SCALAR",
      "scalar" : { "value" : 2048 },
      "role" : <framework_role>,
      "reservation" : {
        "principal" : <framework_principal>
      },
      "disk": {
        "persistence": {
          "id" : <persistent_volume_id>
        },
        "volume" : {
          "container_path" : <container_path>,
          "mode" : <mode>
        }
      }
    }
  ]
}

我们通过 acceptOffers API 发送 Offer::Operation message 消息来摧毁永久卷标。Offer::Operation::Destroy 有一个卷标域,我们可以用来指定需要摧毁的卷标。

 
{
  "type" : Offer::Operation::DESTROY,
  "destroy" : {
    "volumes" : [
      {
        "name" : "disk",
        "type" : "SCALAR",
        "scalar" : { "value" : 2048 },
        "role" : <framework_role>,
        "reservation" : {
          "principal" : <framework_principal>
        },
        "disk": {
          "persistence": {
            "id" : <persistent_volume_id>
          },
          "volume" : {
            "container_path" : <container_path>,
            "mode" : <mode>
          }
        }
      }
    ]
  }
}

永久卷标被销毁,但磁盘资源仍将保留。因此,后续的资源供给将包含下列磁盘资源:

 
{
  "id" : <offer_id>,
  "framework_id" : <framework_id>,
  "slave_id" : <slave_id>,
  "hostname" : <hostname>,
  "resources" : [
    {
      "name" : "disk",
      "type" : "SCALAR",
      "scalar" : { "value" : 2048 },
      "role" : <framework_role>,
      "reservation" : {
        "principal" : <framework_principal>
      }
    }
  ]
}

要注意的是,在 0.23 中,在你摧毁永久卷标之后,它的内容还是会存在于磁盘上。永久卷标垃圾箱即将推出:MESOS-2048

/create (即将推出)

 

/destroy (即将推出)


« 前一篇