Безсерверні платформи стають дедалі популярнішими серед розробників протягом останніх років.
Водночас, контейнерні застосунки, а особливо Kubernetes, набули значної популярності серед різноманітних компаній.
Безперечно, Kubernetes є потужним інструментом з великим потенціалом. Його екосистема постійно розширюється завдяки інноваційним інструментам та технологіям, як-от Knative, яка здатна зробити Kubernetes ще більш ефективним.
Knative з’явився для вирішення проблем, що призводять до збоїв, та для створення єдиного стандарту для хмарних платформ та оркестрування в хмарі.
Іншими словами, безсерверна архітектура Knative може краще задовольнити потреби бізнесу, ніж інші хмарні рішення для безсерверних розгортань.
У цьому керівництві ми розглянемо Knative, її переваги, варіанти використання, процес встановлення, принципи роботи та інше.
Отже, почнемо!
Що таке Knative?
Knative — це безсерверний фреймворк, побудований на базі Kubernetes, розроблений спочатку компанією Google. Він завантажує та виконує безсерверні функції згідно з потребами компанії, мінімізуючи при цьому зайві витрати. Це проєкт з відкритим кодом, що додає необхідні компоненти для розгортання, запуску та керування безсерверними програмами в середовищі Kubernetes.
Головною метою безсерверної платформи Knative є управління стандартами для кросплатформної оркестрації. Це досягається шляхом інтеграції функцій створення контейнерів, автоматичного масштабування, обробки подій та управління навантаженням.
Раніше існували різні рішення з відкритим кодом, крім Knative. Кожне з них пропонувало свій спосіб розгортання, що могло призвести до фрагментації ринку через відсутність стандартизованих підходів. Це означало, що для певної функціональності системи потрібно було обирати конкретного постачальника.
Проте згодом почали виникати проблеми з міграцією. Для уникнення таких труднощів і був створений безсерверний фреймворк Knative. Тому, якщо у вас є складнощі з інтеграцією будь-яких задач, Knative може ефективно виконати їх у конвеєрі на базі Kubernetes.
Knative складається з трьох основних частин:
- Knative Build: створює образи контейнерів та забезпечує їхню доступність із вихідного коду.
- Knative Serving: використовує Istio та Kubernetes для підключення та розгортання цих образів контейнерів через визначені ресурси інфраструктури.
- Knative Eventing: дозволяє користувачам визначати тригери подій та пов’язувати їх із контейнерними функціями.
Коли Knative виявляє подію, він ідентифікує відповідний процес для запуску на вимогу. З Knative немає потреби виділяти контейнерні вузли, кластери та модулі для роботи, оскільки Knative резервує хостингові ресурси лише під час виконання конкретного процесу. Таким чином, Knative поєднує переваги безсерверних та контейнерних технологій.
Ключові концепції Knative
Розглянемо основні поняття безсерверного фреймворку Knative та їхнє відношення до базових елементів Knative.
Збірка (Build)
Knative-build дозволяє використовувати та розширювати існуючі елементи Kubernetes, надаючи можливість запускати збірки контейнерів з вихідного коду. Він дозволяє отримувати вихідний код із залежностями та репозиторію, створювати образи контейнерів і реєструвати їх.
Події (Events)
Події допомагають встановити кращий зв’язок між слабо пов’язаними споживачами подій та їхніми виробниками для створення архітектури, керованої подіями. Knative розміщує ці події в черзі, які повинні виконуватися автоматично, без втручання розробників.
Після цього ці події доставляються до контейнерів. Далі вони надсилають повідомлення виробникам подій для виконання необхідних задач. Це зменшує навантаження на розробників, яким не потрібно створювати код для встановлення з’єднань.
Функції (Functions)
Функція — це незалежна одиниця розгортання та сервіс Knative, аналогічний мікросервісу. Її код розроблено для виконання одного конкретного завдання, наприклад:
- Обробка файлів у базі даних.
- Збереження даних користувача в базі даних.
- Виконання запланованої роботи.
Безсерверна платформа Knative розроблена для забезпечення ефективної розробки, розгортання та керування функціями.
Плагіни (Plugins)
Функціональність безсерверного фреймворку Knative легко розширювати або змінювати за допомогою плагінів. Кожен файл `serverless.yml` містить властивість `plugin`, що перелічує різні плагіни.
Ресурси (Resources)
Ресурси – це компоненти безсерверної інфраструктури Knative, які використовуються вашою функцією, зокрема:
- Джерело подій AWS SQS.
- Заплановане завдання (виконувати кожні 5, 10 хвилин тощо).
- Джерело подій Kafka.
І багато іншого.
Сервіси (Services)
Сервіси можна порівняти з проєктами. Сервіс є організаційною одиницею безсерверної платформи Knative. Хоча ви можете мати багато сервісів для однієї програми, сервіс можна розглядати як файл проєкту.
Тут ви можете визначати функції, події та ресурси в одному файлі під назвою `serverless.yml`, `serverless.json` або `serverless.js`. Під час розгортання сервісів за допомогою безсерверного фреймворку, все, що є у файлі, розгортається одночасно.
Обслуговування (Serving)
Knative-serving вбудовано в Istio та Kubernetes, що підтримує розгортання застосунків. Це забезпечує швидку розробку безсерверних контейнерів, мережеве програмування та автоматичне масштабування компонентів Istio. Knative-serving розглядає контейнери як масштабовані сервіси, кількість яких може варіюватися від одного до багатьох екземплярів.
Особливості Knative
Розглянемо деякі з особливостей безсерверного фреймворку Knative:
- Knative — це безсерверний фреймворк на базі Kubernetes, що дозволяє розгортати сервіси в Kubernetes.
- Він забезпечує просту інтеграцію Knative із підтримуваним середовищем.
- Розробники можуть безпосередньо використовувати Kubernetes API за допомогою Knative для розгортання безсерверних сервісів.
- Він дозволяє користувачам запускати безсерверні сервіси за допомогою системи подій Knative.
Як працює Knative?
Безсерверний фреймворк Knative діє як елемент управління подіями та взаємодіє з Istio та Kubernetes. Kubernetes працює як координатор мікросервісів і контейнерів. Зі свого боку, Istio — це мережева технологія з відкритим кодом, що об’єднує різні компоненти для взаємодії з користувачем та між собою.
Knative надає користувачам набір компонентів, призначених для виконання рутинних задач. Ці компоненти багаторазово використовуються в різних сферах застосування. Розробник може використовувати будь-яку мову програмування. Вам не потрібні спеціальні знання мов, оскільки Knative розпізнає лише образи контейнерів.
Існує три компоненти безсерверного фреймворку Knative, які є ключовими для його функціонування:
Створення нових контейнерів
Компонент build відповідає за створення нових контейнерів. Він може конвертувати вихідний код у контейнер. Knative можна налаштувати відповідно до потреб бізнесу.
Спочатку Knative отримує вихідний код з репозиторію, наприклад, Github. Потім додаються необхідні залежності для ефективної роботи коду. Образи контейнерів створюються і розміщуються у файлах, доступних для платформи Kubernetes.
Контейнер стає доступним для розробників, які використовують Kubernetes та Knative. Таким чином, контейнери створюються до тих пір, поки відомо походження коду.
Обслуговування або керування платформою
Обслуговуючий компонент відповідає за роботу платформи. Він включає:
- Конфігурацію: Конфігурація забезпечує керування кількома версіями сервісу. Щоразу, коли відбувається розгортання нової функції контейнера, Knative зберігає існуючу версію і створює нову з останніми змінами та функціями. Крім того, Knative визначає стан сервісу.
- Автоматичне масштабування: для покращення роботи безсерверних контейнерів має бути можливість автоматичного масштабування контейнерів вгору чи вниз. Knative здатний автоматично масштабувати сервіси у відповідь на потреби.
- Інтелектуальна маршрутизація сервісів: Це важлива частина робочого процесу Knative. Вона дозволяє розробникам спрямовувати потік трафіку на різні версії мікросервісів. Інтелектуальна маршрутизація сервісів може застосовуватися при впровадженні нових функцій та синьо-зелених стратегій розгортання.
Це дозволяє залучити частину користувачів до тестування останньої версії та поступово перенаправити весь трафік до нової версії.
Події для визначення функцій
Компонент подій Knative відповідає за опис функцій Knative. Він дозволяє визначати роботу контейнерів на основі подій. Різні події запускають певні функції контейнерів.
Розробники можуть визначати тригери подій і відповідні контейнери, щоб Knative виконував свою роботу. Knative обробляє список подій та доставку подій.
Переваги Knative
Knative надає такі послуги, як управління маршрутами, поетапний випуск і підключення до сервісу. Він може похвалитися великою спільнотою. Розглянемо, як Knative впливає на компанії, які приймають цю технологію.
- На відміну від інших рішень, Knative використовує стандартні події та сумісний із рішеннями FaaS. Він пропонує стандартизовану структуру CloudEvent, яка допомагає розробляти безсерверну архітектуру.
- Хоча Knative не є PaaS, він дозволяє створювати безсерверний PaaS за допомогою платформи безсерверного оркестрування.
- Knative має повноцінний та зрілий безсерверний дизайн.
- Він підтримує кросплатформність і надає універсальний стандарт серед хмарних провайдерів, що виключає прив’язку до певного постачальника.
- Knative забезпечує гнучку структуру.
- Він підтримує пропорційні поетапні випуски.
- Ви можете використовувати безсерверну екосистему в контейнерному середовищі.
- Knative спрощує керування інфраструктурою та інструментами.
- Ви можете швидко переходити до інших хмарних постачальників, які інтегровані з Knative, якщо у вас вже впроваджено Kubernetes.
- Він пропонує обчислювальну модель, що базується на запитах.
- Дозволяє керувати робочими процесами як сервісом.
- За допомогою Knative ви можете обробляти дані IoT, запускати перевірки доступності та перевіряти конфігурації ваших груп безпеки.
- Дозволяє розробникам зосередитися на коді та швидко створювати ітеративний код.
- Гарантує впровадження нових версій розробниками.
- Модель подій Knative допомагає реалізовувати проєкти, включаючи підписку, підключення до зовнішньої системи та реєстрацію.
Проблеми Knative (та деякі рішення)
Проблеми з продуктивністю
Knative Framework забезпечує високу продуктивність за мінімальних витрат. Однак, неправильне поєднання застосунків може призвести до вищих витрат та недостатнього використання ресурсів контейнера. Це може призвести до зниження продуктивності застосунку, що є однією з найбільших проблем безсерверного розгортання Knative.
Таким чином, неправильний розмір пулу ресурсів або невідповідні застосунки можуть нівелювати багато переваг Knative.
Ви можете подолати цю проблему, виконавши тести для перевірки кількості ресурсів та комбінації застосунків на Knative. Виміряйте навантаження подій, визначивши середнє та максимальне навантаження для кожного, та оцініть загальне споживання ресурсів. Повторіть це для кількох застосунків, щоб створити тестову конфігурацію для перевірки оцінок.
Функціональні проблеми
Функціональні проблеми Knative можуть полягати у наступному:
- Knative залежить від функцій, які відповідають моделі без стану. Це означає, що в самому компоненті не зберігаються дані. Розробка функцій не є складним завданням, але вимагає невеликої зміни підходу, а це означає, що одна помилка може негативно вплинути на продуктивність програмного забезпечення.
- Бізнес-дані складаються з декількох етапів транзакцій, а функції без збереження стану повинні підтримувати контекст на всіх етапах. Knative не має такої можливості, як загальнодоступні хмарні безсерверні інструменти.
Регулярний моніторинг та виправлення проблем допоможуть вам підтримувати належну продуктивність.
Операційні виклики
У порівнянні з безсерверними пропозиціями в загальнодоступній хмарі, у Knative є більш складна операційна діяльність. Адміністратори не контролюють базові сервери в публічній хмарі. Але їм потрібно буде керувати серверами, Kubernetes, контейнерами, Knative та Istio.
Knative мінімально розширює операційні завдання та складність розробки для компаній, які вже вирішили використовувати Kubernetes та контейнери. Ті, хто використовує mesh та мікросервіси, знайдуть Knative природним розширенням.
Випадки використання Knative
Knative найкраще підходить для програм, які викликають різну кількість подій, що відбуваються в межах або поза межами часу. Конкретні випадки використання безсерверного фреймворку Knative включають:
Важлива орієнтація на події. Якщо ІТ-команди не можуть представити програму як серію подій замість транзакцій, Knative може бути невдалим вибором з міркувань функціональності та ефективності.
Передумови та встановлення Knative
Як ми бачимо з попередніх розділів, Knative — це набір компонентів, таких як обробка подій та обслуговування, які працюють в мережі сервісів та кластері оркестрування робочих навантажень. Існують утиліти командного рядка, необхідні для простої роботи. Тому для подальшої інсталяції нам потрібно кілька залежностей.
Передумови
Існує кілька варіантів встановлення Kubernetes. Docker Desktop пропонує простий кластер Kubernetes, що підходить для різних цілей. Простий підхід полягає у використанні Kubernetes у Docker для запуску кластера Kubernetes разом з вузлами контейнера Docker. Зручним способом роботи з кластером є використання інструменту командного рядка Knative.
Knative CLI пропонує простий та швидкий інтерфейс для створення ресурсів. Він допомагає у складних задачах, таких як розподіл трафіку та автоматичне масштабування. Зручним способом є завантажити сумісний двійковий файл зі сторінки GitHub.
Встановлення
Маючи всі необхідні передумови, ми можемо перейти до встановлення компонентів. Для середовища розробки існує плагін швидкого запуску. Плагін допомагає встановити локальний кластер Knative за допомогою клієнта Knative. Ви можете завантажити плагін швидкого запуску з офіційної сторінки випуску.
Висновок: Майбутнє Knative
Knative змінив підхід до безсерверних обчислень, забезпечуючи автоматичне масштабування застосунків. Це суттєво впливає на сумісність та модульність системи.
Очікується, що в майбутньому Knative усуне існуючі недоліки і стане однією з найефективніших технологій для запуску безсерверних архітектур.
Технологія Knative має значний вплив на розробників, оскільки вони оцінюють її переваги перед безсерверними альтернативами. Knative допомагає заощадити час, замінюючи необхідність створювати та підтримувати розширення Kubernetes. Розробники задоволені технологією Knative, оскільки вона проста у використанні та є чудовою альтернативою безсерверним рішенням.
Тому, якщо ви хочете максимально використати потужність середовища Kubernetes у своїх хмарних процесах, почніть використовувати Knative та переконайтеся в його перевагах самі.