Монтируйте том rexray / ceph в нескольких контейнерах на Docker Swarm - PullRequest
0 голосов
/ 10 октября 2018

Что я сделал

Я создал кластер Docker Swarm, в котором я запускаю контейнеры с постоянными данными.Чтобы позволить контейнеру перемещаться на другой хост в случае сбоя, мне нужно упругое общее хранилище по всему скоплению.Изучив различные варианты, я реализовал следующее:

  1. Установил кластер хранения Ceph во всех узлах роя и создал блочное устройство RADOS (RBD).http://docs.ceph.com/docs/master/start/quick-ceph-deploy/

  2. Установите Rexray на каждом узле и настройте его для использования RBD, созданного выше.https://rexray.readthedocs.io/en/latest/user-guide/storage-providers/ceph/

  3. Развертывание стека докеров, который монтирует том с помощью драйвера rexray, например

    version: '3'
    services:
      test-volume:
        image: ubuntu
        volumes:
          - test-volume:/test
    volumes:
      test-volume:
        driver: rexray
    

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

Однако я не могу смонтировать том rexray в более чем один контейнер.Моя причина в том, чтобы использовать недолговечный «резервный контейнер», который просто переносит том в резервную копию моментального снимка, пока контейнер еще работает.

Мой вопрос

Могу ли я смонтировать тома rexray?во второй контейнер?

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

1 Ответ

0 голосов
/ 17 октября 2018

К сожалению, ответ - нет, в этом случае тома rexray нельзя монтировать во второй контейнер.Можно надеяться, что приведенная ниже информация поможет любому, кто идет по аналогичному пути:

  1. Rexray не поддерживает несколько монтирований:

    Сегодня REX-Ray был разработан для обеспечениябезопасность среди многих хостов, которые потенциально могут иметь доступ к одному хосту.Это означает, что он принудительно ограничивает доступ к одному хосту одновременно только одному тому.(https://github.com/rexray/rexray/issues/343#issuecomment-198568291)

  2. Но Rexray поддерживает функцию под названием pre-emption где:

    .. если второй хост запрашивает томчто он может сначала принудительно отсоединить его от исходного хоста, а затем принести его себе. Это имитирует операцию отключения хоста, подключенного к тому, где все биты в памяти на оригинальном хосте не были сброшеныпотеряно. Это поддержало бы сценарий использования Swarm с хостом, который выходит из строя, и с контейнером, который пытается переназначиться. (https://github.com/rexray/rexray/issues/343#issuecomment-198568291)

  3. Однако, упреждение не поддерживается Ceph RBD. (https://rexray.readthedocs.io/en/stable/user-guide/servers/libstorage/#preemption)

...