Добавление службы в стек после развертывания стека - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь добавить службу в стек после того, как стек уже развернут. Но у этой новой службы возникают проблемы со связью со службами (redis) внутри стека.

Это мое текущее понимание стеков и служб, пожалуйста, дайте мне знать, если есть какие-либо неточности.

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

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

По сути, я пытаюсь сделать следующее:

Запустите «стек» следующим образом:

docker stack deploy --with-registry-auth --compose-file docker-compose.yml my-stack

А затем, через некоторое время, когда будут выполнены определенные критерии, добавьте контейнер, подобный этому:

docker service create -name statefulservice reponame/imagename

И это обычно ведет себя как ожидалось, за исключением того, что statefulservice не может общаться с redis внутри my-stack.

Я уверен, что statefulservice спроектирован правильно, потому что когда он добавлен в docker-compose.yml, он ведет себя как ожидалось.

Еще одна деталь, которая может иметь или не иметь значение, заключается в том, что команда для создания новой службы выдается из контейнера в рое. Это происходит с помощью go sdk для докера, и я использую его так, как описано в статье one-shot container

Причина, по которой я подозреваю, что это не имеет значения: я все еще сталкиваюсь с этой проблемой, когда выполняю эту операцию только через docker-cli (и не использую docker sdk для go).

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

Когда вы развертываете стек следующим образом:

docker stack deploy --with-registry-auth --compose-file docker-compose.yml my-stack

Создает сеть с именем my-stack_default

Таким образом, чтобы запустить службу, которая может взаимодействовать со службами, которые находятся в этой stack, вам необходимо запустить их следующим образом:

docker service create -name statefulservice --network my-stack_default reponame/imagename
0 голосов
/ 06 июля 2018

Было бы полезно иметь рабочий пример, но:

Полагаю, у вас нет служб в одной и той же сети докеров. Даже если вы вручную не назначаете стековые сервисы для сети (что нормально), команда stack создает тот, к которому подключены все сервисы в этом стеке. Вам нужно будет указать, что оверлейная сеть в вашей последующей службе создает команды, чтобы они могли находить друг друга в DNS и обмениваться данными внутри роя.

Например, если я создам стек с именем nginx, он добавит все эти службы (если в файле стека не настроено иначе) в оверлейную сеть с именем nginx_default

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...