Остановить, обновить, запустить все сервисы Docker Stack вместе? - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу остановить все службы в моем файле docker-stack.yml, обновить файл новыми номерами версий изображений, а затем запустить все службы.Чтобы обновить их все вместе, чтобы они всегда были в самой последней версии.

Как мне это сделать?Я бы предпочел не удалять сети и тома - я имею в виду, docker stack rm кажется излишним?И docker service scale service-name=0 чувствует себя склонным к ошибкам?тогда нужно помнить, чтобы снова вернуться к> 0.

Причина, по которой я хочу сделать остановленное обновление, заключается в том, что он проще: службы в моем приложении не должны будут быть совместимы сразные версии API друг друга.Никогда не будет версии X службы, работающей и имеющей связь с версией X - 1 другой службы (вместо этого все службы будут в одной версии X. Они используют одинаковые номера версий).

(И не стесняйтесь, дайте мне знать, если я задаю неправильный вопрос: -) Примечание. В данном конкретном случае время простоя 20-30 секунд, поскольку все контейнеры останавливают-обновляют-перезапускают сразу, нормально.И это для Docker Swarm / Stack, а не Docker-Compose (тогда можно было бы просто сделать down и up).)

1 Ответ

0 голосов
/ 16 ноября 2018

Отказ от ответственности: я чувствую, что это неправильный подход к обновлениям.Он вводит время простоя в систему, которая разработана для обеспечения высокой доступности.


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

docker service update \
  --constraint-add node.label.disable_service==true -d \
  ${service_name}

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


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

...