5 sposobów pracy bez serwera na Kubernetes

Nazwij to „bezserwerowym”, nazwij „obliczeniami sterowanymi zdarzeniami” lub „funkcjami jako usługą (FaaS)”, idea jest taka sama: dynamiczne przydzielanie zasobów do uruchamiania poszczególnych funkcji, zasadniczo mikrousług, które są wywoływane w odpowiedzi do wydarzeń. Platformy obliczeniowe bezserwerowe pozwalają programistom aplikacji skupić się na aplikacji, a nie na podstawowej infrastrukturze i wszystkich jej szczegółach zarządzania.

Większość dostawców usług w chmurze oferuje pewnego rodzaju platformę bezserwerową, ale możesz zbudować ją samodzielnie, używając tylko dwóch składników. Jednym z nich jest Kubernetes, system do orkiestracji kontenerów, który stał się standardową platformą do tworzenia złożonych, odpornych aplikacji. Drugi to dowolny z wielu systemów używanych do tworzenia wzorców aplikacji bezserwerowych w Kubernetes.

Większość platform bezserwerowych dla Kubernetes ma następujące cechy wspólne:

  • Wdraża się w dowolnym środowisku obsługującym Kubernetes, lokalnie lub zdalnie, w tym w środowiskach takich jak OpenShift.
  • Obsługuje uruchamiany kod napisany w dowolnym języku, z niektórymi typowymi środowiskami wykonawczymi wstępnie spakowanymi ze strukturą.
  • Uruchamia wykonanie kodu przez wiele rodzajów zdarzeń - punkt końcowy HTTP, komunikat w kolejce lub inny punkt zaczepienia.

Jedną z głównych zalet budowania bezserwerowego na Kubernetes jest uzyskanie znacznie większej kontroli nad platformą bazową. Wiele ofert bezserwerowych ogranicza zachowania funkcji, które uruchamiają, przez co czasami niektóre klasy aplikacji są niepraktyczne. Dzięki Kubernetes możesz stworzyć platformę bezserwerową, która odpowiada Twoim potrzebom, pozostawiając infrastrukturę operatorom Kubernetes i pozwalając programistom skupić się na pisaniu niezbędnego kodu.

Oto pięć głównych projektów wprowadzających funkcje bezserwerowe do Kubernetes.

Rozszczepienie

Fission jest tworzony i utrzymywany przez firmę zarządzaną Kubernetes Platform 9. Jego głównym powodem do sławy jest to, że pozwala tworzyć aplikacje FaaS bez konieczności budowania kontenerów, po prostu dostarczając pliki definicji.

Fission można zainstalować z wykresem Helm lub bez i można go zainstalować w jednej z dwóch wersji. Dostępna jest pełnowymiarowa wersja z kolejką komunikatów i obsługą rejestrowania InfluxDB oraz uproszczona wersja z podstawową obsługą funkcji. Pierwsza jest przeznaczona do wdrożeń produkcyjnych, a druga do zmoczenia stóp.

Aby dodać kod do wdrożenia rozszczepienia, użyj plików specyfikacji opartych na YAML. Narzędzia wiersza poleceń Fission pozwalają tworzyć pliki YAML dla funkcji i tras używanych do wyzwalania ich punktów wejścia. Plik specyfikacji umożliwia również dostarczanie zmiennych środowiskowych, pomocniczych kontenerów, woluminów i kontroli skażenia / tolerancji Kubernetes dla kodu.

Rozszczepienie zapewnia również „przepływy pracy”. Zainstalowane przez Helm wykres przepływy pracy przekazują dane wyjściowe jednej funkcji do innej funkcji. Funkcje nie muszą być nawet w tym samym języku. Należy zauważyć, że wiąże się to z kosztem wydajności, ponieważ dane wyjściowe każdej funkcji są renderowane w formacie wymiany, chociaż system przepływu pracy obsługuje wiele typowych pierwotnych typów binarnych, aby ograniczyć narzut (np. Liczba całkowita lub ogólny strumień bajtów).

Jedną z wad pierwotnie związanych z FaaS było to, że przy pierwszym wywołaniu funkcji występowało zauważalne opóźnienie w uruchomieniu powiązanego z nią kontenera. Rozszczepienie utrzymuje pojemniki wstępnie ogrzane, aby zminimalizować opóźnienie podczas pierwszego uruchomienia funkcji.

Fission oferuje inne udogodnienia zarówno dla programistów, jak i administratorów. Usługę można wdrożyć w klastrze, który nie ma zewnętrznego dostępu do Internetu, a kod można ponownie załadować na żądanie do klastra. Aktywność funkcji można również rejestrować i odtwarzać, aby ułatwić debugowanie.

Projekt Fission jest dostępny na bardzo liberalnej licencji Apache, więc można go dowolnie przerabiać w razie potrzeby.

Knative

Knative, pierwotnie stworzony przez Google do uruchamiania aplikacji bezserwerowych na Kubernetes, koncentruje się na wzorcach typowych dla wdrożeń bezserwerowych w środowisku produkcyjnym. Knative wymaga jednak bezpośredniego doświadczenia w zarządzaniu wieloma komponentami Kubernetes, aby móc efektywnie używać.

Oprócz Kubernetes Knative wymaga systemu routingu lub siatki usług, takiej jak Istio, ale można również użyć innych opcji, takich jak Ambassador i Gloo. Oznacza to trochę więcej pracy przy konfiguracji, ale projekt zawiera szczegółowe przewodniki dotyczące korzystania z każdej opcji w różnych usługach w chmurze i środowiskach Kubernetes, w tym waniliowym Kubernetes.

