5 Möglichkeiten, auf Kubernetes ohne Server zu arbeiten

Nennen Sie es "serverlos", "ereignisgesteuertes Rechnen" oder "Funktionen als Dienst (FaaS)". Die Idee ist dieselbe: Dynamische Zuweisung von Ressourcen zum Ausführen einzelner Funktionen, im Wesentlichen Mikrodienste, die als Antwort aufgerufen werden zu Veranstaltungen. Mit serverlosen Computerplattformen können sich Anwendungsentwickler auf die App konzentrieren, nicht auf die zugrunde liegende Infrastruktur und alle Verwaltungsdetails.

Die meisten Cloud-Anbieter bieten eine Art serverlose Plattform an, aber Sie können eine Plattform mit nur zwei Zutaten selbst erstellen. Eines davon ist Kubernetes, das Container-Orchestrierungssystem, das zu einer Standardplattform für die Erstellung komponentenbasierter, ausfallsicherer Anwendungen geworden ist. Das zweite ist eines von mehreren Systemen, mit denen serverlose Anwendungsmuster in Kubernetes erstellt werden.

Die meisten serverlosen Frameworks für Kubernetes haben folgende Funktionen gemeinsam:

  • Wird in jeder Umgebung bereitgestellt, die Kubernetes lokal oder remote unterstützt, einschließlich Umgebungen wie OpenShift.
  • Unterstützt das Ausführen von Code in einer beliebigen Sprache, wobei einige gängige Laufzeiten mit dem Framework vorinstalliert sind.
  • Löst die Ausführung von Code durch viele Arten von Ereignissen aus - einen HTTP-Endpunkt, eine Warteschlangennachricht oder einen anderen Hook.

Ein Hauptvorteil des Aufbaus von Serverless auf Kubernetes besteht darin, dass die zugrunde liegende Plattform weitaus besser kontrolliert werden kann. Viele serverlose Angebote schränken das Verhalten der von ihnen ausgeführten Funktionen ein und machen bestimmte Anwendungsklassen manchmal unpraktisch. Mit Kubernetes können Sie eine serverlose Plattform erstellen, die Ihren Anforderungen entspricht, die Infrastruktur Ihren Kubernetes-Betreibern überlassen und Ihre Entwickler sich darauf konzentrieren lassen, wichtigen Code zu schreiben.

Hier sind fünf der wichtigsten Projekte, die Kubernetes serverlose Funktionen bieten.

Fission

Fission wird von der Managed-Kubernetes-Firma Platform 9 erstellt und verwaltet. Der Hauptanspruch auf Ruhm besteht darin, dass Sie FaaS-Anwendungen erstellen können, ohne Container erstellen zu müssen, indem Sie lediglich Definitionsdateien bereitstellen.

Fission kann mit oder ohne Helmkarte installiert werden und kann in einer von zwei Editionen installiert werden. Es gibt eine vollständige Version mit Nachrichtenwarteschlange und InfluxDB-Unterstützung für die Protokollierung sowie eine abgespeckte Version mit Grundfunktionen. Ersteres ist für Produktionsbereitstellungen konzipiert, und letzteres, um Ihre Füße nass zu machen.

Um einer Fission-Bereitstellung Code hinzuzufügen, verwenden Sie YAML-basierte Spezifikationsdateien. Mit dem Befehlszeilentool von Fission können Sie YAML-Dateien für Ihre Funktionen und die Routen erstellen, die zum Auslösen ihrer Einstiegspunkte verwendet werden. In der Spezifikationsdatei können Sie auch Umgebungsvariablen, Hilfscontainer, Volumes und Kubernetes-Verschmutzungs- / Toleranzsteuerelemente für den Code bereitstellen.

Fission bietet auch „Workflows“. Workflows, die vom Helmdiagramm installiert werden, übergeben die Ausgabe einer Funktion an eine andere Funktion. Die Funktionen müssen nicht einmal in derselben Sprache sein. Beachten Sie, dass dies mit Leistungskosten verbunden ist, da die Ausgabe jeder Funktion in ein Austauschformat gerendert wird, obwohl das Workflow-System viele gängige primitive Binärtypen unterstützt, um den Overhead gering zu halten (z. B. eine Ganzzahl oder ein generischer Byte-Stream).

