@vadimparinov

Как сделать deploy без простоя?

Добрый день!Суть такая
Допустим есть два контейнера: - frontend и backend, работают через docker compose
Как можно реализовать деплой новой версии без простоя на время создание новых контейнеров и их запуск ?
Подскажите в какую сторону копать
  • Вопрос задан
  • 634 просмотра
Решения вопроса 1
@Akela_wolf
Extreme Programmer
Принцип следующий:
  1. Делаете контейнер с фронтом-балансировщиком (nginx или что-то подобное).
  2. Запускаете второй контейнер с бэком, содержащий новую версию.
  3. Новый контейнер подключается к балансировщику. Тут дальше возможны варианты - балансировщик автоматически начинает переводить траффик на новую версию. Или в каком-то соотношении. Или только тестовый трафик. Или переключаете балансировщик на новый контейнер вручную. Или... (в общем вариантов тут много). Идея в том, чтобы перейти в целевое состояние - запросы обрабатывает новый бэкэнд. На этом этапе старая и новая версия бэкэнда должны уметь работать параллельно, то есть часть запросов может обрабатываться старой версией, часть новой, что налагает на новую версию требование сохранения обратной совместимости со старой версией (в частности это ограничивает возможные изменения структуры БД). В любой момент, если новая версия заработала как-то не так, можно "вертать всё взад", то есть опустить контейнер с новой версией и вернуть весь трафик на старую.
  4. Убедившись что новая версия работает стабильно, переводите с балансировщика весь трафик на новую и опускаете контейнер со старой версией, оставляя контейнер с новой единственным.

Не очень понимаю что вы подразумеваете под контейнером с фронтендом, если это просто веб-сервер, который раздает SPA-приложение (HTML/CSS/JS), то в принципе аналогично.

Схема такого апгрейда не слишком проста в реализации, поэтому такой апгрейд (zero-downtime upgrade) применяется в энтерпрайзе, в котором никак нельзя допустить простоя в обслуживании. Поэтому смотрите сами - насколько те несколько секунд (максимум минут) простоя за которые запускается новый контейнер стоят этой возни. Если такой апгрейд действительно нужен, то советую вместо docker compose посмотреть в сторону kubernetes.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@vitaly_il1
DevOps Consulting
Чтобы не изобретать велосипеда самому (с loadbalancer и т.п.) нужен какой-нибудь оркестратор. Их них Кубернетес самый популярный, кроме него есть Docker Swarm, Nomad, Openshift.
Ответ написан
Комментировать
Grapeoff
@Grapeoff
В чём концепция...?
docker-compose up -d --no-deps --build <service_name>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы