Режим роя Docker: масштабирование узла и удаление служб

У меня есть набор задач для данного сервиса t1, t2, ..., tk по узлам N1, N2, ...Nw.

Из-за меньшего использования мне не нужно столько задач, сколько k. Мне нужно только l задач (l < k).

На самом деле мне не нужно w узлов, поэтому я хочу начать удалять машины и платить меньше. Можно удалять по одной машине за раз.

Каждая служба имеет свое состояние. Службы запускаются в реплицированном режиме.

1) Как удалить один узел и заставить рой докеров не создавать заново такое же количество задач для службы?

Заметки:

  • Я могу гарантировать, что никакая работа не будет перенаправлена ​​на задачи, выполняемые на определенном узле, поэтому удаление определенного узла безопасно.
  • Это самое простое решение, я закончу с w - 1 узлами и l сервисами, предполагая, что на удаленном узле обслуживалось k - l сервисов.

or

2) Как удалить определенные контейнеры (задачи) из docker swarm и уменьшить количество реплик службы на количество удаленных задач?

Заметки:

  • Я предполагаю, что я уже удалил узел. Услуги с узла были перераспределены на другие узлы.
  • Я сам слежу за контейнерами (задачами), которые не обслуживают трафик -> для поддержания состояния не требуется

or

3) Есть ли другое решение?


person Oplatek    schedule 12.05.2017    source источник
comment
Я собираюсь предположить, что вы реализовали Docker Swarm. В настоящее время я использую Kubernetes, и кажется, что масштабирование занимает 10 минут, если на узле нет активных процессов. Это не работает для меня, и я ищу что-то, что мгновенно уменьшается. Есть ли у Docker swarm подобное ограничение или масштабирование эффективно?   -  person DUDANF    schedule 04.06.2019


Ответы (2)


Чтобы использовать конкретный пример, предположим, что у вас есть 3 узла и 9 задач. Теперь вы хотите перейти к 2 узлам и 6 задачам без ненужного изменения расписания (например, 2 режима и 9 задач или 3 режима и 6 задач).

Чтобы уменьшить масштаб службы и одновременно «слить» узел, вы можете сделать следующее:

docker service update --replicas 6 --constraint-add "node.hostname != node_to_be_removed_hostname" service_name

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

После этого вы можете приступить к (обновлению узла докера) слить узел, удалить его из роя и удалить только что добавленное ограничение.

person Jay    schedule 09.10.2018

Чтобы ответить на ваши вопросы

Q1-> Можно просто слить ноду в кластере, чтобы проверить запущены ли сервисы на сервисах на других нодах. Как только они это сделают, вы можете безопасно удалить узел из роевого кластера. обновление узла докера -- утечка доступности ‹>

Q2-> Вы должны указать количество реплик при запуске служб, вы можете просто масштабировать его до меньшего количества.

масштаб службы докеров ‹>=‹>

person coolsvap    schedule 12.05.2017
comment
Я забыл упомянуть, что услуги никогда не заканчиваются. Они не будут перенесены. - person Oplatek; 17.05.2017