Einer der Nachteile, die ursprünglich mit FaaS verbunden waren, war, dass beim ersten Aufrufen einer Funktion eine spürbare Verzögerung beim Starten des damit verbundenen Containers auftrat. Durch die Spaltung werden die Behälter vorgewärmt, um die Latenz beim ersten Ausführen einer Funktion zu minimieren.

Fission bietet Entwicklern und Administratoren weitere Annehmlichkeiten. Der Dienst kann in einem Cluster ohne externen Internetzugang bereitgestellt werden, und Code kann bei Bedarf per Hot-Reload in den Cluster geladen werden. Funktionsaktivitäten können auch aufgezeichnet und wiedergegeben werden, um das Debuggen zu erleichtern.

Das Fission-Projekt steht unter der hochliberalen Apache-Lizenz zur Verfügung und kann daher bei Bedarf frei überarbeitet werden.

Knative

Knative wurde ursprünglich von Google für die Ausführung von Apps ohne Server auf Kubernetes entwickelt und konzentriert sich auf Muster, die bei Bereitstellungen ohne Server in der Produktion üblich sind. Knative erfordert jedoch direktes Fachwissen bei der Verwaltung vieler Kubernetes-Komponenten, um sie effektiv nutzen zu können.

Neben Kubernetes benötigt Knative ein Routing-System oder ein Service-Mesh wie Istio, aber auch andere Optionen wie Ambassador und Gloo können verwendet werden. Dies bedeutet etwas mehr Arbeit beim Einrichten, aber das Projekt enthält detaillierte Anleitungen zur Verwendung jeder Option in einer Vielzahl von Cloud-Diensten und Kubernetes-Umgebungen, einschließlich Vanilla Kubernetes.

Knative arbeitet hauptsächlich mit der Nutzung oder Erweiterung vorhandener Kubernetes-Tools und -Funktionen. Apps oder Funktionen werden über YAML-Dateien konfiguriert und als von Ihnen erstellte Docker-Container geliefert. Das Hinzufügen, Ändern oder Löschen von Definitionen erfolgt über die kubectlBefehlszeilen-App. Verwenden Sie Grafana für Metriken für Knative-Apps. Die Skalierung kann mit Knatives eigenem Autoscaler oder mit jedem anderen Kubernetes-kompatiblen Scaler einschließlich eines benutzerdefinierten Skalierers erfolgen.

Knative befindet sich in einer starken Entwicklung und viele seiner speziellen Werkzeuge befinden sich noch in einem schwierigen Zustand. Dazu gehört  knctleine CLI speziell für Knative, die Ihnen den Aufwand erspart, die anderen Tools von Kubernetes zum Verwalten von Knative zu verwenden, wenn Sie sich nur auf Knative konzentrieren möchten. und koein Tool zum Erstellen von Go-Apps auf Knative, bei dem der Schritt zum Erstellen von Containern entfällt.

Kubeless

Kubeless wurde von Bitnami entwickelt, den Entwicklern einfacher Installationsprogramme für gängige Webanwendungsstacks. Kubeless verwendet die nativen benutzerdefinierten Ressourcendefinitionen von Kubernetes, um Funktionen zu handhaben, sodass die Abstraktion zwischen den Kubernetes-Metaphern und der Kubeless-Funktionalität etwas geringer ist.

Die gängigsten Sprachlaufzeiten werden mit der Plattform geliefert: .NET, Java, Python, Node.js, PHP, Ruby, Go und sogar die neue Ballerina-Sprache für die Cloud-native Entwicklung. Laufzeiten sind nur Docker-Images, obwohl Kubeless ein spezielles Verpackungsformat für die Verwendung von Docker-Dateien zum Erstellen benutzerdefinierter Laufzeiten hat.

Eine weitere praktische Funktion von Kubeless ist die CLI, die befehlsidentisch mit der AWS Lambda CLI ist. Dies ist äußerst praktisch, wenn Sie von AWS Lambda weg migrieren möchten, aber einige der vorhandenen Verwaltungsskripte beibehalten möchten oder einfach keinen neuen Befehlssatz lernen müssen.

