Как использовать объемы в марафоне

Я работаю с 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