Как использовать тома Docker в качестве постоянных томов для Mesos/Marathon?

Я запускаю кластеры Mesos и Ceph на CoreOS с работающим плагином тома Ceph RBD Docker. , но мне очень непонятно, как это можно использовать с Mesos/Marathon... Однако создание/использование томов rbd для отдельных контейнеров Docker работает безупречно.

Я не могу найти статью/сообщение в блоге/что-либо, что касается автоматического создания (и, в случае «миграции задач» между ведомыми устройствами Mesos, переназначения) этих томов через Marathon. Для меня особенно важно, как запустить несколько экземпляров службы с отслеживанием состояния, когда каждый экземпляр должен иметь свой собственный том (представьте себе MongoDB ReplicaSet на Mesos/Marathon).

Мне известны документы по постоянным томам Mesos, а также я видел проблема с марафоном, но я до сих пор не понимаю, как и когда это можно будет использовать...

Есть и другие вопросы здесь, на SO:

которые, к сожалению, на самом деле не имеют ответа на эту конкретную проблему.

код EMC с RexRay также только охватывает пример с одним экземпляром, с которым я также легко справился бы с упомянутым выше плагином громкости:

{
    "id": "nginx",
    "container": {
        "docker": {
            "image": "million12/nginx",
            "network": "BRIDGE",
            "portMappings": [{
                "containerPort": 80,
                "hostPort": 0,
                "protocol": "tcp"
            }],
            "parameters": [{
                "key": "volume-driver",
                "value": "rbd"
            }, {
                "key": "volume",
                "value": "nginx-data:/data/www"
            }]
        }
    },
    "cpus": 0.2,
    "mem": 32.0,
    "instances": 1
}

В этом случае том nginx-data будет создан автоматически. Но что, если я хочу использовать постоянные тома и несколько экземпляров?


person Tobi    schedule 26.01.2016    source источник


Ответы (1)


Это вариант использования, для решения которого предназначен Flocker. (Отказ от ответственности: я технический директор ClusterHQ). См. эту запись в блоге для демонстрации Flocker ‹=> Mesos /Marathon, в котором показано, как Flocker Control Service может выступать в качестве «источника правды», для которого контейнерные тома существуют в кластерной среде. Затем Flocker будет создавать по запросу, а затем координировать сопоставление и удаление этих томов между хостами по мере того, как контейнеры, которые ссылаются на эти тома, перемещаются в кластере.

Flocker делает это, предоставляя пространство имен томов для всего кластера. Эти имена затем можно использовать через подключаемый модуль Flocker для Docker с Marathon, чтобы обеспечить переносимость и высокую доступность для контейнеров с отслеживанием состояния в кластере Mesos.

У Flocker также есть драйвер Ceph:

  • Google "Драйвер Flocker Ceph"

И работает на CoreOS:

  • Google "Демо Flocker на CoreOS"

Вы можете запускать задания с несколькими экземплярами (например, MongoDB с наборами реплик), давая каждому контейнеру собственное имя тома (например, mongo_1, mongo_2 и т. д.).

Собрать эти части воедино было бы нетривиально, но я был бы рад помочь. Я мог бы написать подробное руководство специально для вашего стека (Ceph + CoreOS + Docker + Mesos + Marathon), если хотите.

person Luke Marsden    schedule 26.01.2016
comment
Спасибо за ваш быстрый и подробный ответ! Я видел учебник на clusterhq.com/2015/10/06/marathon- ha-demo некоторое время назад, но, насколько я понимаю, это также относится только к варианту использования с одним экземпляром. Есть ли другая статья, посвященная масштабированию? - person Tobi; 26.01.2016
comment
Извините, еще один вопрос: что касается разных имен томов, нужно ли их настраивать вручную? Если да, то я не очень понимаю, как это может работать, когда я запускаю новое приложение через определение JSON в Marathon. В идеале процесс создания/миграции/масштабирования тома должен быть прозрачным для пользователя. В противном случае я не вижу пользы от использования Марафона... Но, возможно, я неправильно понял это. - person Tobi; 26.01.2016
comment
Вам нужен какой-то способ автоматической нумерации томов. У нас с Flocker есть идея реализовать MultiVolumes, это будут тома, где вы можете сказать flockerctl scale mongodb=5, и Flocker выделит 5 пригодных для использования томов для MultiVolume mongodb, тогда каждый раз, когда вы запускаете контейнер с этим именем тома, он будет возвращать вам один из этих тома, которые не используются другим контейнером. Как вы думаете, сработает ли это для вашего варианта использования, @Tobi? - person Luke Marsden; 26.01.2016
comment
Также см. github.com/mesosphere/marathon/issues/2493 Поддержка постоянных томов теперь запланировано для Marathon 0.16 (ранее было 0.14...). - person Tobi; 26.01.2016
comment
Это может быть решением, хотя я не уверен, что это действительно может работать без тесной интеграции с Mesos/Marathon. Когда я хочу масштабироваться, я хочу сделать это за 1 шаг. Для моего понимания mesos.apache.org/documentation/latest/persistent-volume необходимо будет создать постоянный том для каждого экземпляра приложения Marathon, а Marathon потребуется сохранить сопоставление между идентификатором задачи и персонами. об. id (полагаю, в ZooKeeper). Если задача падает и перезапускается, Marathon должен будет получить идентификатор pv от ZooKeeper и автоматически прикрепить pv к контейнеру задачи... - person Tobi; 26.01.2016
comment
@Тоби, спасибо за ответы! Как бы вы представили себе масштабирование работы в этом случае? Если вы уменьшите масштаб с 10 контейнеров до 5, вы ожидаете, что 5 запасных томов будут уничтожены? На мой взгляд, именно поэтому полезно различать масштабирование контейнера и масштабирование тома, что и привело нас к идее MultiVolume... интересны ваши мысли здесь! - person Luke Marsden; 27.01.2016
comment
Это интересный вопрос, и некоторые коллеги и я тоже обдумывали его. Я думаю, что на самом деле это будет зависеть от типа службы с отслеживанием состояния и от того, как она использует механизмы репликации и аварийного переключения. Например. MongoDB обрабатывает это иначе, чем Elasticsearch. Меня бы очень заинтересовала официальная позиция Мезосферы по сервисам с отслеживанием состояния, но, к сожалению, ничего нет, ИМХО жаль. Я следил за вами в Твиттере, возможно, мы сможем продолжить обсуждение в личке. - person Tobi; 28.01.2016