Kubeless fungiert auch als Plug-In für das Serverless Framework, ein System zum Erstellen von Anwendungen ohne Server auf einer Vielzahl von Architekturen. Wenn Sie Serverless oder Kubeless bereits verwenden, fällt es Ihnen leichter, eines hinzuzufügen, als etwas anderes zu verwenden.

OpenFaaS

Die Tonhöhe für OpenFaaS ist "Serverlose Funktionen einfach gemacht". Mit einfach meinen die Entwickler "nicht viel schwieriger als die Bereitstellung eines Docker-Containers".

OpenFaaS kann entweder in Kubernetes oder in einem Docker Swarm-Cluster bereitgestellt werden (für lokale Tests oder zur Verwendung bei geringem Bedarf). Sie verwenden die OpenFaaS-CLI, um Docker-Images zu erstellen, zu übertragen und im Cluster bereitzustellen, um Funktionen auszuführen. Bestehende Vorlagen bieten vorgefertigte Möglichkeiten zum Bereitstellen von Apps, die in Go, Python, Node.js, .NET, Ruby, Java oder PHP 7 geschrieben wurden, obwohl Sie jederzeit Ihre eigenen rollen können. Die OpenFaaS-CLI bietet Ihnen auch Möglichkeiten zum Verwalten von Geheimnissen in Ihrem Cluster, während Sie über die integrierte Web-Benutzeroberfläche neue Funktionen erstellen und verwalten können.

Eine andere Version von OpenFaaS, OpenFaaS Cloud, packt OpenFaaS mit Funktionen für mehrere Entwickler neu, einschließlich Integration in Git (einschließlich GitHub und selbst gehostete Editionen von GitLab), CI / CD, Geheimdienstverwaltung, HTTPS und der Möglichkeit, Ereignisse an Slack und andere weiterzuleiten sinkt. OpenFaas Cloud ist als kostenloses Open Source-Produkt und in einer gehosteten Version verfügbar, die derzeit kostenlos verwendet werden kann.

OpenWhisk

Apache OpenWhisk wird als generische serverlose Plattform in Rechnung gestellt. Kubernetes ist nur eine von mehreren Optionen zum Ausführen von Containern in OpenWhisk, da OpenWhisk auch Mesos und Docker Compose unterstützt. Trotzdem wird Kubernetes aufgrund seiner Tools für die App-Bereitstellung, insbesondere der Helm-Diagramme, bevorzugt. IBM Cloud Functions basiert auf dem OpenWhisk-Projekt und kann daher auch mit OpenWhisk-CLI-Befehlen arbeiten.

Im Gegensatz zu den meisten anderen serverlosen Kubernetes-Frameworks ist OpenWhisk in der Scala-Sprache und nicht in Go (in der sowohl Kubernetes als auch Docker geschrieben sind) geschrieben. Dies ist wahrscheinlich nur dann ein Problem, wenn Sie OpenWhisk hacken möchten und nur Erfahrung mit Go haben. 

Die meisten gängigen Laufzeitoptionen für Anwendungen sind mit OpenWhisk vorinstalliert: Java, Node.js, Python, Ruby, PHP und .NET. Darüber hinaus sind viele esoterische und innovative Optionen enthalten: Scala, Ballerina, Swift und Rust. Laufzeiten sind nur Docker-Container, daher ist es einfach, eigene Container bereitzustellen.

Eine praktische OpenWhisk-Bereitstellungsfunktion sind "Zip-Aktionen". Zeigen Sie mit der Manifestdatei für ein Codepaket auf ein ZIP-Archiv mit Code und Zusatzdateien auf OpenWhisk, und OpenWhisk erstellt daraus eine Aktion. Die OpenWhisk-CLI enthält auch Tools zum Umwandeln eines Verzeichnisbaums von Code in ein solches Archiv. Ein Katalog mit Servicepaketen erleichtert das Anschließen Ihrer Anwendung an gängige Angebote von Drittanbietern wie GitHub, Slack, Apache Kafka oder Jira.