Как определить количество реплик масштабируемого сервиса - PullRequest
1 голос
/ 30 октября 2019

У меня есть файл docker-compose, который предоставляет 2 службы, главную службу и подчиненную службу. Я хочу иметь возможность масштабировать подчиненную службу до некоторого числа экземпляров, используя

docker-compose up --scale slave=N

Однако, одна из опций, которую я должен указать при запуске команды в главной службе, - это количество ожидаемых подчиненных экземпляров. Например, если я масштабирую slave = 10, мне нужно установить --num-slaves = 10 в команде главной службы.

Есть ли способ определить количество экземпляров данной службы либо изсам файл docker-compose или из настраиваемого сценария входа точки входа?

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

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

К сожалению, нет способа определить реплики для составления Docker. ЭТО ТОЛЬКО РАБОТАЕТ ДЛЯ DOCKER SWARM В документации указывается это ссылка

Совет: В качестве альтернативы, в Compose file version 3.x вы можете указатьреплики под ключом развертывания как часть конфигурации службы для режима Swarm. Ключ развертывания и его подопции (включая реплики) работают только с командой развертывания docker stack, а не с docker-compose up или docker-compose run.

Так что если у вас есть развертываниераздел в yaml, но запустите его с помощью docker-compose, тогда это не даст никакого эффекта.

version: "3.3"

services:
  alpine1:
    image: alpine
    container_name: alpine1
    command: ["/bin/sleep", "10000"]
    deploy:
      replicas: 4
  alpine2:
    image: alpine
    container_name: alpine2
    command: ["/bin/sleep", "10000"]
    deploy:
      replicas: 2

Таким образом, единственный способ масштабирования в docker compose - это запустить команду scale вручную.

docker-compose scale alpine1=3

Примечание У меня была работа, в которой они любили docker-compose, поэтому у нас были скрипты bash для выполнения операций, подобных тем, которые вы описали. Так, например, у нас будет что-то вроде ./controller-app.sh scale test_service=10, и он будет запускаться docker-compose scale test_service=10

UPDATE Чтобы проверить количество реплик, вы можете смонтировать док-разъем в свой контейнер. Затем запустите docker ps --format {{ .Names }} | grep $YOUR_CONTAINER_NAME.

Вот как вы бы смонтировали сокет.

docker run -v  /var/run/docker.sock:/var/run/docker.sock -it alpine sh

Установить докер

apk update
apk add docker
0 голосов
/ 30 октября 2019

scale не добавляется в составную версию 3, но вы можете использовать replicas:

version: "3.7"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1

и запустить его, используя:

docker-compose --compatibility up -d

docker-compose 1.20.0 представляет новый флаг --compatibility, разработанный, чтобы помочь разработчикам легче переходить на версию 3. Когда включено, docker-compose читает раздел развертывания определения каждого сервиса и пытается преобразовать его в эквивалентный параметр версии 2. В настоящее время переведены следующие ключи развертывания:

resources limits and memory reservations
replicas
restart_policy condition and max_attempts

но:

Не используйте это в рабочей среде!

Мы рекомендуем не использовать -режим совместимости в производстве. Поскольку полученная конфигурация является приблизительной с использованием свойств, не относящихся к режиму Swarm, она может привести к неожиданным результатам.

см. this

PS:

Имена контейнеров Docker должны быть уникальными, вы не можете масштабировать сервис за пределами 1 контейнера, если вы указали пользовательское имя. Попытка сделать это приводит к ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...