Как использовать объемы в марафоне
Я работаю с 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
}
Я бы очень признателен за любую помощь: -)
Ответы
Ответ 1
Из того, что я знаю:
docker --volume-from
взять идентификатор или имя контейнера.
Поскольку ваш datacontainer запускается вместе с Marathon, он получает идентификатор (не знаю, как получить этот идентификатор из марафона) и имя этой формы: mesos-0fb2e432-7330-4bfe-bbce-4f77cf382bb4
, который не связан с идентификатором задачи в Mesos и идентификатором докеры.
Решением было бы написать что-то вроде этого для вашего приложения web-ubuntu:
"parameters": [
{ "key": "volumes-from", "value": "mesos-0fb2e432-7330-4bfe-bbce-4f77cf382bb4" }
]
Поскольку этот идентификатор докера неизвестен в марафоне, нецелесообразно использовать datacontainer, которые запускаются с помощью Marathon.
Вы можете попытаться запустить datacontainer непосредственно с Docker (без использования Marathon) и использовать его так же, как и раньше, но так как вы не знаете заранее, где будет запланировано web-ubuntu
(если вы не добавите ограничение, чтобы заставить его ) это нецелесообразно.
Ответ 2
{
"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
}
Ответ 3
Mesos поддерживает передачу параметра плагина объема с использованием "ключа" и "значения". Но проблема заключается в том, как передать имя тома, которое Mesos ожидает как абсолютный путь, или если абсолютный путь не передается, то он объединит имя, указанное в папке песочницы slave-контейнера. Они делают это прежде всего для поддержки контрольной точки, в случае, если подчиненное устройство случайно падает.
Единственная опция, до тех пор, пока выше не будет улучшена, заключается в использовании другого параметра пары значений ключа. Напр. в вышеприведенном случае
{ "ключ": "тома-от", "значение": "databox" },
{ "key": "volume", "value": "datebox_volume" }
Я тестировал выше с плагином, и он работает.
Ответ 4
Другим подходом является создание пользовательской среды mesos, которая может выполнять команду docker, которую вы хотите. Чтобы узнать, какие предложения принять и где разместить каждую задачу, вы можете использовать информацию о марафоне:/apps/v2/(под ключом задач).
Хорошей отправной точкой для написания новой структуры mesos является: https://github.com/mesosphere/RENDLER