Налаштування ArgoCD і GitOps у Kubernetes: практичний посібник

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

ArgoCD без GitOps: чому стан кластера розходиться з репозиторієм

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

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

Але варто увімкнути автосинхронізацію, як кластер повернеться до версії з репозиторію і разом із нею втратиться обхідна зміна, на якій тримається робота сервісу.

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

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

Ціна — незапланований простій у найневдаліший момент: під час викатки, відкату або нічного перезапуску вузла. ArgoCD без замкненого циклу GitOps залишається дзеркалом, а не механізмом управління. Розбираємо, як це закривається.

Що дає керована доставка: швидкість, відкат і передбачуваність

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

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

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

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

Історія змін перестає бути усною. У кожної правки є автор, причина та зв'язок із задачею, а відкат залишає такий самий явний слід.

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

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

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

Режими доставки змін: синхронізація з репозиторію та альтернативи

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

У ArgoCD це дві незалежні налаштування — автосинхронізація та самовідновлення, і їхні комбінації дають різні моделі доставки.

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

Режим доставки Коли підходить Обмеження
Автоматична викатка із самовідновленням тестовий контур, часті дрібні зміни, готовність швидко виправляти ручні правки в кластері не живуть — контролер їх стирає; помилковий маніфест розгортається без паузи
Викатка за готовністю образу (конвеєр оновлює тег у репозиторії) реліз має йти одразу після збірки та перевірок залежить від доступності реєстру образів; розходження тегу й маніфесту виявляється не одразу
Ручне підтвердження релізу (автосинхронізація вимкнена) робочий контур із вікнами на зміни розходження накопичується, потрібен черговий; відхилення помічають пізніше
Один шаблон на кілька кластерів тестовий і робочий контур з однаковими маніфестами помилка в шаблоні розходиться по всіх кластерах одночасно

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

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

Як відбувається впровадження: від розбору кластера до передачі регламентів

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

  1. Інвентаризація кластера. Збираємо робочі навантаження, простори імен, прив'язки ролей і ручні правки через kubectl. Фіксуємо розходження між маніфестами та живим станом — це і є реальний обсяг робіт.
  2. Схема репозиторіїв. Розділяємо конфігурацію застосунків і середовищ, задаємо структуру каталогів і межі відповідальності команд. Від неї залежить, скільки ручних погоджень залишиться під час кожної викатки.
  3. Налаштування синхронізації. Підключаємо ArgoCD, описуємо Application і AppProject, вмикаємо автосинхронізацію та відновлення стану після ручних правок. Секрети йдуть у Git лише в зашифрованому вигляді.
  4. Перевірка політик. Обмежуємо проєктами доступні простори імен і типи ресурсів, вмикаємо валідацію маніфестів на рев'ю. Помилка конфігурації виявляється до потрапляння в кластер.
  5. Тестова викатка. Проганяємо реліз на стенді, потім на некритичному сервісі в проді: дивимося час синхронізації та поведінку під час відкату. Відкат перевіряємо поверненням коміту, а не ручними командами.
  6. Передача в супровід. Віддаємо регламенти, описуємо ролі та доступи, показуємо черговому, як читати статус синхронізації та що робити при завислому релізі.

Після приймання команда випускає зміни комітом, а ми залишаємося на підтримці перших релізів.

Що передаємо на руки: маніфести, ролі, регламенти та схеми

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

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

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

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

Кейс: ArgoCD зняв ручні деплої в кластері з 40 сервісів

До впровадження GitOps кластер на 40 сервісів жив на ручних викатках: інженер збирав образ, правил маніфести прямо в кластері та застосовував їх через командний рядок.

Стан середовища ніхто не міг відтворити — описи розходилися з тим, що реально працювало, а правки «на хвилину» осідали в кластері назавжди.

Перенесли всі описи в Git і віддали синхронізацію Argo CD: репозиторій став єдиним джерелом правди, а розходження між ним і кластером — видимим і усувним.

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

Метрики до та після

Показник До Після
Час викатки релізу 40–60 хвилин на сервіс 4–7 хвилин, без ручних кроків
Розсинхрони конфігурації 10–15 на місяць, знаходили за збоями поодинокі, видно в панелі одразу
Частка відкатів кожна четверта викатка близько 6%
Відновлення після збою 2–3 години на розбір і ручний відкат 10–15 хвилин поверненням версії в Git

Відкат тепер — не окрема операція під тиском, а повернення попереднього коміту: контролер сам приводить кластер до потрібного стану.

Розбір інциденту змістився з питання «що там накрутили руками» на роботу зі зрозумілою різницею версій, а історія змін по кожному сервісу залишилася в репозиторії.

Чим відрізняється ArgoCD від самописного конвеєра доставки?

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

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

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

Супровід конвеєра при цьому зміщується з коду в правила, ролі та історію змін репозиторію. Далі показуємо, як це виглядає в роботі.

Питання щодо доступів, середовищ і вже працюючих кластерів

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

Які мінімальні права потрібні Argo CD у кластері?

Окремий службовий обліковий запис, а не адміністраторський. Йому достатньо читання описів об'єктів і запису в цільові простори імен; доступ до репозиторіїв — за токеном лише на читання.

Кластерні ролі адміністратора не видаються: у разі компрометації контролера збитки обмежені одним контуром.

Як ізолювати контури розробки, тестування та продуктивний?

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

Чи підключиться вже працюючий кластер?

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

Що з планом відкату?

Відкат — повернення на попередню ревізію маніфестів у Git: стан кластера приводиться до неї за хвилини. Другий перемикач — вимкнення автозастосування, після чого зміни проходять лише за явною командою інженера.

Що входить у супровід після впровадження?

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

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

Обговоримо задачу: розберемо ваш кластер і повернемося з планом

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

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

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

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

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

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

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

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