Допустим, у меня есть контейнер Docker с веб-сервером (например, Apache 2). Теперь хочу обновить ОС под него. Этот ответ SF говорит, что лучший способ - перестроить базовый образ и мой образ Apache. Но развертывание образа означает простои, потому что мне нужно удалить старый контейнер, прежде чем я смогу создать новый, поэтому есть только один контейнер, привязанный к порту 80/443.
Но как я могу развернуть это обновление без простоев? Следует ли мне использовать балансировщик нагрузки и использовать межконтейнерную связь? А как мне обновить балансировщик нагрузки?
Да, вам следует использовать балансировщик нагрузки и обновлять по одному экземпляру за раз. Я не уверен, в чем тут дело.
В качестве примера представьте, что у вас есть балансировщик нагрузки, который обслуживает ваш сайт A. Пользователи подключаются к нему только как и знают его только как «A». Балансировщик нагрузки знает, что существует два или более бэкэнда (B, C и т. Д.), И не имеет значения, являются ли они виртуальными машинами или контейнерами.
Затем вы хотите обновить серверные части, которые в данном случае являются экземплярами Apache.
Затем проделайте то же самое для C, D и т. Д.
Обратите внимание, что есть открытый запрос на обновление контейнеров Docker на месте, с ноября 2013 г., но, похоже, не имеет большого прогресса, поэтому указанное выше решение - это то, что вам следует делать в то же время.
Предположительно, вы спрашиваете об этом, потому что у вас уже есть действующий сайт в этой модели, и вы хотите обновить его без простоев. Итак, нам нужно достичь идеального целевого состояния, указанного выше, но постепенно.
Предположим, что:
Если эти предположения неверны, вы должны сначала исправить это так, чтобы это было правильно.
Затем выполните следующие действия:
Самый простой вариант - не запускать собственный балансировщик. Например, если вы используете облачную платформу, которая обеспечивает балансировку нагрузки как услугу, рассмотрите возможность ее использования, и тогда обслуживание и обновление балансировщика нагрузки не будут проблемой.
Если вы используете свой собственный балансировщик нагрузки, добавление еще одного уровня косвенного обращения (например, DNS) поможет. Предположим следующее:
Действуем следующим образом:
добавьте IP-адрес B в разрешение DNS вместе с A
если что-то не так с B, отмените его следующим образом:
и вы сделали.
Ознакомьтесь с этими описаниями и инструментами, которые помогут вам автоматизировать этот процесс, но общая идея остается той же:
«Все проблемы в информатике могут быть решены с помощью другого уровня косвенного обращения, за исключением, конечно, проблемы слишком большого количества косвенных указаний». - Дэвид Уиллер