Sie möchten mit Kubernetes eine Plattform für den Betrieb von serverlosen Funktionen schaffen? Diese Frameworks zeigen Ihnen den Weg. [...]
Nennen Sie es „serverless“, nennen Sie es „event-driven compute“, oder nennen Sie es „functions as a service (FaaS)“, die Idee ist die gleiche: dynamisch Ressourcen zuweisen, um einzelne Funktionen, im Wesentlichen Microservices, auszuführen, die als Reaktion auf bestimmte Ereignisse aufgerufen werden. Serverless-Compute-Plattformen ermöglichen es Anwendungsentwicklern, sich auf die Anwendung zu konzentrieren, nicht auf die zugrunde liegende Infrastruktur und alle ihre Verwaltungsdetails.
Die meisten Cloud-Anbieter bieten eine Art serverlose Plattform an, dabei können Sie eine solche mit nur zwei Komponenten selbst erstellen. Eine davon ist Kubernetes, das Container-Orchestrierungssystem, das sich zu einer Standardplattform für die Erstellung von komponentenbasierten, belastbaren Anwendungen entwickelt hat. Das zweite ist eines von mehreren Systemen, mit denen serverlose Anwendungsmuster in Kubernetes erstellt werden können.
Die meisten der serverlosen Frameworks für Kubernetes haben diese Eigenschaften gemeinsam:
- Sie lassen sich in jeder Umgebung einsetzen, die Kubernetes unterstützt, lokal oder remote, einschließlich Umgebungen wie OpenShift.
- Unterstützt die Ausführung von Code, der in einer beliebigen Sprache geschrieben wurde, mit einigen üblichen Laufzeiten, die mit dem Framework vorgefertigt sind.
- Löst die Ausführung von Code durch viele Arten von Ereignissen aus – ein HTTP-Endpunkt, eine Warteschlangenmeldung oder ein anderer Hook.
Ein großer Vorteil der serverlosen Entwicklung auf Kubernetes ist es, eine viel größere Kontrolle über die zugrunde liegende Plattform zu erhalten. Viele serverlose Angebote schränken das Verhalten der von ihnen ausgeführten Funktionen ein, wodurch bestimmte Klassen von Anwendungen manchmal unpraktisch werden. Mit Kubernetes können Sie eine serverlose Plattform erstellen, die Ihren Anforderungen entspricht, wobei Sie die Infrastruktur Ihren Kubernetes-Betreibern überlassen und Ihre Entwickler sich auf das Schreiben von wichtigem Code konzentrieren können.
Hier sind fünf der wichtigsten Projekte, die serverlose Funktionalität für Kubernetes liefern.
Fission
Fission wird durch die managed-Kubernetes Firma Platform 9 erstellt und gepflegt. Sein Hauptanspruch ist es, FaaS-Anwendungen zu erstellen, ohne dabei Container erstellen zu müssen, nur durch die Bereitstellung von Definitionsdateien.
Fission kann mit oder ohne Helm Chart installiert werden und kann in zwei verschiedenen Editionen eingesetzt werden. Es gibt eine vollwertige Version mit Message Queue und InfluxDB-Unterstützung für das Logging und eine abgespeckte Version mit Basisfunktionen. Erstere ist für den Produktionseinsatz konzipiert, die zweite für den Einsatz in der Produktion.
Um Code zu einem Fission-Deployment hinzuzufügen, verwenden Sie YAML-basierte Spec-Dateien. Mit dem Kommandozeilen-Tooling von Fission können Sie YAML-Dateien für Ihre Funktionen und die Wege, über die die Einstiegspunkte ausgelöst werden, erstellen. Über die Spec-Datei können Sie außerdem Umgebungsvariablen, Hilfscontainer, Volumes und Kubernetes-Taint/Toleranzkontrollen für den Code bereitstellen.
Fission stellt zudem „Workflows“ zur Verfügung. Installiert von Helm chart, geben Workflows die Ausgabe einer Funktion an eine andere Funktion weiter. Die Funktionen müssen nicht einmal in der gleichen Sprache sein. Beachten Sie, dass dies mit einem Leistungsaufwand 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. ein Integer oder ein generischer Bytestrom).
Einer der Nachteile, die ursprünglich mit FaaS verbunden waren, bestand darin, dass beim ersten Aufruf einer Funktion eine merkliche Verzögerung beim Start des zugehörigen Containers auftrat. Fission hält die Container vorgewärmt, um die Latenzzeit beim ersten Ausführen einer Funktion zu minimieren.
Darüber hinaus bietet Fission weitere Annehmlichkeiten sowohl für Entwickler als auch für Administratoren. Der Dienst kann in einem Cluster ohne externen Internetzugang bereitgestellt werden, und Code kann bei Bedarf im laufenden Betrieb in den Cluster geladen werden. Die Funktionsaktivität kann auch aufgezeichnet und wiedergegeben werden, um die Fehlersuche zu erleichtern.
Das Fission-Projekt ist unter der sehr liberalen Apache-Lizenz verfügbar und kann daher bei Bedarf frei überarbeitet werden.
Knative
Ursprünglich von Google entwickelt, um serverlose Anwendungen auf Kubernetes auszuführen, konzentriert sich Knative auf Muster, die bei serverlosen Implementierungen in der Produktion üblich sind. Knative erfordert jedoch direkte Erfahrung mit der Verwaltung vieler Kubernetes-Komponenten, um diese effektiv nutzen zu können.
Zusätzlich zu Kubernetes benötigt Knative ein Routing-System oder 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 hat detaillierte Anleitungen zur Nutzung jeder Option in einer Vielzahl von Cloud-Services und Kubernetes-Umgebungen, einschließlich Vanilla Kubernetes.
Knative funktioniert hauptsächlich durch die Nutzung oder Erweiterung der vorhandenen Kubernetes-Werkzeuge und -Funktionen. Apps bzw. Funktionen werden über YAML-Dateien konfiguriert und als von Ihnen erstellte Docker-Container ausgeliefert. Das Hinzufügen, Ändern oder Löschen von Definitionen erfolgt über die Kommandozeilenapplikation kubectl. Für Metriken in Knative-Apps verwenden Sie Grafana. Die Skalierung kann mit dem Knative-eigenen Autoscaler oder mit jedem anderen Kubernetes-kompatiblen Skalierer, auch einem selbst entwickelten, erfolgen.
Knative ist unter intensiver Entwicklung, und viele seiner dedizierten Tools sind noch in einem rauen Zustand. Dazu gehören knctl, eine CLI speziell für Knative, die es Ihnen erspart, die anderen Tools von Kubernetes zur Verwaltung von Knative zu verwenden, wenn Sie sich nur auf Knative konzentrieren wollen; und ko, ein Tool zum Erstellen von Go-Anwendungen auf Knative, bei dem der Schritt zum Erstellen von Containern wegfällt.
Kubeless
Kubeless wurde von Bitnami entwickelt, den Entwicklern von einfachen Installationsprogrammen für gängige Web-Applikations-Stacks. Kubeless verwendet die nativen Custom Resource Definitionen von Kubernetes, um Funktionen zu handhaben, so dass es etwas weniger Abstraktion zwischen den Kubernetes-Metaphern und der Kubeless-Funktionalität gibt.
Die meisten gängigen Sprachversionen werden mit der Plattform geliefert: .NET, Java, Python, Node.js, PHP, Ruby, Go und sogar die neue Ballerina-Sprache für die native Entwicklung in der Cloud. Laufzeiten sind nur Docker-Images, obwohl Kubeless ein spezielles Paketierungsformat für die Verwendung von Dockerfiles zur Erstellung eigener Laufzeiten besitzt.
Ein weiteres praktisches Kubeless-Feature ist die CLI, die kommandoidentisch zur AWS Lambda CLI funktioniert. Dies ist enorm praktisch, wenn Sie von AWS Lambda weg migrieren, aber einen Teil des bestehenden Management-Scriptings beibehalten wollen oder einfach nur keinen ganz neuen Befehlssatz lernen wollen.
Kubeless funktioniert auch als Plug-in für das Serverless Framework, ein System zur Erstellung von serverlosen Anwendungen auf einer Vielzahl von Architekturen. Wenn Sie bereits Serverless oder Kubeless verwenden, ist es einfacher, eines von beiden hinzuzufügen, als etwas anderes zu verwenden.
OpenFaaS
Der Slogan für OpenFaaS lautet: „Serverlose Funktionen einfach gemacht“. Mit einfach meinen die Entwickler „nicht viel schwieriger als das bloße Aufstellen eines Docker-Containers“.
OpenFaaS kann entweder in Kubernetes oder in einem Docker Swarm Cluster (für lokale Tests oder für die Nutzung bei geringer Nachfrage) eingesetzt werden. Sie verwenden die OpenFaaS-CLI, um Docker-Images zu erstellen, zu pushen und im Cluster bereitzustellen, um Funktionen auszuführen. Vorhandene Vorlagen bieten vorgefertigte Möglichkeiten zum Bereitstellen von Anwendungen, die in Go, Python, Node.js, .NET, Ruby, Java oder PHP 7 geschrieben wurden, wobei Sie jederzeit Ihre eigenen erstellen können. Die OpenFaaS-CLI bietet Ihnen auch Möglichkeiten, Secrets in Ihrem Cluster zu verwalten, während Sie mit der integrierten 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 zusammen, einschließlich der Integration mit Git (einschließlich GitHub und selbst gehostete Editionen von GitLab), CI/CD, Secret Management, HTTPS und der Möglichkeit, Ereignisse an Slack und andere Sinks zu übermitteln. OpenFaas Cloud ist als kostenloses Open-Source-Produkt und in einer gehosteten Version verfügbar, die derzeit kostenlos genutzt werden kann.
OpenWhisk
Apache OpenWhisk wird als generische serverlose Plattform berechnet. Kubernetes ist nur eine von mehreren Möglichkeiten, Container in OpenWhisk zu betreiben, da OpenWhisk auch Mesos und Docker Compose unterstützt. Dennoch wird Kubernetes aufgrund seiner Tools für den Einsatz von Apps, insbesondere von Helm Charts, bevorzugt. IBM Cloud Functions basiert auf dem OpenWhisk-Projekt, kann also auch mit OpenWhisk-CLI-Befehlen arbeiten.
Im Gegensatz zu den meisten anderen serverlosen Kubernetes-Frameworks ist OpenWhisk in der Scala-Sprache geschrieben, nicht in Go (in der sowohl Kubernetes als auch Docker geschrieben sind). Dies ist wahrscheinlich nur dann ein Problem, wenn Sie sich in OpenWhisk einarbeiten wollen und Sie nur Erfahrung mit Go haben.
Die meisten der beliebten Laufzeitoptionen für Anwendungen werden mit OpenWhisk vorinstalliert geliefert: Java, Node.js, Python, Ruby, PHP und .NET. Außerdem sind viele esoterische und innovative Optionen enthalten: Scala, Ballerina, Swift und Rust. Laufzeiten sind nur Docker-Container, so dass es einfach ist, Ihre eigenen bereitzustellen.
Eine praktische OpenWhisk-Bereitstellungsfunktion sind „Zip-Aktionen“. Weisen Sie ein .zip-Archiv mit Code und Hilfsdateien an OpenWhisk, indem Sie die Manifestdatei für ein Codepaket verwenden, und OpenWhisk wird daraus eine Aktion erstellen. Die OpenWhisk-CLI enthält auch Werkzeuge, um einen Verzeichnisbaum mit Code in ein solches Archiv zu transformieren. Und ein Katalog von Servicepaketen macht es einfach, Ihre Anwendung in gängige Angebote von Drittanbietern wie GitHub, Slack, Apache Kafka oder Jira einzubinden.
*Serdar Yegulalp ist Senior Writer bei InfoWorld und konzentriert sich auf maschinelles Lernen, Containerisierung, Devops, das Python-Ökosystem und regelmäßige Reviews.
Be the first to comment