Могу ли я как-то настроить, как мастер-узел распределяет сервисы в рое докеров? Я думал, что он должен видеть свободные ресурсы рабочих узлов и распределять их на «самый свободный» узел.
На данный момент у меня проблема, эта служба распределяется на одну ноду, которая заполнена (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 сервисов на обоих узлах. Оба докер-узла одинаковы.
Согласно проекту swarmkit ПРОЧТИ МЕНЯ, единственной доступной стратегией является spread
, поэтому он планирует задачи в наименее загруженных режимах.
Обратите внимание, что рой не будет перемещать узлы, чтобы поддерживать эту стратегию, поэтому, если вы добавили node02 после того, как node01 был заполнен, node02 останется в основном пустым. Вы можете слить оба узла, а затем активировать их, чтобы увидеть, лучше ли он распределяет нагрузку.
Более подробное описание алгоритма расписаний вы можете найти в документации проекта: алгоритм планирования
Для более старого менеджера роя этот атрибут можно было настроить: https://docs.docker.com/swarm/reference/manage/#--strategy--scheduler-placement-strategy
Также я нашел https://docs.docker.com/swarm/scheduler/strategy/, он многое объясняет о стратегиях роя Docker.