Как указать, чтобы какой-то узел получал больше реплик сервиса в SWARM - PullRequest
0 голосов
/ 13 марта 2020

У меня 3 сервера, один из которых имеет больше оборудования, чем другие. У меня есть служба, у которой есть 25 реплик, когда я запускаю docker stack deploy, каждый сервер получает одинаковое количество реплик этого указанного c сервера.

Можно ли указать какой-то процент реплик в файле dockercompose для перенаправить на этот указанный c узел?

1 Ответ

0 голосов
/ 13 марта 2020

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

Вот пример из документации Docker :

version: "3.7"
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M

См. Также документацию по ограничениям ресурсов Docker: https://docs.docker.com/config/containers/resource_constraints/


Второй, менее идеальный вариант - определить метки узлов, которые разделяют узлы на группы равного размера, где размер основан на ресурсах. Затем вы можете злоупотреблять функциональностью, которая позволяет распределять рабочую нагрузку по зонам высокой доступности, чтобы разделить рабочую нагрузку между компьютерами на основе их ресурсов. Для этого вы должны использовать политику распространения настроек размещения, чтобы распределить рабочую нагрузку между различными значениями метки:

version: "3.7"
services:
  db:
    image: postgres
    deploy:
      placement:
        preferences:
          - spread: node.labels.zone
...