Krótki przewodnik po Knative Serverless Framework dla początkujących

Photo of author

By maciekx

Technologie bezserwerowe zyskują na znaczeniu i coraz więcej programistów decyduje się na ich wykorzystanie.

Jednakże, aplikacje oparte na kontenerach cieszą się już dużą popularnością, podobnie jak Kubernetes w środowiskach korporacyjnych.

Kubernetes to z pewnością potężne narzędzie z dużym potencjałem. Jego ekosystem dynamicznie się rozwija, wzbogacany o nowe narzędzia i innowacyjne technologie, takie jak Knative, które mogą jeszcze bardziej usprawnić jego działanie.

Knative powstał, aby eliminować sytuacje prowadzące do awarii i ustanowić wspólny standard dla platform chmurowych i orkiestracji natywnej dla chmury.

Innymi słowy, bezserwerowa platforma Knative może lepiej odpowiadać na potrzeby biznesowe niż inne rozwiązania bezserwerowe działające w chmurze.

W niniejszym opracowaniu omówię platformę Knative, jej zalety, zastosowania, proces instalacji, mechanizm działania i inne istotne aspekty.

Zacznijmy!

Czym jest Knative?

Knative to platforma bezserwerowa, zbudowana na fundamencie Kubernetes, która została pierwotnie opracowana przez Google. Uruchamia i zarządza funkcjami bezserwerowymi w odpowiedzi na potrzeby biznesowe, redukując straty. Jest to projekt open-source, który dodaje komponenty do wdrażania, uruchamiania i zarządzania aplikacjami bezserwerowymi na Kubernetes.

Głównym celem platformy Knative jest regulowanie standardów orkiestracji międzyplatformowej. Odbywa się to poprzez integrację mechanizmów budowania kontenerów, automatycznego skalowania, obsługi zdarzeń i zarządzania obciążeniem.

Wcześniej istniało szereg innych rozwiązań open-source, alternatywnych do Knative. Każde z nich charakteryzowało się odmiennym sposobem implementacji, co prowadziło do fragmentacji rynku z powodu braku spójnych standardów. Oznaczało to konieczność wyboru konkretnego dostawcy, jeśli chciało się korzystać z określonej funkcjonalności.

W rezultacie, problematyczne stały się kwestie migracyjne. Aby uniknąć tych trudności, wprowadzono framework bezserwerowy Knative. Dzięki temu, jeśli zmagasz się z wdrożeniem zadań, Knative może skutecznie przeprowadzić je w ramach potoku opartego na Kubernetes.

Knative składa się z trzech kluczowych elementów:

  • Knative Build: Odpowiada za tworzenie obrazów kontenerów i udostępnianie ich na podstawie kodu źródłowego.
  • Knative Serving: Wykorzystuje Istio i Kubernetes do łączenia i wdrażania obrazów kontenerów poprzez przydzielone zasoby infrastruktury.
  • Knative Eventing: Umożliwia użytkownikom definiowanie wyzwalaczy zdarzeń i łączenie ich z funkcjami kontenerowymi.

Gdy tylko Knative rozpozna zdarzenie, inicjuje proces, który uruchamia je na żądanie. Dzięki Knative nie ma konieczności przydzielania węzłów kontenerów, klastrów czy podów, ponieważ zasoby hostingowe są aktywowane tylko wtedy, gdy dany proces jest uruchomiony. W ten sposób Knative łączy w sobie korzyści podejścia bezserwerowego i kontenerowego.

Podstawowe koncepcje Knative

Przeanalizujmy kluczowe koncepcje frameworka bezserwerowego Knative oraz ich relacje z podstawowymi komponentami Knative.

Budowanie

Mechanizm budowania w Knative ułatwia wykorzystanie i rozszerzenie istniejących funkcjonalności Kubernetes, umożliwiając uruchamianie kompilacji kontenerów bezpośrednio ze źródła. Obsługuje pobieranie kodu źródłowego wraz z zależnościami z repozytorium, budowanie obrazów kontenerów i ich rejestrację.

Zdarzenia

Mechanizm zdarzeń umożliwia lepszą komunikację między luźno powiązanymi producentami i konsumentami zdarzeń, co pozwala na tworzenie architektury sterowanej zdarzeniami. Knative umieszcza te zdarzenia w kolejce, która jest obsługiwana automatycznie, bez konieczności pisania skryptów przez programistów.

Następnie te zdarzenia są przekazywane do kontenerów. Później są one wysyłane do producentów zdarzeń w celu wykonania określonych zadań. Dzięki temu programiści nie muszą zajmować się kodem odpowiedzialnym za łączenie poszczególnych elementów.

