Blue-Green deployment — это стратегия, направленная на развертывание с нулевым временем простоя. Для облачных приложений общепринятой практикой является сокращение времени простоя при обновлении версии приложения. Благодаря легкости, с которой мы можем предоставить новую инфраструктуру в облаке, становится проще внедрять новые способы улучшения развертывания.
В этом посте мы рассмотрим, как использовать Blue-Green deployment с Kubernetes. Одним из лучших мест для поиска определения является глоссарий терминов, предоставленный Cloud Native Computing Foundation ( CNCF ). CNCF определяет развертывание Blue Green как
«Стратегия обновления работающих компьютерных систем с минимальным временем простоя. Оператор поддерживает две среды, называемые «синей» и «зеленой». Один обслуживает рабочий трафик (версия, которую в настоящее время используют все пользователи), а другой обновляется. После завершения тестирования в неактивной (зеленой) среде производственный трафик переключается (часто с помощью балансировщика нагрузки)».
Суть здесь в двух одинаковых средах, названных синей и зеленой, и переключении трафика с помощью балансировщика нагрузки. Давайте посмотрим, как это можно применить к среде Kubernetes.
Начнем с создания двух версий приложения. Скажем, V1, которая развернута в реальной среде формирует нашу синюю среду. Для простоты я создал простое приложение ASP.Net Core. Оно упаковано в образ Docker с двумя тегами. Один тег имеет синий фон и будет использоваться для развертывания в синей среде. Другой образ контейнера с зеленой меткой будет использоваться для развертывания в зеленой среде. Два образа контейнера Docker публикуются в Dockerhub.
Как только образы контейнеров будут отправлены в реестр контейнеров, мы можем использовать развертывание Kubernetes для развертывания в кластере Kubernetes. Мы создаем blue-deployment, используя образ, помеченный как blue. Развертывание Kubernetes внутренне создаст набор реплик и связанный модуль. В шаблоне развертывания модуля мы устанавливаем метку app: blue.
Развертывание предоставляется за пределами кластера Kubernetes с помощью службы Kubernetes типа loadbalancer. Сервис использует селектор со значением app: blue.
Просмотрите общедоступный IP-адрес службы балансировки нагрузки, и нам будет представлена веб-страница с синим фоном.
Второй шаг сине-зеленого развертывания — создание зеленой среды. Это делается путем создания второго развертывания Kuberentes с использованием тега image nileshgule/blue-green-demo:green. Мы также устанавливаем метку для развертывания как app: green. Остальные атрибуты в файле манифеста почти такие же, как у синего развертывания. После применения зеленого развертывания служба по-прежнему обслуживает 100% трафика в синей среде. Мы можем выполнить тестирование следующей версии или выпуска приложения, развернутого в зеленой среде. Если тесты пройдут успешно, мы можем переключить трафик на зеленую среду.
Последним шагом в сине-зеленом развертывании является переключение трафика на зеленую среду. Мы можем сделать это, отредактировав манифест службы. Мы обновляем селектор, чтобы выбрать модули с app: green label. Примените это изменение к службе Kubernetes. Весь трафик теперь перенаправляется в зеленую среду.
Обратите внимание, что синяя среда все еще существует, но активный или текущий трафик обслуживается зеленой средой. Если есть какие-либо проблемы с зеленой средой, мы можем снова изменить селектор в службе, чтобы он указывал обратно на синюю среду, что позволит нам быстро отменить изменения с минимальным воздействием на конечных пользователей.
Шаги, описанные в этом сообщении блога, подробно демонстрируются в видео на Youtube. Посмотрите видео для живой демонстрации и не стесняйтесь оставлять отзывы в комментариях к видео.
Стратегию Blue-Green развертывания очень легко использовать в Kubernetes с помощью Service. Эта стратегия весьма полезна для сокращения времени простоя приложений без сохранения состояния. Приложения с состоянием немного сложнее. Это снижает риск при обновлении приложений. Имея резервную среду, мы можем легко вернуться к более старой версии без простоев. Надеюсь, вы нашли это полезным.
До следующего раза, кодируйте со страстью и стремитесь к совершенству.