Рабочий Docker освобождается от нагрузки после перезагрузки - PullRequest
0 голосов
/ 06 января 2019

У меня есть рой докеров, состоящий из одного менеджера и одного рабочего.

Когда я создал службу с 4 репликами, я получил два контейнера на каждом узле (2 на диспетчере и 2 на рабочем узле).

  • Я перезапустил рабочий узел, поэтому обнаружил, что менеджер теперь имеет всю нагрузку (4 контейнера).
  • После перезапуска у менеджера по-прежнему есть 4 контейнера, а у рабочего ничего нет.
  • Не следует ли перераспределять нагрузку автоматически после того, как рабочий узел вернулся из перезапуска?

  • Если нет, как я могу перераспределить нагрузку?

1 Ответ

0 голосов
/ 06 января 2019

Только с одним менеджером у вас нет HA, и когда он не работает, ничего не будет перенесено. Вам нужно как минимум 3 менеджера для поддержки сценария с одним менеджером. Когда один менеджер перезапускается, это условие гонки между планировщиком, назначающим рабочую нагрузку, и существующим узлом, повторно соединяющимся, что рабочий узел вряд ли победит.

Режим Swarm не будет активно перемасштабировать перепланирование рабочих нагрузок: ни при добавлении новых узлов в кластер, ни при простом перезапуске нижнего узла существующие задачи будут продолжать выполняться на своем текущем узле, пока не произойдет изменение, которое заставит их перенести свое расписание. Это изменение может быть неработающим узлом или обновлением службы. Это улучшает HA, поскольку новый узел может быть нестабильным / колеблющимся.

Чтобы принудительно включить режим роя, чтобы сбалансировать службу, вы можете запустить:

docker service update --force $service_name

Это приведет к обновлению без каких-либо других изменений этой службы. (Замените $service_name названием или идентификатором вашей службы.)

...