Krustlet 可讓用戶在 K8s 上簡單部署 WebAssembly 工作負載

雲端開源工具廠商 Deislabs 推出了一個名為 Krustlet 的工具,Krustlet 這個字是結合 Kubernetes-Rust-Kubelet 創造出來的,說明 Krustlet 是用程序語言 Rust 所開發,用來提供類似 Kubernetes Kubelet 功能,Krustlet 可簡化用戶在 Kubernetes 上,部署 WebAssembly 工作負載任務。

Krustlet 可讓用戶在 K8s 上簡單部署 WebAssembly 工作負載

之所以要在 Kubernetes 中支持 WebAssembly,Deislabs 提到,Linux 容器和 WebAssembly 各有優點,可以成為互補的技術。Linux 容器提供了操作系統等級的虛擬沙盒,可以讓用戶在單個主機上執行多個隔離的 Linux 系統,容器直接在物理硬件上執行,不需要進行模擬,因此執行的額外成本很小;而 WebAssembly 則是一種新的二進位開放格式開放標準,具有內存安全以及可移植的特性,能以接近原生性能執行,目前 Rust、C/C++ 與 AssemblyScript 都可交叉編譯成 WebAssembly。

一開始 WebAssembly 是為瀏覽器所發展的,但是隨著發展,Mozilla 開始把 WebAssembly 擴展到瀏覽器之外,建立了 WASI(WebAssembly SystemInterface)標準,讓 WebAssembly 的功能可以擴展到操作系統,有了這個抽象層,開發者的 WebAssembly 程序,就能夠在任何支持 WASI 的地方執行,達到一次編譯,隨處執行的目的。

Krustlet 可讓用戶在 K8s 上簡單部署 WebAssembly 工作負載

deislabs.io

Linux 容器與 WebAssembly 並不處於互相競爭的位置上,Linux 容器目的是要提供操作系統層級的沙盒環境,由於要靠 Linux 核心提供沙盒環境,因此在英特爾芯片編譯的代碼,就無法在 ARM 硬件上執行;而 WebAssembly 是可移植的二進位格式,無論底層硬件為何,只要是支持 WASI 的硬件, WebAssembly 程序就能夠在上面運作,不過由於 WebAssembly 是二進位格式,無法提供跟操作系統沙盒相同的靈活性。

因此開發者可以依據需求,將編譯程序放在 Linux 容器上執行,或是將應用程序編譯成 WebAssembly,而後者就可以利用 Krustlet 工具來部署。

Krustlet 的設計類似 Virtual Kubelet,可以從 Kubernetes API 事件串流中監聽新的 Pod; VirtualKubelet 是一個開源 Kubelet 實作,而 Kubelet 則是 Kubernetes 叢集的必要元件,叢集中每個節點都會啟動 Kubelet,來處理主節點派送的任務,以及管理節點上的 Pod。

現在 Kubernetes API 也可以調度 Pod 到 Krustlet 上,並在 waSCC 或是 WASI Runtime 上執行,同一個 Kubernetes 叢集,可以同時擁有傳統 Linux 容器工作負載與 WebAssembly 工作負載,兩者也可以互相溝通。

Deislabs 現在推出的是 Krustlet 第一個版本 0.1.0,0.2.0 版本將會支持卷宗掛載,並提供更多示例,及補充 Krustlet 文件。

Krustlet 項目完全開源,想搶先嚐試的用戶可以在 GitHub 取得程序。


分享到:


相關文章: