Skip to content

Тут ми розглянемо:

✔️ історію виникнення Kubernetes, його архітектуру та компоненти; ✔️ сервіси та поди; ✔️ задачі (Jobs) та як їх запускати; ✔️ способи управління конфігураціями (ConfigMap та Secrets); ✔️ нетворкінг, що таке Ingress та як його налаштовувати; ✔️ управління системами зберігання; ✔️ концепцію операторів та розширення можливостей Kubernetes; ✔️ інструмент Helm, який дозволяє більш ефективно створювати маніфести та групувати їх у так звані Helm Charts; ✔️ систему доступів та ролей — RBAC.

Знайомство з Kubernetes

Вітаємо тебе з першим кроком на шляху вивчення Kubernetes — ключової технології у світі хмарних обчислень та мікросервісів. Цей урок присвячений основам та історії виникнення Kubernetes. Гайда розбиратися!

Що таке Kubernetes?

Kubernetes — це система автоматичного розгортання, масштабування та управління застосунками у контейнерах. У слові Kubernetes між «к» та «с» 8 символів, тому Kubernetes також називають k8s(кейтс).

У перекладі з грецької «Kubernetes» означає «керівник» або ж «капітан». Його логотип нагадує штурвал корабля, а екосистема містить багато назв, пов'язаних з океаном.

Kubernetes розроблений інженерами компанії Google, яка активно розбудовує власну інфраструктуру на контейнерах. Наприклад, для обслуговування сервісів Gmail, Drive, Maps, Docs та інших Google використовує Borg (Cluster Management). Контейнерів для цих сервісів тисячі. Уяви, наскільки захопливо керувати тисячами контейнерів!

Kubernetes, випущений у 2014 році, є результатом розвитку Borg та Omega. У 2015-му компанія Google передала Kubernetes у власність Cloud Native Computing Foundation, одного з найбільших підфондів The Linux Foundation.

Оновлення Kubernetes

Як і багато інших інфраструктурних проєктів, Kubernetes написаний на мові Go та знаходиться на GitHub за адресою kubernetes/kubernetes. Нові версії виходять раз на 4 місяці. Це означає, що оновлювати кластери доводиться доволі часто, бо підтримка старих версій може призупинятись. У середньому стару версію підтримують близько року.

Функції Kubernetes

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

  • керувати контейнерами на різних серверах;
  • оптимізувати використання ресурсів;
  • забезпечувати стабільність роботи та масштабованість застосунків.

💡 Kubernetes можна порівняти з диригентом оркестру, який точно знає, коли та як кожному музиканту грати, щоб забезпечити гармонію у виконанні симфонії.

З технічної точки зору, Kubernetes — це набір серверів, на які встановлено спеціальний софт (програмне забезпечення). Цей софт і є Kubernetes, який вміє керувати серверами, на які він встановлений. Також Kubernetes вміє:

  • запускати контейнери;
  • виділяти контейнерам потрібні ресурси;
  • ізолювати контейнери між собою;
  • масштабувати контейнери через створення додаткових контейнерів;
  • налаштовувати балансування навантаження на ці контейнери.

💡 Kubernetes також можна порівняти з кур'єрською службою. Ми пакуємо всі посилки, які відправляємо, відповідно до певних інструкцій з пакування. У нашому випадку пакуванням є спеціальні файли-маніфести та імеджі контейнерів. Після пакування ми віддаємо посилки кур'єру — Kubernetes. Далі кур’єр самостійно організовує процес відправки та доставки, приймає рішення щодо маршрутів, транспорту тощо.

У випадку з Kubernetes ми пакуємо додатки як контейнери, описуємо їх у декларативному файлі маніфесту. Всю іншу роботу бере на себе Kubernetes, а саме:

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

Переваги Kubernetes

Ефективність управління

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

Гнучкість та масштабованість

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

Активна спільнота

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

Порівняння монолітної та мікросервісної архітектури

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

Моноліт (Monolith)

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

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

Мікросервіси (Microservices)

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

Ти можеш розвивати, масштабувати та оновлювати ці сервіси незалежно один від одного. Це забезпечує кращу гнучкість і швидкість розробки. Kubernetes тут відіграє ключову роль і використовується для управління мікросервісами та для оркестрації (автоматичного керування контейнерами).

Приклад переходу з моноліту на мікросервіси

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

Масштабування мікросервісів (scaling microservices)

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

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