Как работает развертывание стека докеров?

Я новичок в docker swarm и хочу понять, как работает docker stack deploy

version: '3'
services:
 web:
image: nginx
ports:
  - "80:80"
redis:
image: "redis:alpine"

Когда я запускаю эту команду, она работает отлично

$ docker stack deploy -c docker-compose.yml mystack
 Creating network mystack_default
 Creating service mystack_web
 Creating service mystack_redis

Чтобы проверить это

$ docker stack ps mystack
ID                  NAME                IMAGE               NODE                          
DESIRED STATE       CURRENT STATE           ERROR               PORTS
rcci590y5c6o        mystack_redis.1     redis:alpine        
plakhera1.example.com   Running             Running 9 seconds ago                       
lty84a77b4my        mystack_web.1       nginx:latest        
plakhera2.mylabserver.com   Running             Running 2 seconds ago 

Теперь у меня вопрос, как быть уверенным, что каждый раз, когда я развертываю это приложение / сервис, Redis будет появляться на plakhera1.example.com и nginx на plakhera2.example.com. Я считаю, что в настоящее время он выбирает узлы случайным образом, поэтому как я могу убедиться, что он всегда выбирает только эти узлы.

Обновление: Сценарий: мой веб - это базовое приложение, но Redis выполняет много тяжелой работы, поэтому я всегда хочу, чтобы Redis был на мощном узле, есть ли способ указать через развертывание стека докеров, что веб всегда загружается. node1 и Redis на node2

0
задан 25 October 2019 в 21:34
1 ответ

Я думаю, что самый быстрый способ сделать это - установить ограничение размещения node.hostname для службы. Обратите внимание, что я тестировал это только с помощью compose v3.7 на Docker версии 19.03.2 :

version: '3.7'
services:
  redis:
    image: "redis:alpine"
    deploy:
      # replicas: 3
      placement:
        constraints:
          - node.hostname == plakhera1.example.com

Обратите внимание, если вы раскомментируете реплики (которые вы могли бы в случае рабочих узлов или чего-то подобного) все реплики должны быть развернуты на указанном узле.

Проверить вручную с помощью:

docker stack ps mystack

Недостатком этого является необходимость указывать фактическое имя хоста в файле компоновки. Я заметил, что вы также можете пометить узлы и установить размещения на основе этих ярлыков , однако я обнаружил, что документация здесь немного скудная, и при выполнении быстрого теста она не работала как и ожидалось, но это мог быть только я в спешке.

1
ответ дан 4 December 2019 в 15:35

Теги

Похожие вопросы