Funkcje

Funkcja jest niezależną jednostką wdrożeniową i usługą Knative, działającą podobnie jak mikrousługa. Jej kod jest zaprojektowany do realizacji pojedynczego zadania, takiego jak:

  • Przetwarzanie pliku w bazie danych
  • Zapisywanie użytkownika w bazie danych
  • Wykonywanie zaplanowanych zadań

Platforma bezserwerowa Knative jest zoptymalizowana do efektywnego tworzenia, wdrażania i zarządzania funkcjami.

Wtyczki

Funkcjonalność frameworka bezserwerowego Knative można łatwo rozszerzać lub modyfikować za pomocą wtyczek. Każdy plik serverless.yml zawiera właściwość wtyczek, która zawiera listę używanych wtyczek.

Zasoby

Zasoby to bezserwerowe komponenty infrastruktury Knative, które są wykorzystywane przez Twoją funkcję, a w ich skład wchodzą:

  • Źródło zdarzeń AWS SQS
  • Zaplanowane zadania (uruchamiane co 5, 10 minut itp.)
  • Źródło zdarzeń Kafka

Oraz wiele innych.

Usługi

Usługi działają jak projekty. Usługa jest jednostką organizacyjną w ramach platformy bezserwerowej Knative. Chociaż w jednej aplikacji można mieć wiele usług, można postrzegać usługę jako pojedynczy plik projektu.

W tym miejscu definiuje się funkcje, zdarzenia i zasoby w jednym pliku o nazwie serverless.yml, serverless.json lub serverless.js. Po wdrożeniu usług za pomocą platformy bezserwerowej, wszystko co znajduje się w pliku jest wdrażane jednocześnie.

Obsługa

Mechanizm obsługi w Knative, oparty na Istio i Kubernetes, odpowiada za wdrażanie aplikacji. Umożliwia on szybkie tworzenie kontenerów bezserwerowych, konfigurację sieciową i automatyczne skalowanie komponentów Istio. Mechanizm obsługi traktuje kontenery jako skalowalne usługi, które mogą składać się z jednej lub wielu instancji kontenerów.

Charakterystyka Knative

Przyjrzyjmy się niektórym cechom frameworka bezserwerowego Knative:

  • Knative to platforma bezserwerowa działająca na Kubernetes, która pozwala na wdrażanie usług.
  • Knative można łatwo zintegrować z istniejącym środowiskiem.
  • Programiści mogą bezpośrednio korzystać z API Kubernetes za pośrednictwem Knative w celu wdrażania usług bezserwerowych.
  • Użytkownicy mogą uruchamiać usługi bezserwerowe za pomocą systemu zdarzeń Knative.

Jak działa Knative?

Platforma bezserwerowa Knative działa jako segment sterowania zdarzeniami, integrując Istio i Kubernetes. Kubernetes pełni rolę koordynatora dla mikrousług i kontenerów. Istio natomiast jest technologią sieciową open-source, która łączy różne komponenty w celu interakcji z użytkownikiem i między sobą.

Knative oferuje użytkownikom szereg komponentów przeznaczonych do wykonywania rutynowych zadań. Te komponenty są wielokrotnie wykorzystywane w różnych zastosowaniach. Deweloper może korzystać z dowolnego języka programowania, ponieważ Knative rozpoznaje tylko obrazy kontenerów. Dlatego nie jest wymagana szczególna znajomość konkretnych języków.

Istnieją trzy główne komponenty, które są kluczowe dla funkcjonowania frameworka bezserwerowego Knative.

Budowanie nowych kontenerów

Komponent budowania odpowiada za tworzenie nowych kontenerów. Ma możliwość konwersji kodów źródłowych do formatu kontenera. Knative można skonfigurować tak, aby spełniał specyficzne potrzeby biznesowe.

Najpierw Knative pobiera kod źródłowy z repozytorium, takiego jak Github. Następnie dodawane są niezbędne zależności, aby zapewnić efektywne działanie kodu. Obrazy kontenerów są następnie tworzone i umieszczane w plikach, do których platforma Kubernetes ma dostęp.

Kontener jest udostępniany programistom korzystającym z Kubernetes i Knative. W ten sposób kontenery są tworzone, o ile znane jest źródło kodu.

Obsługa platformy