Knative działa głównie poprzez wykorzystanie lub rozszerzenie istniejących narzędzi i funkcji Kubernetes. Aplikacje lub funkcje są konfigurowane za pomocą plików YAML i dostarczane jako kontenery Docker, które tworzysz. Dodawanie, modyfikowanie lub usuwanie definicji odbywa się za pośrednictwem kubectlaplikacji wiersza poleceń. W przypadku metryk w aplikacjach Knative użyj Grafana. Skalowanie można wykonać za pomocą własnego autoskalera Knative lub dowolnego innego skalera kompatybilnego z Kubernetes, w tym niestandardowego.

Knative jest w trakcie intensywnego rozwoju, a wiele z jego dedykowanych narzędzi jest nadal w trudnym stanie. Należą do nich  knctlCLI specjalnie dla Knative, który oszczędza kłopotów związanych z używaniem innych narzędzi Kubernetes do zarządzania Knative, jeśli chcesz skupić się tylko na Knative; oraz konarzędzie do tworzenia aplikacji Go w Knative, eliminując krok kompilacji kontenera.

Kubeless

Kubeless został stworzony przez Bitnami, twórców łatwych instalatorów dla popularnych stosów aplikacji internetowych. Kubeless używa natywnych niestandardowych definicji zasobów Kubernetes do obsługi funkcji, więc istnieje nieco mniej abstrakcji między metaforami Kubernetes a funkcjonalnością Kubeless.

Platforma zawiera większość popularnych języków wykonawczych: .NET, Java, Python, Node.js, PHP, Ruby, Go, a nawet nowy język Ballerina do programowania natywnego w chmurze. Środowiska wykonawcze to tylko obrazy Dockera, chociaż Kubeless ma określony format pakowania do używania plików Dockerfiles do tworzenia niestandardowych środowisk wykonawczych.

Kolejną przydatną funkcją Kubeless jest jego CLI, który jest identyczny z poleceniami AWS Lambda CLI. Jest to niezwykle wygodne, jeśli chcesz przeprowadzić migrację z AWS Lambda, ale chcesz zachować część istniejących skryptów zarządzania lub po prostu nie musisz uczyć się całego nowego zestawu poleceń.

Kubeless działa również jako wtyczka do Serverless Framework, systemu do tworzenia aplikacji bezserwerowych na różnych architekturach. Jeśli korzystasz już z Serverless lub Kubeless, łatwiej będzie ci dodać jeden z nich niż użyć czegoś innego.

OpenFaaS

Ideą OpenFaaS jest „proste funkcje bezserwerowe”. Mówiąc prościej, programiści mają na myśli „niewiele trudniejsze niż wdrożenie kontenera Dockera”.

OpenFaaS można wdrożyć na Kubernetes lub w klastrze Docker Swarm (do lokalnego testowania lub do użytku o niskim zapotrzebowaniu). Interfejs wiersza polecenia OpenFaaS służy do tworzenia, wypychania i wdrażania obrazów platformy Docker w klastrze w celu uruchamiania funkcji. Istniejące szablony zapewniają gotowe sposoby wdrażania aplikacji napisanych w Go, Pythonie, Node.js, .NET, Ruby, Java lub PHP 7, chociaż zawsze możesz stworzyć własne. Interfejs CLI OpenFaaS zapewnia również sposoby zarządzania tajnymi danymi w klastrze, a wbudowany interfejs sieciowy umożliwia tworzenie nowych funkcji i zarządzanie nimi.

Inna wersja OpenFaaS, OpenFaaS Cloud, przepakowuje OpenFaaS z funkcjami dla wielu programistów, w tym integracją z Git (w tym GitHub i samodzielnie hostowane edycje GitLab), CI / CD, zarządzanie tajemnicami, HTTPS i możliwością przesyłania zdarzeń do Slacka i innych tonie. OpenFaas Cloud jest dostępny jako darmowy produkt typu open source oraz w wersji hostowanej, z której obecnie można korzystać bezpłatnie.

OpenWhisk

Apache OpenWhisk jest rozliczany jako ogólna platforma bezserwerowa. Kubernetes jest tylko jedną z kilku dostępnych opcji uruchamiania kontenerów w OpenWhisk, ponieważ OpenWhisk obsługuje również Mesos i Docker Compose. Niemniej jednak Kubernetes jest preferowany ze względu na jego narzędzia do wdrażania aplikacji, zwłaszcza wykresy Helm. IBM Cloud Functions jest oparty na projekcie OpenWhisk, więc może również współpracować z poleceniami interfejsu wiersza polecenia OpenWhisk.

W przeciwieństwie do większości innych bezserwerowych frameworków Kubernetes, OpenWhisk jest napisany w języku Scala, a nie w Go (w którym są napisane zarówno Kubernetes, jak i Docker). Prawdopodobnie będzie to problem tylko wtedy, gdy chcesz włamać się do OpenWhisk i masz doświadczenie tylko z Go. 

Większość popularnych opcji uruchomieniowych aplikacji jest dostarczanych w pakiecie z OpenWhisk: Java, Node.js, Python, Ruby, PHP i .NET. Dodatkowo dostępnych jest wiele ezoterycznych i nowatorskich opcji: Scala, Ballerina, Swift i Rust. Środowiska wykonawcze to tylko kontenery Dockera, więc łatwo jest zapewnić własne.

Jedną z wygodnych funkcji wdrażania OpenWhisk są „akcje zip”. Skieruj archiwum .zip kodu i plików pomocniczych do OpenWhisk, używając pliku manifestu pakietu kodu, a OpenWhisk utworzy z niego akcję. Interfejs CLI OpenWhisk zawiera również narzędzia do przekształcania drzewa katalogów z kodem w takie archiwum. A katalog pakietów usług ułatwia podłączenie aplikacji do typowych ofert innych firm, takich jak GitHub, Slack, Apache Kafka lub Jira.