В моем офисе работает небольшой док-рой: один 40-ядерный (128 ГБ ОЗУ) и два 8-ядерных (16 ГБ ОЗУ каждый). Когда я развертываю службу в рое, задания выполняются, но они распределяются равномерно, независимо от емкости каждой машины.

Я начал рой на менеджера с:

docker swarm init
docker swarm update --task-history-limit 2

и на каждом узле:

docker swarm join --token <token-string> <ipaddr:port>

Затем я начинаю службу с:

docker service create --detach \
     --mount type=bind,src=/s/mypath,dst=/home/mypath \
     --entrypoint "/home/mypath/myscript.sh arg1 arg2" \
     --name "mystuff" -w /home/mypath myregistry.me.com:5433/myimage

Процесс работает индивидуально. Я не нашел указание веса присвоения или сродства на основе силы узла.

В идеале я бы хотел сказать что-то вроде этого:

  1. вступай в рой, выполняй не более n заданий (немного наивно)
  2. присоединяйся к рою, веси мою (cpu-) емкость как 0.2 (или 5 на более крупных)
  3. Запустите эту службу, назначьте не более одной задачи для каждого доступного ядра

Я саморегулирую общий масштаб сервиса с помощью масштабирования сервиса docker service scale , но это не обеспечивает никакой детализации. Можно ли регулировать службы Docker Swarm для каждого узла доступными ресурсами?

(Это может быть еще большим стимулом для перехода на k8s, который, как я предполагаю, обеспечивает функциональность в этом направлении. У меня растут проблемы с обучением и переходом, который я усердно готовлю.)

1 ответ1

1

Все это действительно возможно при создании или обновлении сервиса Swarm.

Это подпадает под опции "размещение контейнера" в этих командах. Если вас беспокоит только резервирование ресурсов, посмотрите на --reserve-cpu и --reserve-memory . Это будет гарантировать, что у узла будет свободная загрузка процессора или памяти на узле перед выполнением задач каждого контейнера.

Пример: если вам нужен сервис swarm для развертывания двух реплик php, и каждый из них должен убедиться, что он находится на узле с 1 ГБ памяти и 1 ЦП, тогда service create --reserve-cpu 1 --reserve-memory 1GB php будет только планировать контейнеры на узлах, которые, как знает планировщик Swarm, имеют такое количество доступного оборудования. Если узел имеет только 2 логических ЦП, он никогда не развернет более 2 реплик этой службы на этом узле.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .