雲端開源工具廠商 Deislabs 推出了一個名為 Krustlet 的工具,Krustlet 這個字是結合 Kubernetes-Rust-Kubelet 創造出來的,說明 Krustlet 是用程序語言 Rust 所開發,用來提供類似 Kubernetes Kubelet 功能,Krustlet 可簡化用戶在 Kubernetes 上,部署 WebAssembly 工作負載任務。
之所以要在 Kubernetes 中支持 WebAssembly,Deislabs 提到,Linux 容器和 WebAssembly 各有優點,可以成為互補的技術。Linux 容器提供了操作系統等級的虛擬沙盒,可以讓用戶在單個主機上執行多個隔離的 Linux 系統,容器直接在物理硬件上執行,不需要進行模擬,因此執行的額外成本很小;而 WebAssembly 則是一種新的二進位開放格式開放標準,具有內存安全以及可移植的特性,能以接近原生性能執行,目前 Rust、C/C++ 與 AssemblyScript 都可交叉編譯成 WebAssembly。
一開始 WebAssembly 是為瀏覽器所發展的,但是隨著發展,Mozilla 開始把 WebAssembly 擴展到瀏覽器之外,建立了 WASI(WebAssembly SystemInterface)標準,讓 WebAssembly 的功能可以擴展到操作系統,有了這個抽象層,開發者的 WebAssembly 程序,就能夠在任何支持 WASI 的地方執行,達到一次編譯,隨處執行的目的。
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 取得程序。
閱讀更多 AI智慧 的文章