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