Как распределить два сервиса по разным нодам кластера swarm?

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

1. Метки узлов:
В кластере swarm у каждого узла есть набор меток, которые можно использовать для определения и размещения сервисов. Вы можете назначить метки к узлам с помощью команды docker node update и параметра --label. Например, чтобы назначить метку service=web к узлу с именем node1, вы можете выполнить следующую команду:

   docker node update --label-add service=web node1

Затем вы можете использовать эту метку при размещении сервисов. Например, чтобы разместить сервис webapp только на узле с меткой service=web, вы можете использовать параметр --constraint с этой меткой:

   docker service create --constraint 'node.labels.service == web' webapp

2. Ограничение местоположения:
Docker swarm позволяет указать ограничения местоположения для сервисов с использованием параметра --placement. Например, чтобы указать, что сервис webapp должен быть размещен только на определенных узлах, вы можете использовать параметр --placement с идентификаторами узлов:

   docker service create --placement 'node.id == abc123' webapp

Можно указать несколько идентификаторов для размещения на нескольких узлах.

3. Предпочтения размещения:
При размещении сервисов swarm можно задать предпочтения, с помощью которых Docker попытается разместить сервис на определенных узлах. Вы можете указать предпочтения для каждого сервиса с помощью параметра --preferences. Например, чтобы указать, что сервис webapp должен быть размещен на узле с меткой service=web, вы можете использовать следующую команду:

   docker service create --preferences 'spread:node.labels.service == web' webapp

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

Все эти методы позволяют вам контролировать размещение сервисов в Docker swarm и распределить их по разным узлам кластера в соответствии с вашими требованиями и предпочтениями.