Як застосовувати GitOps у Kubernetes: переваги та принципи
За останні кілька років зросла кількість інструментів і систем, необхідних для керування версіями, конфігураціями, IaC, CI/CD тощо. Така тенденція створила додаткове навантаження на розробників, оскільки вони тепер повинні контролювати все більше компонентів програм.
В ідеалі розробник зосереджується головним чином на забезпеченні бізнес-цінності продукту через код. Щоб покращити досвід розробників, з’явився GitOps, де зміни конфігурації інфраструктури та додатків обертаються навколо екосистеми контролю версій Git.
Основна увага приділяється тому, щоб Git залишався єдиним джерелом правдивої інформації про зміни інфраструктури та конфігурацію додатків. В ідеальному світі такий підхід дозволяє розробнику зосередитися на роботі та надсиланні коду в Git, а подальше розгортання та налаштування будуть виконуватися автоматично.
Оскільки Kubernetes та багато інших хмарних технологій майже повністю декларативні, визначення інфраструктури можна зберігати разом із кодом програми в Git. Зберігання всієї вашої системи в Git означає, що ваша команда розробників використовує:
- знайомі робочі процеси на основі Git,
- запити на витягування для розгортання програм і змін інфраструктури в Kubernetes.
5 головних принципів GitOps
- Декларативний опис
Завдяки IaC та інструментам керування конфігураціями, таким як Terraform, ви можете визначати, налаштовувати та розвивати всю свою програму декларативно за допомогою коду. Ці конфігурації ідеально зберігатимуться у ваших системах контролю версій (VCS), таких як Git, GitLab або GitHub. - Єдине джерело правди
У світі GitOps системи контролю версій (VCS), такі як Git, мають бути єдиним джерелом правди. Будь-які зміни, які ви бажаєте виконати в системі, слід оголошувати та завжди фіксувати спочатку в Git або сховищі GitLab. Це допомагає виявити дрейф конфігурації, а також запровадити аудит для визначення будь-яких можливих змін, внесених поза межами VCS (тобто Git). - Бажаний стан системи
Тепер, маючи можливість декларативно зберігати потрібний стан системи в Git, ви можете легко застосувати керування версіями до коду, наявного в Git. Це спрощує відкат, якщо бажаний стан Git призводить до нестабільності системи для вашого фактичного стану в кластері.
Наприклад, ви зберегли поточний стан системи з номером версії 1.0.0 (семантичне керування версіями) у Git. Тепер ви хочете застосувати незначний патч до конфігурації програми. Тож ви можете зафіксувати цю зміну в Git з номером версії 1.0.1 і надіслати ці зміни. Якщо 1.0.1 не принесе очікуваних результатів, ви можете просто використати «Git revert», щоб відкотити ці зміни з Git. - Автоматично затверджені зміни
Після того, як ви зберегли оголошений стан у Git, наступним кроком буде можливість автоматично застосовувати будь-які зміни стану у вашій системі. Важливим у цьому є те, що вам не потрібні певні облікові дані кластера, щоб внести зміни у вашу систему.
В GitOps існує відокремлене середовище, а визначення стану живе поза ним. Це дозволяє вашій команді відокремити те, що вони насправді роблять від того, як вони збираються це робити. - Виявлення дрейфу конфігурації
Підхід GitOps передбачає, що ваші декларативні файли конфігурації та код програми повинні зберігатися разом у репозиторії Git. Це те, що ми називаємо «бажаним станом системи». Коли ви розгортаєте все це в кластері та налаштовуєте свою екосистему додатків, ми називаємо це «фактичним станом системи».
Дрейф конфігурації — це термін, що описує поступові зміни, які ми несвідомо й непомітно вносимо у фактичний стан системи. Такі дії призводять до неузгодженості між фактичним і бажаним станом. В ідеалі обрана система GitOps повинна мати можливість виявляти, сповіщати та автоматично виправляти фактичний стан.
Переваги GitOps для Kubernetes
Kubernetes (K8s) — це опенсорсна система для автоматизації розгортання, масштабування та керування контейнерними програмами. З 2013 по 2014 рік сталася революція в інфраструктурі ПЗ, завдяки таким інструментам як Docker. Вони продемонстрували можливості контейнерів та відкрили новий спосіб упаковування та ізоляції сервісів програм.
Це призвело до народження проєктування розподілених систем. Контейнери підкорили світ і представили нові способи оркестрування програм. Коли Google відкрив вихідний код Kubernetes у 2014 році, він привернув увагу розробників. Вже у 2016 році ця система стала стандартом. Звісно, не без допомоги опенсорсних спільнот, які зробили його таким, яким він є сьогодні.
Kubernetes пропонує необхідні спеціалістам можливості оркестровки контейнерів. Серед них:
- автоматичне розгортання та відкат,
- виявлення сервісів і балансування навантаження,
- оркестровка системи зберігання,
- управління конфігураціями,
- здатність до самовідновлення,
- горизонтальне масштабування для збільшення та зменшення залежно від навантаження на ЦП.
Цей список продовжує розширюватися з кожним випуском. Які ж переваги пропонує GitOps для K8s?
Ключові переваги GitOps для Kubernetes
- Швидкість
Безперервна автоматизація розгортання з інтегрованим зворотним зв’язком збільшує частоту розгортання. Декларативні визначення, які зберігаються в Git, дозволяють розробникам використовувати звичні робочі процеси.
Тим самим, це скорочує час, необхідний для запуску нових розробок, тестових середовищ або розгортання нових функцій у кластері. Команди можуть надсилати більше змін на день, і це означає швидшу реалізацію нових функцій.
- Продуктивність
Завдяки CI/CD, розробники залишаються залежними від команди операцій при розгортанні нових змін у робочому середовищі. GitOps дозволяє командам розробників бути більш самостійними.
Вони будуть менше залежати від операційних команд як при розгортанні та обробці коду, так і при внесенні змін в конфігурацію робочого середовища. Все, що їм потрібно зробити — внести свої зміни в репозиторій Git і об’єднати PR — про решту подбають інструменти GitOps.
- Моніторинг
GitOps не тільки надає постійний доступ до моніторингу фактичного стану, наявного в кластері, а й дає можливість порівнювати його з бажаним. GitOps допомагає вимірювати, контролювати та повідомляти командам про те, що виконується в кластері.
- Комплаєнс і аудит
GitOps допомагає стежити за комплаєнсом. Все, що зберігається в Git є єдиним джерелом правди, а отже, процес аудиту стає простішим. Аудитор може проаналізувати бажаний стан, спостерігаючи та зосереджуючись на репозиторії вихідного коду. Він також може визначити поточний стан системи, переглянувши постачальника інфраструктури, а також стан кластера Kubernetes.
- Керування багатокластерною конфігурацією
Kubernetes допомагає більшості великих і корпоративних організацій використовувати кілька кластерів для різних потреб бізнесу та команд. Управління цими кластерами та підтримання узгодженості конфігурації, організаційної безпеки та інших політик у цих кластерах є складним завданням для операційних команд.
GitOps дозволяє агенту, який працює в цих кластерах, обробляти все від вашого імені, і тому він чудово підходить для керування багатокластерною конфігурацією.
- Інфраструктура як код
В Kubernetes GitOps використовується для загальної автоматизації процесу надання інфраструктури, як-от створення розгортань, сервісів і всіх можливих об’єктів Kubernetes. Команди DevOps і SRE використовують GitOps, щоб ви могли зберігати усі файли конфігурації вашої інфраструктури як код. За дефолтом, однією з характеристик GitOps є саме IaC.
- Безпека
Надійність і гарантія безпеки Git — підкріплені надійною криптографією, яка використовується для відстеження та керування змінами. Можливість підписувати зміни, щоб підтвердити авторство та походження — ключ для правильного та безпечного визначення бажаного стану кластера.
Якщо порушення безпеки все ж станеться, незмінне джерело істини Git можна використати для відтворення нової системи, незалежної від скомпрометованої. Це скоротить час простою та забезпечить кращу реакцію на подібні інциденти в майбутньому
- Аварійне відновлення
Аварійне відновлення — це практика, яку має мати кожна організація для відновлення після події, яка негативно впливає на бізнес-операції. Мета таких методів — надати організації можливість якомога швидше відновити роботу критично важливих систем та ІТ-інфраструктури.
Як GitOps допомагає досягти цього? Все середовище та компоненти декларативно визначені в сховищі Git. Відповідно, аварійне відновлення у разі таких подій стає не складнішим від повторного застосування поля конфігурації для швидкого відновлення екосистеми.
Висновок
GitOps сприяє безперервному доставлянню та реалізує Git як єдине джерело правди для декларативної інфраструктури та програм. Як операційна модель для Kubernetes та інших хмарних технологій, GitOps надає набір передових практик, які уніфікують розгортання, керування та моніторинг для контейнерних кластерів і програм.
Хочете поглибити свої знання та дізнатися усі тонкощі адміністрування Kubernetes? Записуйтесь на відповідний курс від IT Education Center. Щоб переглянути повний список технологій та