2015-03-15 4 views
10

Я работаю с mesos + marathon + docker довольно долго, но в какой-то момент я застрял. На данный момент я пытаюсь разобраться с постоянным контейнером, и я попытался поиграть с параметром «тома-из», но я не могу заставить его работать, потому что я не знаю, как я могу определить имя поля данных, чтобы поставить это как ключ к json. Я попробовал это на примере из hereКак использовать объемы в марафоне

{ 
    "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 
} 

Я был бы очень признателен любую помощь :-)

+0

Я не совсем ясно, как это проблема Marathon или Mesos, но я задам вам очевидное-вы читали https://docs.docker.com/userguide/dockervolumes/ уже?Значение для другого контейнера - это просто идентификатор контейнера, в котором вы хотите, чтобы тома, смонтированные/разделенные, указывали, что по крайней мере один контейнер должен использовать тома, иначе он исчезнет, ​​а тома будут жить на хосте в специальных каталогах, поэтому что они могут быть разделены между контейнерами. Каков ваш прецедент, кстати? –

+1

спасибо за ответ, и да, я прочитал его. моя проблема в том, что я не знаю, как получить идентификатор или заданное имя контейнера с данными. мой случай использования довольно прост, у меня есть контейнер приложения, и этот должен получить доступ к данным, которые я хочу получить из контейнера данных. Если я абсолютно не могу понять, как обращаться с томами - из опции, я должен отступить и поместить данные на хост и смонтировать это оттуда, потому что я знаю, как обращаться. – hammi

+0

Он, который не был ответом (пока), просто разъяснил. Можете ли вы рассказать больше о своих настройках? –

ответ

0

{ 
 
    "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 
 
}

Что-то вроде, что может быть?

+0

Я пробовал то, что вы предложили, но это все та же проблема. когда я запускаю развертывание, я получаю следующую ошибку: «exit status = exit со статусом 1 stderr = time =» 2015-03-18T10: 20: 00Z »level =" fatal "msg =" Ошибка ответа от демона: контейнер databox не найден, невозможно смонтировать его тома »« У меня все еще есть проблема, что я не могу определить имя или идентификатор контейнера с постоянными данными, чтобы сообщить webapp, где его найти. – hammi

1

От кого знаю: Докер --volume-from возьмите идентификатор или название контейнера.

Поскольку ваш сервер передачи данных запускается также с помощью марафона, он получает идентификатор (не с того, как получить этот идентификатор из марафона) и имя этой формы: mesos-0fb2e432-7330-4bfe-bbce-4f77cf382bb4, который не связан с идентификатором задачи в Мезосе и идентификатором докеров.

решение было бы написать что-то вроде этого для вашего веб-убунту приложения:

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

Поскольку этот докер-ID неизвестно от Марафона это не практично использовать datacontainer, которые начали с Marathon.

Вы можете попытаться запустить datacontainer непосредственно с помощью Docker (без использования Marathon) и использовать его так же, как и раньше, но так как вы не знаете заранее, где будет запланировано web-ubuntu (если вы не добавите ограничение, чтобы заставить его) это не практично.

+0

имя выглядит как 'mesos-d5e25559-7af4-4816-8dbb-ace444c0ccfa-S1.34d5b1c0-3e00-1411-88b9-b709cedc8ddd', первая часть может быть восстановлена ​​в марафоне по адресу https://marathon.domain.com/v2/tasks' на 'task.slaveId'. Я не нашел, где взять последнюю часть. Не так ли? – BigDong

0

Поддержка Mesos, передающая параметр плагина объема с использованием «ключа» & «значение». Но проблема заключается в том, как передать имя тома, которое Mesos ожидает как абсолютный путь, или если абсолютный путь не передается, то он объединит имя, указанное в папке песочницы slave-контейнера. Они делают это прежде всего для поддержки контрольной точки, в случае, если подчиненное устройство падает случайно.

Единственный вариант, до тех пор, пока выше не будет улучшен, заключается в использовании другого параметра пары значений ключа. Напр. В описанном выше случае

{ "ключ": "объемы-с", "значение": "DataBox"}, { "ключ": "объема", "значение": "datebox_volume"}

I протестировали выше с помощью плагина, и он работает.

-1

Другим подходом является создание пользовательской среды mesos, способной выполнять команду docker, которую вы хотите. Чтобы узнать, какие предложения принять и где разместить каждую задачу, вы можете использовать информацию о марафоне:/apps/v2/(под ключом задач).

Хорошая отправная точка для написания новой структуры Mesos является: https://github.com/mesosphere/RENDLER

+0

Возможно, вы также захотите использовать недавно добавленные модули: https://mesosphere.github.io/marathon/docs/pods.html. Вы сможете делиться томами между контейнерами. –