Blue-Green Deployment у Kubernetes: реалізація та Argo Rollouts

Випуск нової версії перетворюється на нічний стрес: одна помилка — і прод недоступний для всіх. Ми налаштовуємо blue-green deployment під ключ: два середовища, кероване перемикання трафіку та відкат однією дією. Вікно недоступності під час випуску скорочується у рази, а повернення до робочої версії займає секунди.
Часті запитання

Blue-Green Deployment: чому реліз ламає прод

Класична картина: одне середовище, один контур, реліз накочується поверх працюючого застосунку. Перемикання трафіку робиться руками — інженер редагує конфігурацію або перезапускає процеси, поки частина користувачів уже тримає відкриті з'єднання.

Кожен реліз перетворюється на вікно недоступності, тривалість якого ніхто не береться назвати заздалегідь.

Зворотний бік — відкат релізу. Готової резервної копії попередньої версії немає: образи перезаписані, схему даних мігровано вперед, і назад вона не розгортається.

Повернути минулий стан можна тільки новою збіркою і повторним прогоном міграцій — замість хвилини виходять години, і все це на живому контурі.

Суміщені середовища додають шуму: на одному кластері живуть тестові прогони, стенд приймання і продакшн, ресурси діляться, а сплеск від перевірок б'є по користувацькому трафіку. Простій перестає бути аварійним сценарієм і стає штатним режимом релізу.

Ціна помилки — не тільки недоступність. Команда починає боятися релізів: деплої переносять у нічні години, частота релізів падає, виправлення чекають черги, зворотний зв'язок запізнюється на дні.

Розбираємо, як це закривається: що дає паралельний контур, постійна готовність другого середовища та передбачуване перемикання трафіку без простою.

Що дає перемикання між двома середовищами

Механіка проста: паралельно живуть два середовища — активне і підготовлене, трафік спрямовується на одне з них перемикачем Service або правилом Ingress.

Відкат — це перемикання селектора назад, а не перезбирання: час відкату вимірюється секундами і не залежить від розміру образу чи кількості подів. Попередня версія залишається запущеною і прогрітою, тому повернення не супроводжується сплеском помилок через холодний старт.

Готовність середовища і перевірка перед релізом

Перед перемиканням нове середовище має довести готовність: readiness-проби дають успіх, застосунок відповідає на службовому маршруті, проганяють smoke-перевірки за ключовими шляхами, за потреби — навантажувальна перевірка на одному поді.

Argo Rollouts додає до цього аналіз метрик прямо в процес релізу: поки середовище не проходить заданий поріг за помилками та затримками, трафік на нього не переводиться. Ручне підтвердження залишають там, де реліз зачіпає платежі або дані.

Що це дає у вимірюваних величинах

Простій при релізі йде в нуль: трафік перемикається між уже працюючими наборами подів, вікно недоступності відсутнє. Частка успішних релізів зростає завдяки тому, що перевірка відбувається до переведення всього трафіку, — невдала версія просто не стає активною.

Час відкату скорочується до операції перемикання, і ним можна керувати без чергового інженера і без повторного проходження перевірок.

Окремо йде цілий клас відмов, пов'язаний з «відкотили код — втратили дані»: схема бази змінюється так, щоб бути сумісною з обома версіями, і повернення стає безпечним.

Порівняння схем релізу: blue-green deployment і канареечна

Схема релізу — це компроміс: чим нижчий ризик, тим більше ресурсів, часу або інфраструктури він потребує. У Kubernetes вибирають між чотирма варіантами, і обмеження кожного проявляються не на демо, а на третьому релізі з міграцією даних.

Варіант Коли підходить Обмеження
Синьо-зелена схема Потрібен миттєвий відкат зміною трафіку; сервіс без стану або дані сумісні в обидва боки Подвійний запас ресурсів на час релізу; перемикання розриває довгі з'єднання та сесії без зовнішнього сховища
Канареечний реліз Трафік великий і різнорідний, є метрики для автоматичного рішення про розкатку Розкатка та відкат тривають у часі; потрібна надійна маршрутизація за вагами або заголовками
Тіньове дзеркалювання трафіку Хочеться перевірити версію на реальному трафіку без ризику для користувачів Копія не впливає на відповіді — порівняння будують окремо; побічні записи та зовнішні виклики ізолюють
Поступове оновлення Прості сервіси без стану, де достатньо заміни подів по одному Немає середовища, щоб перевірити реліз цілком; версії працюють одночасно, відкат теж поступовий