Komponent obsługi odpowiada za działanie platformy. Obejmuje on:

  • Konfigurację: Konfiguracja odgrywa ważną rolę w zarządzaniu różnymi wersjami usługi. Za każdym razem, gdy wdrażana jest nowa funkcja kontenera, Knative zapisuje aktualną wersję i tworzy nową z najnowszymi zmianami i funkcjami. Ponadto, Knative definiuje stan usługi.
  • Automatyczne skalowanie: Aby zapewnić optymalne działanie kontenerów bezserwerowych, konieczne jest skalowanie kontenerów w górę lub w dół. Knative może automatycznie skalować usługi w razie potrzeby.
  • Inteligentne kierowanie usług: Jest to istotny element mechanizmu działania Knative. Umożliwia programistom sterowanie przepływem i ilością ruchu do różnych wersji mikrousług. Inteligentne kierowanie usług można wykorzystać podczas wprowadzania nowych funkcji i stosowania strategii wdrażania blue-green.

Pozwala to na stopniowe udostępnianie nowej wersji użytkownikom w celach testowych i stopniowe przekierowywanie ruchu do nowej wersji.

Obsługa zdarzeń i definicja funkcji

Komponent obsługi zdarzeń Knative odpowiada za opisywanie funkcji Knative. Umożliwia definiowanie zachowania kontenerów w oparciu o zdarzenia. Różne zdarzenia uruchamiają konkretne funkcje kontenerów.

Programiści mogą definiować wyzwalacze zdarzeń i powiązane kontenery, aby Knative mógł wykonać swoje zadanie. Knative obsługuje listę zdarzeń oraz ich dostarczanie.

Korzyści z Knative

Knative oferuje usługi takie jak zarządzanie routingiem, stopniowe wdrażanie i integrację z usługami. Może poszczycić się rozległą społecznością. Omówmy, w jaki sposób Knative wpływa na decyzję firm o wdrożeniu tej technologii.

  • W przeciwieństwie do innych rozwiązań, Knative oferuje standardowe zdarzenia i jest kompatybilny z rozwiązaniami FaaS. Wykorzystuje standardowy framework CloudEvent, który ułatwia projektowanie architektury bezserwerowej.
  • Chociaż Knative nie jest PaaS, umożliwia tworzenie bezserwerowej platformy PaaS z bezserwerową platformą orkiestracji.
  • Knative to dojrzałe i zaawansowane rozwiązanie bezserwerowe.
  • Obsługuje wiele platform i zapewnia uniwersalny standard między dostawcami chmury, eliminując ryzyko uzależnienia się od konkretnego dostawcy.

  • Knative zapewnia elastyczną strukturę.
  • Obsługuje proporcjonalne wdrażanie etapowe.
  • Umożliwia korzystanie z ekosystemu bezserwerowego w środowisku kontenerowym.
  • Knative zmniejsza obciążenie związane z zarządzaniem i oprzyrządowaniem.
  • Można szybko migrować do innych dostawców chmury, którzy integrują się z Knative poprzez wdrożenie Kubernetes.
  • Oferuje model obliczeniowy oparty na żądaniach.
  • Umożliwia zarządzanie przepływami pracy jako usługą.
  • Dzięki Knative można przetwarzać dane IoT, przeprowadzać kontrole dostępności i weryfikować konfiguracje grup zabezpieczeń.
  • Pozwala programistom skupić się na pisaniu kodu i szybkim tworzeniu iteracyjnych wersji.
  • Zapewnia programistom możliwość wdrażania nowych wersji.
  • Model oparty na zdarzeniach Knative ułatwia wdrażanie projektów, w tym subskrypcję, łączenie z systemami zewnętrznymi i rejestrację.

Wyzwania Knative (i niektóre rozwiązania)

Problemy z wydajnością

Knative, obsługując odpowiednie aplikacje, zapewnia lepszą wydajność przy zminimalizowanych kosztach. Nieprawidłowe skonfigurowanie aplikacji może jednak prowadzić do zwiększonych kosztów i niewykorzystanych zasobów kontenerów. Może to skutkować obniżoną wydajnością aplikacji, co stanowi największe wyzwanie związane z bezserwerowym wdrożeniem Knative.

W rezultacie, niewystarczająca pula zasobów lub nieodpowiednio dobrane aplikacje mogą zniweczyć wiele korzyści płynących z Knative.

Aby sprostać temu wyzwaniu, należy przeprowadzać testy w celu weryfikacji zasobów i kombinacji aplikacji w Knative. Należy mierzyć obciążenia zdarzeń, określając średnie i maksymalne obciążenia dla każdego z nich, i oszacować łączne zużycie zasobów. Powtórzyć to dla kilku aplikacji, aby utworzyć konfigurację próbną i zweryfikować oszacowania.

Wyzwania funkcjonalne

