如何使用卷 – 从马拉松

我正在与mesos +马拉松+docker工作了一段时间,但我在某个时候卡住了。 目前我试图处理持久性容器,我尝试使用“volume-from”参数,但是我无法工作,因为我不知道如何找出数据框的名称它作为JSON的一个关键。 我用这里的例子试了一下

{ "id": "privileged-job", "container": { "docker": { "image": "mesosphere/inky" "privileged": true, "parameters": [ { "key": "hostname", "value": "a.corp.org" }, { "key": "volumes-from", "value": "another-container" }, { "key": "lxc-conf", "value": "..." } ] }, "type": "DOCKER", "volumes": [] }, "args": ["hello"], "cpus": 0.2, "mem": 32.0, "instances": 1 } 

我真的很感激任何forms的帮助:-)

从我所知道的: --volume-from取得一个容器的ID或者名字。

因为你的datacontainer也是用Marathon启动的,所以它会得到一个ID(不是如何从马拉松获得这个ID)和这个forms的名字: mesos-0fb2e432-7330-4bfe-bbce-4f77cf382bb4它与任务ID无关Mesos或Docker ID。

解决办法是为你的web-ubuntu应用程序写这样的东西:

 "parameters": [ { "key": "volumes-from", "value": "mesos-0fb2e432-7330-4bfe-bbce-4f77cf382bb4" } ] 

由于这个docker-ID在Marathon中是未知的,所以使用以Marathon开始的datacontainer是不现实的。

你可以尝试直接使用Docker启动一个数据容器(不使用Marathon)并像以前那样使用它,但是由于你事先并不知道web-ubuntu会被安排在哪里(除非你添加一个约束来强制它)不实用。

 { "id": "data-container", "container": { "docker": { "image": "mesosphere/inky" }, "type": "DOCKER", "volumes": [ { "containerPath": "/data", "hostPath": "/var/data/a", "mode": "RW" } ] }, "args": ["data-only"], "cpus": 0.2, "mem": 32.0, "instances": 1 } { "id": "privileged-job", "container": { "docker": { "image": "mesosphere/inky" "privileged": true, "parameters": [ { "key": "hostname", "value": "a.corp.org" }, { "key": "volumes-from", "value": "data-container" }, { "key": "lxc-conf", "value": "..." } ] }, "type": "DOCKER", "volumes": [] }, "args": ["hello"], "cpus": 0.2, "mem": 32.0, "instances": 1 } 

Mesos支持使用“key”和“value”来传递音量插件的参数。 但问题是如何传递Mesos希望是绝对path的卷名,或者如果绝对path没有通过,那么它将合并从属容器沙箱文件夹提供的名称。 他们这样做主要是为了支持检查点,以防奴隶意外坠落。

唯一的select,直到上面得到增强,是使用另一个键值对参数。 例如在以上情况

{“key”:“volumes-from”,“value”:“databox”},{“key”:“volume”,“value”:“datebox_volume”}

我已经testing了一个插件,它的工作原理。

另一种方法是编写一个自定义的mesos框架,能够运行你想要的docker命令。 为了知道接受哪些提议以及在哪里放置每个任务,您可以使用/ apps / v2 /(在任务键下)的马拉松信息。

编写一个新的mesos框架的一个好的起点是: https : //github.com/mesosphere/RENDLER