Схеми не взаємовиключні: Argo Rollouts веде реліз кроками з паузами та автоматичним відкатом за метриками, тому синьо-зелену схему доповнюють канареечною розкаткою, а тіньове дзеркалювання ставлять перед перемиканням трафіку — так обмеження кожної схеми перекриваються сусідньою.

Порядок впровадження: від розбору схеми до передачі

Порядок робіт будуємо так, щоб зміна версії стала рутинною операцією з передбачуваним відкатом, а не подією з ризиком. На кожному кроці впровадження blue-green deployment у замовника залишається артефакт: схема, конфігурація або регламент.

  1. Розбір поточного релізу. Дивимося, як версія потрапляє в кластер сьогодні: маніфести, власники образів, проби, фактичний час відкату. Результат — карта ризиків і список змін у контурі.
  2. Проєктування схеми. Два середовища з незалежними наборами подів, спільний доступ до даних і жорстке правило: трафік обслуговує рівно одна версія.
  3. Налаштування маршрутизації. Перемикаємо селектори сервісів і правила вхідного контролера, перевіряємо, що з'єднання закриваються коректно і запити не губляться.
  4. Налаштування Argo Rollouts. Описуємо об'єкт релізу з посиланнями на активні й попередні сервіси, задаємо проби та крок ручного підтвердження перед переведенням трафіку.
  5. Перевірка готовності. Проганяємо сценарії на попередньому середовищі: відгук ключових шляхів, метрики помилок, логи, поведінку під навантаженням.
  6. Тестове перемикання та відкат. Робимо навчальне переведення трафіку та повернення на попередню версію, заміряючи час кожної операції. Якщо відкат довший за очікуваний — правимо схему.
  7. Передача регламенту. Віддаємо документацію: як випускати, як відкочувати, що дивитися в чергуванні, які сигнали вважати приводом для повернення версії. Далі команда замовника веде релізи сама.

Конфігурації, схеми стендів і регламент відкату

На виході замовник отримує не набір розрізнених файлів, а пов'язаний комплект: конфігурації, схеми, регламенти та інструкції, за якими чергова зміна діє без автора змін. Нижче — що саме входить у передачу і навіщо кожна частина потрібна в експлуатації.

  • Файли конфігурації розгортання: описи двох робочих середовищ, правила перемикання трафіку, ліміти ресурсів і проби готовності — у репозиторії з історією правок, а не на машині інженера.
  • Схема стендів: які середовища є, чим відрізняються за складом і даними, як проходить потік трафіку при перемиканні і де залишається точка входу для повернення.
  • Політики доступу: ролі на читання і на зміну, хто має право перемкнути трафік, хто тільки спостерігає, порядок ротації доступів і секретів.
  • Регламент відкату: умови спрацьовування, відповідальний за рішення, цільовий час повернення на попередню версію та поведінка активних з'єднань у момент перемикання.
  • Інструкція для чергового: сценарій на одну сторінку — від сигналу моніторингу до підтвердження результату, із зазначенням, де дивитися стан і куди писати при сумнівах.
  • Карта спостережуваності: набір метрик і порогів, за якими видно деградацію нової версії, і список адресатів повідомлень.
  • Порядок роботи зі схемою даних: правила сумісності змін, щоб повернення коду не ламало вже застосовані міграції.

Такий комплект знімає залежність від конкретного спеціаліста: перемикання та відкат відтворювані за документом, а не з пам'яті.

Розбір впровадження: як скоротили вікно недоступності

Що було до

Сервіс із десятка мікросервісів у Kubernetes випускався раз на два тижні, і тільки в нічне вікно.

Один реліз займав 3-4 години: третина часу йшла на ручне перемикання трафіку, прогрів контурів і перевірки, а при помилці в новій збірці сервіс ішов у відмову на 20-40 хвилин — поки черговий не відкотить образ і не підніме попередній контур. Таких епізодів набиралося до семи за квартал.

Що змінили і що стало

Підняли другий контур з ідентичною конфігурацією і винесли перемикання трафіку на рівень маршрутизації за схемою blue-green, а управління викатом віддали Argo Rollouts.

Нова версія спочатку приймала частку трафіку і тільки потім основний потік, критерії просування та відкату задали метриками: частка помилок, час відповіді, стан перевірок готовності.

Якщо показники виходили за поріг, викат зупинявся сам, а трафік повертався на попередній контур без участі чергового.

Час релізу скоротився з 3-4 годин до 20-25 хвилин, і нічне вікно перестало бути обов'язковим.

Кількість інцидентів на релізах упала з семи за квартал до одного, частка відкатів без простою дійшла до 100%: повернення на попередню версію займає менше хвилини і не розриває з'єднання користувачів. Звільнений час команда перенесла на перевірки в тестовому контурі.

