Во время опустошения узла во время обновления Swarm, как избежать того, чтобы новый активный узел получал все перепланированные контейнеры? - PullRequest
0 голосов
/ 21 января 2020

Во время обновления (в данном случае) нашего Swarm мы должны истощить узел, обновить его, снова сделать его активным, опустошить следующий узел, et c ...

Он отлично работает для первого узла, так как загрузка контейнеров для перепланирования распределяется довольно справедливо на все оставшиеся узлы, но при сливе второго узла все становится сложнее, так как все контейнеры для перепланирования go недавно обновленного узла, который имеет (почти ) задание не выполняется.

Загрузка при запуске всех служб огромна по сравнению с обычным бизнесом, узел не может поддерживать работу, и некоторые контейнеры могут не запуститься из-за ограничений проверки работоспособности и политики max_attempts.

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

Ура, Томас

1 Ответ

0 голосов
/ 22 января 2020

Это должен быть ручной процесс. Вы можете приостановить планирование на узле до go вниз, а затем постепенно останавливать контейнеры на этом узле, чтобы они медленно мигрировали на другие узлы в кластере Swarm. Например,

# on manager
docker node update --availability=pause node-to-stop

# on paused node
docker container ls --filter label=com.docker.swarm.task -q \
 | while read cid; do
     echo "stopping $cid"
     docker stop ${cid}
     echo "pausing"
     sleep 60
   done

Настройте команду сна в соответствии с вашей средой.

...