Зеленый или голубой? Цвет, который все видят по-разному – Woman Delice
Случалось ли вам с упоением спорить со своим любимым о том, какого на самом деле цвета надетая на вас блузка или рубашка? Приходилось ли вам с удивлением слышать что вещь, которую вы искренне считали зеленой, кем-то другим воспринимается как голубая?
Распознавание цветов – штука тонкая, у всех нас свои особенности, которые влияют на то, как именно наш мозг интерпретирует визуальную информацию. Правильного ответа на вопрос «синий или зеленый» в данном случае нет, так как разными людьми один и тот же оттенок цвета может восприниматься по-разному.
Для того, чтобы избежать разночтений существует система кодирования оттенков цвета (RGB-модель). С технической точки зрения каждый цвет представляет собой микс из трех тонов – красного, зеленого и голубого (red, green, blue), и конечный оттенок зависит от того, какой из тонов присутствует в оттенке в каком количестве. Однако человеческий мозг иногда интерпретирует этот микс очень вольно, и с этим связана разница в восприятии одного и того же оттенка разными людьми.
Эксперимент
Эксперимент, который провели ученые компании Optical Express очень наглядно показал эту разницу. Как вы думаете, какого цвета этот квадрат – голубого или зеленого? Ну или так: лично для вас этот цвет скорее голубой, чем зеленый, или наоборот?
Результаты эксперимента показали неоднозначность восприятия оттенков разными людьми. Ученые предъявили это изображение участникам, не страдающим от дальтонизма (в опросе приняли участие 1000 человек) и попросили ответить на вопрос «какого цвета этот прямоугольник?». Для 32% опрошенных этот цвет голубой, для 64% — зеленый, и 4% так и не смогли определиться. Вот как сами ученые объясняют такой разброс во мнениях:
Каждый человек уникален, и на восприятие оттенка цвета может влиять множество разных факторов. Световой луч проникает в глазное яблоко и достигает ретину, светочувствительную ткань, которой выстлано дно глазного яблока. Дальше происходит процесс интерпретации, когда свет трансформируется в электрический сигнал, который передается по оптическому нерву на кортекс, участок мозга, отвечающий за обработку полученной информации.
На то, как именно мозг интерпретирует оттенок цвета могут влиять не только физиологические особенности, но и психоэмоциональное состояние человека. В частности, люди, переживающие стресс менее чувствительны к зеленым оттенкам, и среди них гораздо больше тех, кто назвал указанный оттенок цвета голубым.
И все-таки – зеленый или голубой?
Зеленый. С технической точки зрения модель данного цвета описывается как RGB 0.122.116 (зеленых тонов – 122, голубых – 116, красных — ноль). После того, как участники эксперимента называли цвет, ученые помещали с двух сторон от картинки еще два изображения, выраженного зеленого и выраженного голубого цвета, после чего снова просили ответить на вопрос «какого цвета этот прямоугольник?». Имея четкие цветовые референсы 97% участников эксперимента назвали исходный прямоугольник зеленым.
Ну и если вы все-таки увидели этот цвет как голубой, то задумайтесь — возможно, вам просто пора взять отпуск!
зеленый и голубой | IN COLOR BALANCE
зеленый и голубой | IN COLOR BALANCEЦветовая палитра №3730
голубой и зеленый, голубой и салатовый, голубой и сиреневый, голубой и фиолетовый, зеленый и голубой, зеленый и салатовый, зеленый и сиреневый, зеленый и фиолетовый, пурпурный, салатовый и голубой, салатовый и зеленый, салатовый и сиреневый, синий, цвета перьев павлина.
Facebook Twitter Pinterest Share
Цветовая палитра №3563
голубой и зеленый, голубой и салатовый, голубой и сиреневый, голубой и фиолетовый, зеленый и голубой, зеленый и салатовый, зеленый и сиреневый, зеленый и фиолетовый, пурпурный, салатовый и голубой, салатовый и зеленый, салатовый и сиреневый, синий, цвета перьев павлина, яркий синий.
Facebook Twitter Pinterest Share
Цветовая палитра №2790
васильковый цвет, голубой, голубой и зеленый, зеленый, зеленый и голубой, коричневый, красно-коричневый, оттенки голубого, оттенки зеленого, оттенки салатового, песчаный цвет, подбор цвета, подбор цвета для гостиной, салатовый, синий, темно-голубой, темно-зеленый цвет, цвет зелени, цвет зеленого чая, цвет песка, цветовое решение для дома.
Facebook Twitter Pinterest Share
Цветовая палитра №2664
голубой и зеленый, голубой и салатовый, голубой и цвет лайма, зеленый и голубой, зеленый и салатовый, оттенки голубого, оттенки цвета лайма, палитра для лета, салатовый и голубой, салатовый и зеленый, салатовый и цвет лайма, синий и цвет лайма, сочетание цветов для лета, цвет лайма и голубой, цвет мохито, цвет мяты, цветовое сочетание лета.
Facebook Twitter Pinterest Share
Цветовая палитра №2094
голубой и желтый, голубой и зеленый, голубой и красный, голубой и оранжевый, желтый и голубой, желтый и зеленый, желтый и красный, желтый и оранжевый, зеленый и голубой, зеленый и желтый, зеленый и красный, зеленый и оранжевый, красный и голубой, красный и желтый, красный и салатовый, оранжевый и голубой, оранжевый и желтый, оранжевый и зеленый, оранжевый и красный.
Facebook Twitter Pinterest Share
Цветовая палитра №2089
голубой, голубой и салатовый, жёлто-зелёный, зеленый, зеленый и голубой, коричневый, лайм, мохито, нежный голубой, оттенки зеленого, салатовый, салатовый и лаймовый, темно зеленый, тёмно-зелёный, темно-коричневый, цвет лайма, цвет мяты.
Facebook Twitter Pinterest Share
Цветовая палитра №2035
бежевый и синий, голубой и зеленый, голубой и изумрудный, голубой и синий, зеленый и голубой, зеленый и синий, изумрудный и голубой, оттенки бирюзового, серо-коричневый, синий и бежевый, синий и голубой, синий и зеленый, цвет моря, цвет песка.
Facebook Twitter Pinterest Share
Цветовая палитра №2033
голубой и коричневый, зеленый и голубой, зеленый и циан, коричневый, коричневый и голубой, коричневый и циан, оттенки зеленого, оттенки коричневого, серо-зеленый, тёмно-зелёный, темно-коричневый, цвет циан, яркий голубой.
Facebook Twitter Pinterest Share
Использование сине-зеленого развертывания для сокращения времени простоя и риска
Сине-зеленое развертывание — это метод, который сокращает время простоя и риск за счет запуска две идентичные производственные среды, называемые Blue и Green.
В любое время активна только одна из сред, при этом действующая среда обслуживающий весь производственный трафик. В этом примере синий в настоящее время активен, а зеленый бездействует.
По мере подготовки новой версии программного обеспечения развертывание и заключительный этап тестирование происходит в среде , а не live: в этом примере Зеленый. После того, как вы развернули и полностью протестировали программное обеспечение в Green, вы переключаете Router, поэтому все входящие запросы теперь идут к зеленому, а не к синему. Зеленый теперь активен, а Синий бездействует.
Этот метод может исключить время простоя из-за развертывания приложения. Кроме того, сине-зеленое развертывание снижает риск: если произойдет что-то непредвиденное со своей новой версией на Грин можно сразу откатиться на последнюю версию, переключившись обратно на синий.
Примечание . Если ваше приложение использует реляционную базу данных, сине-зеленое развертывание может привести к расхождениям между базами данных Green и Blue во время обновления. Чтобы максимизировать целостность данных, настройте единую базу данных для обратной и прямой совместимости.
Примечание . Шаблон сопоставления маршрутов можно настроить для отображения статической страницы обслуживания во время окна обслуживания для трудоемких задач, таких как миграция базы данных. В этом сценарии маршрутизатор переключает все входящие запросы с синего на техническое обслуживание на зеленый.
Пример сине-зеленого развертывания с помощью Cloud Foundry
В этом примере мы начнем с простого приложения: «демо-время». Это приложение представляет собой веб-страницу, на которой отображаются слова «Синее время» и дата/время на сервер.
Шаг 1. Отправка приложения
Используйте интерфейс командной строки Cloud Foundry (cf CLI) для отправки приложения. Назовите приложение «Blue» с поддоменом «demo-time».
$ cf push Синий -n демо-время
Как показано на рисунке ниже:
- Blue теперь работает на Cloud Foundry.
- Маршрутизатор CF отправляет весь трафик
demo-time.example.com
в Blue.
Шаг 2. Обновите приложение и нажмите
Теперь внесите изменения в приложение.
Сначала замените слово «Синий» на веб-странице на «Зеленый», а затем перестройте исходный файл для приложения. Запустите cf push
еще раз, но используйте имя «Зеленый» для приложения и укажите
другой субдомен для создания временного маршрута:
$ cf push Green -n demo-time-temp
После этого нажатия:
- Два экземпляра нашего приложения теперь работают в Cloud Foundry: оригинальный синий и обновленный зеленый.
- Маршрутизатор CF продолжает отправлять весь трафик для
demo-time.example.com
на Синий. Маршрутизатор теперь также отправляет любой трафик дляdemo-time-temp.example.com
в Green.
Шаг 3. Сопоставьте исходный маршрут с зеленым
Теперь, когда оба приложения запущены и работают, переключите маршрутизатор, чтобы все входящие
запросы идут в Зеленое приложение и синее приложение.
Сделайте это, сопоставив исходный URL-маршрут ( demo-time.example.com
) с зеленым маршрутом.
app с помощью команды cf map-route.
$ cf map-route Green example.com -n demo-time Привязка demo-time.example.com к Green... ОК
После команды cf map-route
:
- Маршрутизатор CF продолжает отправлять трафик для
demo-time-temp.example.com
на Green. - В течение нескольких секунд маршрутизатор CF начинает трафик балансировки нагрузки для
demo-time.example.com
между синим и зеленым.
Шаг 4. Удаление маршрута к синему
После того, как вы убедитесь, что зеленый работает должным образом, прекратите направлять запросы к синему используя команду cf unmap-route:
$ cf unmap-route Blue example.com -n demo-time Отвязка demo-time.example.com от синего... ОК
После команды cf unmap-route
:
- Маршрутизатор CF прекращает отправку трафика на Blue.
Теперь весь трафик за
demo-time.example.com
отправляется Зеленому:
Шаг 5. Удаление временного маршрута к зеленому
Теперь вы можете использовать cf unmap-route
для удаления маршрута demo-time-temp. example.com
из Green. Маршрут можно удалить с помощью cf delete-route
или зарезервировать для последующего использования. Вы также можете вывести Blue из эксплуатации или оставить его на случай, если вам понадобится откатить изменения.Реализация
члена сообщества Cloud Foundry написали плагин для автоматизации сине-зеленого процесс развертывания:
- BlueGreenDeploy: cf-blue-green-deploy — это плагин, написанный на Go, для интерфейса командной строки Cloud Foundry (cf CLI), который автоматизирует несколько шагов, связанных с развертыванием без простоев.
Что такое синее/зеленое развертывание?
Что такое сине-зеленое развертывание и автоматизация сине-зеленого в Kubernetes
Сине-зеленое развертывание — это подход к развертыванию программного обеспечения, который помогает организациям развертывать частые обновления, сохраняя при этом высокое качество и удобство работы пользователей.
В этой модели используются две одинаковые производственные среды (синяя и зеленая) для выпуска обновлений программного обеспечения. В синей среде работает существующая версия программного обеспечения, а в зеленой — новая версия. В каждый момент времени работает только одна среда, принимающая весь производственный трафик. Как только новая версия пройдет соответствующие тесты, можно безопасно передавать трафик в новую среду. Если что-то пойдет не так, трафик переключается на предыдущую версию.
Как работает сине-зеленый процесс развертывания
Основным условием сине-зеленого развертывания является наличие двух идентичных производственных сред с маршрутизатором, балансировщиком нагрузки или сервисной сеткой, которые могут переключать трафик между ними.
Сине-зеленый процесс развертывания работает следующим образом:
- Развернуть новую версию — развернуть новую (зеленую) версию вместе с текущей (синей) версией. Протестируйте его, чтобы убедиться, что он работает должным образом, и при необходимости внесите в него изменения.
- Переключить трафик — когда новая версия будет готова, переключить общий трафик с синего на зеленый. Это должно быть сделано плавно, чтобы конечные пользователи не прерывались.
- Монитор — внимательно следите за тем, как пользователи взаимодействуют с новой версией, и следите за ошибками и проблемами.
- Развернуть или откатить — при возникновении проблемы немедленно откатиться, переключив трафик обратно на синюю версию. В противном случае оставьте трафик на зеленой версии и продолжайте ее использовать. Зеленая версия теперь становится синей (текущей) версией, а новая версия может быть развернута вместе с ней как «новая зеленая» версия.
Сине-зеленое развертывание: варианты использования и преимущества
Вот несколько сценариев, в которых может быть полезно сине-зеленое развертывание.
Быстрые выпуски
Для владельцев продуктов, работающих в среде CI/CD, сине-зеленое развертывание — отличный способ быстро перевести программное обеспечение в производство. Команды DevOps могут выпускать программное обеспечение в любое время, без необходимости планировать выпуск на выходные или в нерабочее время. Эти развертывания не оказывают негативного влияния на пользователей, поскольку не связаны с ними простоями.
Сине-зеленые развертываниятакже упрощают обновления для команд DevOps. Нет необходимости спешить с обновлениями во время развертывания, что может привести к ошибкам и ненужному стрессу.
Простые откаты
Синие/зеленые развертыванияобеспечивают простой способ отката к безопасной рабочей версии в случае, если что-то пойдет не так. Это снижает риски, связанные с экспериментами в производственной среде. Команды могут легко устранять проблемы с помощью простых изменений маршрутизации и возвращаться к стабильной производственной среде.
Если приложение сохраняет состояние, существует риск прерывания текущих транзакций при откате. Один из способов смягчить эту проблему — сделать приложение доступным только для чтения во время перехода. Другой способ — использовать балансировщик нагрузки или сервисную сетку для выполнения скользящего перехода, ожидая завершения каждой транзакции и только затем направляя пользователя обратно в синюю версию.
Тестирование в производстве
Сколько бы усилий ни было потрачено на то, чтобы сделать промежуточную и производственную среды идентичными, обычно между ними есть незначительные различия. Это может привести к исключениям и ошибкам, которые могут не быть обнаружены до тех пор, пока новая версия не будет запущена в производство. Сине-зеленое развертывание позволяет командам DevOps тестировать новый код в реальной производственной среде, выявляя последние проблемы и проверяя производительность. После этого можно беспрепятственно перенести трафик на новую версию.
A/B-тестирование
Еще одним потенциальным вариантом использования сине-зеленых развертываний является A/B-тестирование. В этом случае новая версия кода загружается в синюю среду, и часть (обычно 50%) пользовательского трафика отправляется в синюю версию вместо исходной зеленой версии. Затем вы можете отслеживать производительность обеих сред по ключевым показателям, чтобы определить влияние новой версии.
Синие/зеленые проблемы развертывания
Несмотря на то, что сине-зеленые развертывания очень полезны, есть несколько проблем, на которые следует обратить внимание:
- Время и усилия по настройке — настройка синего/зеленого развертывания сложна, рискованна и может потребовать повторения несколько раз для правильной работы. В среде Kubernetes вы можете использовать специальные инструменты, такие как Argo Rollouts, которые имеют встроенную сине-зеленую функциональность развертывания.
- Холодный запуск — у пользователей могут возникнуть проблемы с производительностью при переходе в новую среду. Могут быть и другие непредвиденные проблемы в точке отсечки от одной среды к другой. Это можно облегчить, запустив процедуры разминки и стресс-тестирования.
- Стоимость — сине-зеленое развертывание требует удвоения производственной среды. При работе в локальной среде это требует приобретения дополнительного оборудования. В облаке это может означать двойную оплату инфраструктуры.
- Миграция схемы — миграция базы данных — сложная задача. Как правило, сине-зеленые развертывания не поддерживают изменения схемы базы данных. Даже если схема останется прежней, синхронизировать данные может быть сложно. Общие стратегии используют репликацию или делают базу данных доступной только для чтения во время перехода.
- Транзакции пользователей — когда трафик меняется с синего на зеленый или наоборот, транзакции могут быть прерваны. Один из способов справиться с этим — показать ошибку и попросить пользователя повторить транзакцию, но это плохой пользовательский опыт. Лучшим способом является параллельное обслуживание всех транзакций в обеих средах. Это требует очистки повторяющихся данных после развертывания.
- Общие службы — если приложение зависит от внешней базы данных или любой другой сторонней или устаревшей службы, эти службы могут передавать информацию между синей и зеленой средами. Если одна среда косвенно влияет на другую, это может помешать развертыванию и сделать тестирование ненадежным.
Рекомендации по сине-зеленому развертыванию
Ниже приведены некоторые рекомендации по реализации сине-зеленой модели развертывания.
Использовать управление версиями базы данных
Управление версиями базы данных помогает организациям отслеживать базы данных своих приложений и решать такие проблемы, как несоответствие данных между средами или отсутствие данных в одной из баз данных. Сине-зеленое развертывание требует нескольких экземпляров базы данных, которые могут легко стать несинхронизированными.
Эффективное управление версиями базы данных должно включать следующие методы:
- Документировать все изменения в системе управления версиями — обрабатывать схему базы данных приложения и связанные с ней справочные данные как обычный код, сохраняя их в системе контроля версий.
- Обеспечить отдельный экземпляр базы данных для каждого разработчика. — каждый разработчик должен иметь свои собственные экземпляры базы данных, чтобы избежать конфликтов между несовместимыми изменениями в программе.
- Развязка схемы и изменения кода — отделение изменений схемы от изменений кода позволяет реляционной базе данных обслуживать обе среды, поскольку она может находиться за пределами определенной синей/зеленой границы среды.
Флаги функций рычага
Флаги функций позволяют разработчикам легко включать и выключать функции, сокращая объем инженерных работ, необходимых для тестирования функций. Разработчики могут использовать флаги функций для управления доступом к функциям и интеграции отзывов клиентов в свои функции.
В сине-зеленом развертывании флажки функций полезны для тестирования функций в резервной среде без нарушения рабочей среды. Они позволяют организациям оценивать отзывы пользователей и отключать любую неэффективную функцию.
Хаос Инженерия
Применение хаос-инжиниринга в непроизводственной среде помогает организации избежать внесения рисков в производственную среду при проведении экспериментов и проверке надежности производственной системы. Синие/зеленые развертывания помогают изолировать проблемы от рабочей среды, чтобы они не влияли на конечных пользователей.
Хаос-инженерия в тестовой среде безопаснее, но она может быть ограничена по сравнению с реальной средой. Например, отсутствие реальных пользователей может ограничить возможности инженера по тестированию некоторых аспектов приложения. Однако большинство аспектов, связанных с конфигурацией, можно протестировать даже с воображаемыми пользователями.
Плавное переключение
Эти методы могут помочь оптимизировать плавное переключение между средами в синем/зеленом развертывании:
- Мониторинг сред — организации должны отслеживать обе среды в синем/зеленом развертывании, обеспечивая четкое разделение во избежание путаницы. Должно быть легко переключаться между средами и фильтровать некритические оповещения.
- Обеспечьте совместимость версий кода — для успешного последовательного обновления требуется сосуществование разных версий кода. Мини-релизы могут помочь обеспечить успешную параллельную работу кода во время обновлений и избежать простоев.
- Используйте балансировку нагрузки или сервисные сетки — балансировщики нагрузки распределяют рабочие нагрузки по нескольким ресурсам для обеспечения более эффективных вычислений. Балансировщик нагрузки может сразу направлять трафик на разные серверы. В среде Kubernetes сервисная сетка обеспечивает детальный контроль над маршрутизацией трафика между ресурсами.
- Автоматизируйте там, где это возможно — автоматизация ускоряет и упрощает процессы и может снизить риск человеческой ошибки, особенно при выполнении повторяющихся задач.
Можете ли вы выполнить сине-зеленое развертывание в Kubernetes?
Многие группы разработчиков переходят на Kubernetes в качестве среды для разработки, тестирования и развертывания в рабочей среде. Kubernetes может упростить развертывание приложений, а также может использоваться для автоматизации синего/зеленого развертывания.
Однако Kubernetes не предоставляет готовые развертывания синего/зеленого цвета. Он предлагает объект Deployment, который включает «последовательные обновления». Это позволяет обновлять приложение с нулевым временем простоя, постепенно заменяя модули новой версией приложения.
Это похоже на сине-зеленое развертывание, но не обеспечивает всех его преимуществ. При скользящем развертывании может быть сложно выполнить откат, если что-то не так с новой версией. Также требуется время для развертывания приложения, а сине-зеленый шаблон обеспечивает мгновенное переключение.
КомандыDevOps могут настраивать Kubernetes и реализовывать синее/зеленое развертывание, используя несколько методов и инструментов. Одним из популярных инструментов является Argo Rollouts, контроллер, который предоставляет расширенные возможности развертывания для сине-зеленых развертываний и других типов прогрессивной доставки.
Развертывание Kubernetes Blue Green с помощью Argo Rollouts
Argo Rollouts — это контроллер прогрессивной доставки для Kubernetes. Он поддерживает несколько стратегий развертывания, включая сине-зеленое и канареечное развертывание.
Argo Rollouts предоставляет новый объект Kubernetes под названием Rollout, который похож на Deployment, но с дополнительными параметрами, которые позволяют командам указывать расширенные стратегии развертывания.
Вот как объект Rollout автоматически выполняет синее/зеленое развертывание:
- Пользователи предоставляют службу Kubernetes, которая перенаправляется к текущей (синей) версии и, при необходимости, другую службу, которая перенаправляется к новой (зеленой) версии.
- Контроллер развертывания использует наборы реплик для развертывания начальной версии приложения и направляет к нему трафик, вводя уникальный хэш набора реплик в селекторы служб.
- При обновлении приложения разработчики изменяют шаблон развертывания (например, чтобы включить другой образ контейнера). Объект Rollout обнаруживает изменение и создает новый ReplicaSet с новой версией.
- Активная служба продолжает указывать на старый набор реплик, пока развертывается новый.
- Когда новый набор реплик становится доступным, контроллер автоматически модифицирует активную службу для маршрутизации к новому набору реплик.
- Контроллер ожидает в течение периода времени, настроенного в шаблоне развертывания, а затем уменьшает масштаб старого набора реплик.
Ниже приведен пример шаблона для объекта развертывания, который выполняет синее/зеленое развертывание:
версия API: argoproj. io/v1alpha1 вид: развертывание метаданные: название: rollout-bluegreen спецификация: [...] # эта часть шаблона идентична обычному развертыванию стратегия: цвет морской волны: activeService: развертывание-сине-зеленый-активный previewService: rollout-bluegreen-preview автопромотионенаблед: ложь
Шаблон использует эти три параметра для управления поведением синего/зеленого развертывания:
-
activeService
— сервис, который должен маршрутизироваться к текущей (синей) версии. Это начальный набор реплик, развернутый контроллером. -
previewService
(необязательно) — служба, которая должна перенаправляться на новую (зеленую) версию перед ее повышением. Это позволяет просматривать новую версию, не делая ее доступной для рабочего трафика. -
autoPromotionEnabled
— если установлено значение false, новая версия сразу не продвигается. Оператор может продвигать его вручную с помощью командыразвертывания kubectl argo продвигают ROLLOUT
. В противном случае, по умолчанию Rollout моментально переключает трафик, когда новая версия готова.
Узнайте больше в наших подробных руководствах по синим/зеленым развертываниям в Kubernetes .
Синие/зеленые развертывания в Kubernetes: общий процесс
- Текущая версия приложения отмечена цветом (например, синим)
- Новое развертывание выполняется с совершенно новыми модулями и помечается новым цветом (например, зеленым)
- Обе версии существуют одновременно, но служба Kubernetes по-прежнему указывает на существующую/синюю версию, поэтому не все пользователи системы пока видят изменение
- Различные типы тестов (например, дымовые тесты) могут выполняться в новой версии без каких-либо последствий для существующих пользователей
- По истечении заданного пользователем периода времени служба Kubernetes переключается и теперь указывает на новую версию. Теперь все живые пользователи могут использовать новый функционал без простоев.
- Если новая версия работает должным образом, старая версия уничтожается. Новая версия становится «текущей версией», а служба Kubernetes остается такой же, как и .
- Если в новой версии возникают проблемы, служба Kubernetes переключается обратно на предыдущую версию. Это оказывает минимальное влияние на пользователей. Новая версия уничтожается и все возвращается в исходное состояние
Автоматизированные сине-зеленые развертывания с помощью Codefresh: краткий обзор
Kubernetes уже поставляется с базовыми строительными блоками (развертыванием и службами), которые делают возможным сине-зеленое развертывание с помощью простых команд kubectl. Проблема надежного решения CI/CD заключается в том, как автоматизировать эти команды kubectl, чтобы развертывание синего/зеленого происходило хорошо контролируемым и воспроизводимым образом.
Давайте посмотрим, как упаковать эти вызовы kubectl в предварительно упакованный образ Docker, предлагающий декларативный способ выполнения синего/зеленого развертывания.
TL;DR
Конечная цель состоит в том, что для развертывания с использованием синего/зеленого вы можете просто вставить следующий шаг сборки в ваш codefresh.yml:
blueGreenРазвертывание: title: "Развертывание новой версии ${{CF_SHORT_REVISION}}" изображение: codefresh/k8s-синий-зеленый:мастер среда: - SERVICE_NAME=мой сервис - DEPLOYMENT_NAME=мое-приложение - NEW_VERSION=${{CF_SHORT_REVISION}} - HEALTH_SECONDS=30 - ПРОСТРАНСТВО ИМЕН = цвета - KUBE_CONTEXT=myDemoAKSCluster
Здесь синее/зеленое развертывание происходит полностью декларативным образом. Все команды kubectl абстрагированы.
Шаг сине-зеленого развертывания — это, по сути, образ Docker с одним исполняемым файлом, который принимает следующие параметры в качестве переменных среды:
Переменная среды | Описание |
---|---|
KUBE_CONTEXT | Имя вашего кластера на панели инструментов Codefresh |
SERVICE_NAME | Существующая служба K8s |
DEPLOYMENT_NAME | Существующее развертывание k8s |
NEW_VERSION | Тег Docker для следующей версии приложения |
HEALTH_SECONDS | Сколько секунд оба цвета должны сосуществовать. После этого модули новой версии будут проверены на перезапуски | .
ПРОСТРАНСТВО ИМЕН | Пространство имен K8s, где происходят развертывания |
Предварительные условия для автоматического синего/зеленого развертывания с помощью Codefresh
Синие/зеленые этапы развертывания предполагают следующие предположения:
- Начальная служба и соответствующее развертывание уже должны существовать в вашем кластере.
- Служба и развертывание должны использовать метки, определяющие их версию.
Второе предположение очень важно, поскольку именно так сине-зеленый шаг определяет текущую версию и может переключить балансировщик нагрузки на следующую версию.
Вы можете использовать что угодно в качестве «версии», но рекомендуемый подход — использовать хэши Git и помечать ими образы Docker. В Codefresh это очень просто, потому что встроенная переменная CF_SHORT_REVISION дает вам git-хеш отправленной фиксации.
Этап сборки основного приложения, на котором создается образ Docker, который будет использоваться на синем/зеленом шаге, является стандартным этапом сборки, на котором образ Docker помечается хэшем git
.BuildingDockerImage: title: Создание образа Docker тип: сборка image_name: тривиальная сеть рабочий_каталог: ./пример/ тег: '${{CF_SHORT_REVISION}}' докерфайл: Dockerfile
Для получения дополнительных сведений ознакомьтесь с примером приложения, которое также содержит службу и развертывание с правильными метками, а также с полным файлом codefresh.yml.
Запуск синего/зеленого развертывания в Codefresh
После того, как вы выполните указанные выше предварительные условия, запуск синего/зеленого развертывания в CodeFresh будет таким же простым, как:
- Изменение шаблона приложения, запуск развертывания в Codefresh
- Шаг конвейера Codefresh отображает следующие выходные данные:
- Сине-зеленый шаг копирует существующее развертывание и изменяет его версию, создавая второе с обновленным образом Docker. Примечание. На данный момент обе версии (старая и новая) вашего приложения развернуты в кластере Kubernetes. Весь живой трафик по-прежнему направляется в старое приложение.
- Существует период ожидания (настраиваемый как параметр среды, показанный в предыдущем разделе). В течение этого периода вы можете самостоятельно выполнять любые внешние проверки (например, проверять свою панель состояния здоровья или запускать какое-либо дымовое тестирование).
- По истечении периода ожидания скрипт проверяет количество перезапусков в модулях нового приложения. Если есть какие-либо ошибки, он уничтожает новое развертывание, и кластер откатывается к исходному состоянию. Ваши пользователи никак не затронуты.
- Если нет перезапусков модуля, служба переключается на новое развертывание, а старое развертывание отбрасывается.
Вы также можете увидеть изменения на панели инструментов Codefresh Kubernetes. В следующем примере используется кластер Azure Kubernetes, но любой кластер будет работать, если в файлах манифеста присутствуют метки.