2016-09-01 8 views
5

Я новичок в режиме роуминга докеров (и я конкретно говорю о режиме рой в docker v1.12, и я не имею в виду более старый не интегрированный «докерный рой»).Развертывание сервисов режима Docker Swarm через несколько доменов с отказами

Я пытаюсь оценить его пригодность для создания крупной распределенной контейнерной платформы для нового программного проекта (я сравнен с аналогичными технологиями, такими как мезосфера, кубернетес и др.).

Мое понимание старого неинтегрированного рояля докеров (не роевого режима) заключается в том, что вы можете перенаправлять узлы для развертывания в несколько доменов с отказами с помощью фильтров. Есть ли эквивалент в режиме Docker Swarm?

Например, в тестовой среде у меня есть 6 виртуальных машин - все работает докере.

Я запуска ВМ 1 и 2, и называют это мой провал домен1
Я запуска ВМ 3 и 4 и называют, что мой отказ домен2
я запустить ВМ 5 и 6 и называют, что мой отказ DOMAIN3

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

Я предлагаю докеру создать новый сервис и запустить 3 контейнера на основе изображения, содержащего простой веб-сервис. Docker делает это и разворачивает 3 контейнера, и моя служба работает; Я могу без проблем получить доступ к моему балансовому веб-сервису. Ура!

Тем не менее, я хотел бы сказать, что докер может распространять мои 3 контейнера через domain1, domain2 и domain3.

Как я могу это сделать? (также - отправляю ли я на правильный сайт - должен ли он находиться на одном из других сайтов stackexchange?)

ответ

3

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

Для меток узлов вы должны использовать docker node update --label-add az=1 vm1, который добавит метку az1 к вашему vm1 узлу. Повторите этот процесс для других АЗ (зона доступности - это термин, который я обычно использую) и виртуальные машины.

Теперь при планировании вашей работы, вы добавить ограничение, как

docker service create --constraint node.labels.az==1 \ 
    --name AppAZ1 yourimage 

для метки узла или для метки двигателя:

docker service create --constraint engine.labels.az==1 \ 
    --name AppAZ1 yourimage 

повторять это для каждого из ваших AZ-х.

К сожалению, я не могу придумать способ принудительного распространения по каждому из АЗ автоматически, когда вы используете что-то вроде --replicas 3, которое включает переход на второй узел в каждом кластере vm. Однако, если вы выберете одну VM для каждого кластера для каждой задачи, вы можете пометить каждую из них моей одной меткой (например, --label-add vm=a, а затем сделать --mode global --constraint node.label.vm==a для запуска одной службы на каждом из ваших узлов A.