Funkcjonalne wyzwania związane z Knative mogą obejmować:

  • Knative opiera się na funkcjach, które pasują do modelu bezstanowego. Oznacza to, że komponenty nie przechowują danych w obrębie własnej instancji. Rozwój funkcji nie jest trudny, wymaga jednak drobnej zmiany podejścia. Oznacza to, że nawet jeden błąd może mieć negatywny wpływ na działanie oprogramowania.
  • Dane biznesowe często składają się z transakcji wieloetapowych, a funkcje bezstanowe wymagają utrzymywania kontekstu na każdym etapie. Knative nie posiada takich funkcjonalności jak narzędzia bezserwerowe oferowane przez chmury publiczne.

Regularne monitorowanie i rozwiązywanie problemów może pomóc w utrzymaniu satysfakcjonujących rezultatów.

Wyzwania operacyjne

W porównaniu z ofertami bezserwerowymi w chmurze publicznej, Knative stanowi pewne wyzwanie operacyjne. W przypadku chmur publicznych administratorzy nie mają kontroli nad bazowymi serwerami. Jednakże, w przypadku Knative, będą musieli zarządzać serwerami, Kubernetes, kontenerami, Knative i Istio.

Knative w minimalnym stopniu zwiększa złożoność operacji i rozwoju dla firm, które już wykorzystują Kubernetes i kontenery. Osoby zaangażowane w obsługę siatki usług i mikroserwisów powinny postrzegać Knative jako naturalne rozszerzenie swoich kompetencji.

Zastosowania Knative

Knative jest idealnym rozwiązaniem dla aplikacji, w których występuje zmienna liczba zdarzeń, które mieszczą się w ustalonych limitach lub je przekraczają. Do typowych zastosowań platformy bezserwerowej Knative należą:

Konieczna jest orientacja na zdarzenia. Jeśli zespoły IT nie postrzegają aplikacji jako serii zdarzeń, a raczej jako ciąg transakcji, Knative może nie być dobrym wyborem ze względów funkcjonalnych i wydajnościowych.

Wymagania wstępne i instalacja Knative

Jak wynika z powyższych rozdziałów, Knative to zbiór komponentów, takich jak obsługa zdarzeń i zarządzanie, który działa na siatce usług i klastrze do aranżacji obciążeń. Aby uprościć obsługę, należy zainstalować kilka narzędzi wiersza poleceń. Wymaganych jest zatem kilka zależności, aby móc rozpocząć proces instalacji.

Wymagania wstępne

Istnieje kilka opcji instalacji Kubernetes. Docker Desktop umożliwia łatwe utworzenie klastra Kubernetes do różnorodnych celów. Najprostszym rozwiązaniem jest użycie Kubernetes w Docker, aby uruchomić klaster wraz z węzłami kontenera Docker. Wygodnym sposobem na pracę z klastrem jest użycie narzędzia wiersza poleceń Knative.

Knative CLI zapewnia szybki i prosty interfejs do tworzenia zasobów. Ułatwia wykonywanie skomplikowanych zadań, takich jak podział ruchu i autoskalowanie. Najwygodniej pobrać kompatybilny plik binarny ze strony GitHub.

Instalacja

Po spełnieniu wszystkich wymagań wstępnych można przystąpić do instalacji komponentów. Dla środowiska programistycznego dostępna jest wtyczka szybkiego startu. Wtyczka ułatwia instalację lokalnego klastra Knative za pomocą klienta Knative. Można ją pobrać z oficjalnej strony.

Podsumowanie: Przyszłość Knative

Knative zmienił podejście do przetwarzania bezserwerowego, zapewniając automatyczne skalowanie aplikacji. Ma to znaczący wpływ na systemy interoperacyjne i modułowe.

Oczekuje się, że w przyszłości Knative wyeliminuje obecne niedociągnięcia i stanie się jedną z najwydajniejszych technologii do obsługi architektury bezserwerowej.

Technologia Knative ma duży wpływ na programistów, biorąc pod uwagę jej zalety w porównaniu z innymi rozwiązaniami bezserwerowymi. Knative pomaga oszczędzać czas, eliminując konieczność budowania i utrzymywania rozszerzeń Kubernetes. Programiści są bardzo zadowoleni z technologii Knative, ponieważ jest ona łatwa w użyciu i stanowi świetną alternatywę dla rozwiązań bezserwerowych.

Dlatego, jeśli chcesz w pełni wykorzystać potencjał środowiska Kubernetes w swoich przepływach pracy w chmurze, warto zastosować technologię Knative i osobiście przekonać się o korzyściach.


newsblog.pl