Как сервисы распределяются в docker swarm

Могу ли я как-то настроить, как мастер-узел распределяет сервисы в рое докеров? Я думал, что он должен видеть свободные ресурсы рабочих узлов и распределять их на «самый свободный» узел.

На данный момент у меня проблема, эта служба распределяется на одну ноду, которая заполнена (90% ОЗУ) и начинает лагать, но в то же время на второй ноде мало сервисов и она может обслуживать еще одну.

docker node ls 
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
wdkklpy6065zxckxyuj000ei4 *   docker-master       Ready               Drain               Leader              18.09.6
sk45rol2whdr5eh2jqozy0035     docker-node01       Ready               Active              Reachable           18.09.6
o4zwwbwwcrbwo4tsd00pxkfuc     docker-node02       Ready               Active                                  18.09.6

Сейчас у меня 36 (очень похожих) сервисов, 28 работают на docker-node01, 8 на docker-node02. Я думал, что идеальное состояние — это 16 сервисов на обоих узлах. Оба докер-узла одинаковы.

  1. Откуда docker swarm знает, где запустить службу? Какой алгоритм он использует?
  2. Можно ли изменить/обновить алгоритм выбора узла?
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
345
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Согласно проекту swarmkit ПРОЧТИ МЕНЯ, единственной доступной стратегией является spread, поэтому он планирует задачи в наименее загруженных режимах.

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

Более подробное описание алгоритма расписаний вы можете найти в документации проекта: алгоритм планирования

Для более старого менеджера роя этот атрибут можно было настроить: https://docs.docker.com/swarm/reference/manage/#--strategy--scheduler-placement-strategy

Также я нашел https://docs.docker.com/swarm/scheduler/strategy/, он многое объясняет о стратегиях роя Docker.

Другие вопросы по теме