Was ist ein Krustlet? In diesem Artikel wird ein neuer Ansatz für die Ausführung deiner Anwendungen in Kubernetes mit WebAssembly anstelle von Containern erläutert.
Kubernetes-Systemarchitektur
Kubernetes ist im Wesentlichen ein Werkzeug, das die Skalierung von Anwendungen durch die Zuordnung von Containern, ausführbaren Softwareeinheiten, auf eine Reihe von Hosts, sogenannte Arbeitsknoten, ermöglicht. Normalerweise wird ein Kubernetes-Cluster von einem oder mehreren Master-Knoten gesteuert, die das Gehirn des Clusters sind.
Der Masterknoten ist die Schnittstelle für den Softwareentwickler, um dem Cluster über den API-Server den gewünschten Zustand zu geben. Gleichzeitig benötigt der Master-Knoten die Möglichkeit, Container auf den Worker-Knoten laufen zu lassen, um die vom Software-Ingenieur bereitgestellte Konfiguration zu erfüllen. Dies geschieht durch die Übergabe einer Pod-Spezifikation an den Worker-Node.
Der Arbeitsknoten muss die Konfiguration interpretieren und in seine Container-Laufzeit implementieren, d. h. er muss das Container-Image abrufen, es ausführen und den Zustand des Containers überprüfen. Der Worker Node erledigt dies durch die Ausführung einer Komponente namens Kubelet. Kubelet ist eine Komponente, die wie ein Übersetzer agiert und die Pod-Spezifikation in die Aktionen übersetzt, die auf der Container-Laufzeit ausgeführt werden müssen.
Rekapitulation: Das Kubelet ist eine Komponente, die auf einem Worker Node installiert ist. Es empfängt Pod-Spezifikationen und führt den Container entsprechend in der Container-Laufzeit aus.
Von Kubelet zu Krustlet
WebAssembly ist ein Binärformat, das einen Low-Level-Zugriff auf den Browser ermöglicht. Sie können eine Programmiersprache in ein leistungsfähiges, portables Binärformat kompilieren, das fast mit nativer Geschwindigkeit läuft. WebAssembly wurde entwickelt, um neben JavaScript im Browser ausgeführt zu werden. Jeder Entwickler, der schon einmal im Internet gearbeitet hat, weiß, dass ein wesentliches Merkmal bei der Entwicklung von Browseranwendungen darin besteht, die Anwendung in eine Sandbox einzuschließen, d. h., dass die Anwendung nur innerhalb der Anwendung interagiert und auf Daten zugreift.
Du möchtest zum Beispiel nicht, dass deine Bank-Website die Daten mit deinem Chat-Anbieter teilt. Diese Idee des Sandboxing wurde in WebAssembly integriert und ausgiebig erprobt. Das Potenzial der Erstellung portabler Softwarepakete, die aus vielen verschiedenen Programmiersprachen erstellt werden können, ist nicht nur im Browser hilfreich. Um jedoch Anwendungen außerhalb des Browsers zu erstellen, benötigen Sie die Fähigkeit, mit dem zugrunde liegenden System zu interagieren. Diese Fähigkeiten wurden in der WebAssembly-Systemschnittstelle, kurz WASI, festgelegt. Eine WASI-Implementierung ist wasmtime, eine eigenständige Laufzeitumgebung für WebAssembly. Anstelle des Browsers verwendest du wasmtime, um deinen Code auszuführen und mit dem zugrundeliegenden System zu interagieren, z. B. für den Zugriff auf Dateien und die Vernetzung (auch wenn dies immer noch schwierig ist).
Rekapitulation: Das Krustlet ist eine Komponente, die auf einem Arbeitsknoten installiert ist. Sie empfängt Pod-Spezifikationen und führt eine WebAssembly-Binärdatei entsprechend in der WebAssembly Runtime aus. WebAssembly ist ein leistungsfähiges portables Sandbox-Binärformat, das dem Slogan "einmal erstellen, überall ausführen" gerecht werden soll .
WebAssembly gegenüber Containern
Anhand der obigen Informationen können wir sehen, dass WebAssembly eine Möglichkeit ist, portable Softwareeinheiten zu erstellen und sie isoliert in ihrer Sandbox auszuführen, was im Wesentlichen etwas ist, das Container bereits bieten. Container ermöglichen das Packen von Software und Sandboxing auf der Ebene des Betriebssystems. Dies bietet Entwicklern zwar viel Flexibilität, bringt aber auch einen gewissen Aufwand mit sich.
Die Verpackung von WebAssembly ist viel schlanker, da Container leider oft unnötige Systemabhängigkeiten enthalten, die die Größe des Images erhöhen und eine größere Angriffsfläche für Hacker schaffen. Neben dem geringeren Speicherbedarf und der geringeren Speicherkapazität verspricht es schnellere Start- und Abschaltzeiten. Es ist anzumerken, dass sich Krustlet noch in der Entwicklung befindet, aber es hat das Potenzial, im IoT besonders interessant zu sein, da der leichtgewichtige, portable Charakter fantastisch in eine ressourcenbeschränkte Problemdomäne passt.
Zusammenfassung: Da Krustlets gegen Kubelets ausgetauscht werden können und umgekehrt, wird die Frage in Zukunft nicht mehr lauten, ob ich meinen Kubernetes-Cluster mit Containern oder WebAssembly betreiben soll, sondern es wird vom Kontext abhängen. Es handelt sich um komplementäre Lösungen, die nebeneinander laufen können. Je nach den Anforderungen der zugrunde liegenden Hardware und dem Anwendungsfall kannst du deinen Cluster mit einem Krustlet erweitern oder ein Krustlet durch ein Kubelet ersetzen, wenn du mehr Kontrolle auf der Betriebssystemseite benötigst.