Що робити, якщо релізний конвеєр уже розгорнуто?

Перебудовувати чинний конвеєр цілком не потрібно. Blue-green вбудовується як окремий етап релізу: збірка, тести й перевірки залишаються на своїх місцях, змінюється лише спосіб доставки версії в кластер. Попередній процес продовжує працювати, поки новий не пройде перевірку на одному сервісі.

Поетапний перехід починається з кластера і середовищ. Поруч із робочим контуром піднімається другий набір подів з ідентичною конфігурацією, що відрізняється тільки мітками; перемикання трафіку бере на себе Service, а зважений розподіл — Ingress або сервісна сітка.

Квоти й ліміти рахуються відразу на два контури, інакше зелене середовище витіснить синє під навантаженням.

Ключове обмеження — сумісність схем даних. Міграції готуємо за принципом розширення: спочатку додаємо поля й таблиці, код учимо читати обидва формати, і тільки наступним релізом прибираємо старе. Тоді обидві версії працюють з однією базою, і перемикання не потребує зупинки.

Перенесення релізу йде хвилями: спочатку сервіс без стану, потім черги й фонові задачі, в кінці — ядро. Відкат — повернення трафіку на попередній контур за секунди, без перезбирання образу та повторного прогону перевірок. Розробка не зупиняється: обидва контури живуть в одному кластері, а конвеєр збирає в ту саму гілку.

Перед першою хвилею перевіряємо проби готовності, поведінку довгих з'єднань і порядок застосування міграцій — інакше перемикання обірве відкриті сесії. Далі схема тиражується на решту сервісів без змін у звичних процесах команди.

Часті технічні питання перед стартом

Blue-green у Kubernetes виглядає просто: два середовища, перемикання трафіку на рівні сервісу, відкат поверненням покажчика.

На практиці рішення впирається в чотири питання — що саме дублювати, що робити зі спільною базою, як розвести секрети і чим довести, що зелена версія здорова до перемикання. Нижче — короткі відповіді на те, що спливає на старті найчастіше.

Чи потрібно дублювати всю інфраструктуру?

Ні — тільки шар застосунків: робоче навантаження, його налаштування та правила маршрутизації. База даних, черги, кеш і сховище залишаються спільними, друге середовище звертається до них через окремі облікові записи та префікси.

Що відбувається з базою даних при перемиканні?

Схема змінюється розширювальними міграціями, сумісними з обома версіями коду: нові поля додаємо заздалегідь, старі прибираємо тільки після виведення попередньої версії. Тоді відкат стосується застосунку і не вимагає відкочувати дані.

Як розводяться секрети та ключі?

У кожного середовища свій набір, підключений із зовнішнього сховища, а не вшитий у маніфести. Ротація йде незалежно, тому перемикання не тягне за собою перевипуск ключів і синхронні правки в обох середовищах.

Як переконатися, що зелена версія здорова, і чи не подвоїться навантаження?

До перемикання вона проходить перевірки готовності, синтетичні сценарії та тіньовий потік на частині трафіку; метрики й трасування порівнюються з поточними.

Ресурси на час перевірки виділяються понад звичайні — пік планується заздалегідь, зайві вузли знімаються відразу після перемикання.

Обговоримо задачу і повернемося з оцінкою

Щоб оцінка строків і план робіт спиралися на факти, а не на здогадки, нам потрібен короткий зріз по вашому контуру: як влаштований реліз, чим він обмежений і що критично не зламати при оновленні.

Обговорити задачу можна у вільній формі — деталі уточнимо на дзвінку з інженером, який далі веде проєкт, і повернемося з оцінкою та етапами.

Розмова йде швидше, коли вже зрозуміло:

  • як випускаються оновлення зараз: ручні кроки, хто підтверджує, що відбувається між збіркою і робочим середовищем;
  • що не можна втратити при перемиканні: активні сесії, фонові задачі, стан кешу та черг;
  • з чого складається середовище: кластери, реєстр образів, зовнішні залежності та доступи;
  • вимоги до відкату: за який час потрібно повернутися на попередню версію і хто дає команду;
  • що вже є з автоматизації: опис застосунку, маніфести, правила збірки та перевірок;
  • обмеження: вікна релізів, режим обслуговування, погодження з безпекою та суміжними командами.

Якщо йдеться про blue-green deployment, окремо проговоримо, як співіснують дві версії і за якою ознакою приймається рішення про перемикання та відкат.

За цими вступними ми збираємо склад робіт, оцінку строків і порядок етапів — і повертаємося з планом робіт, від якого можна починати, без недомовок на старті проєкту.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142