雲端開源工具廠商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 System Interface)標準,讓WebAssembly的功能可以擴展到作業系統,有了這個抽象層,開發者的WebAssembly程式,就能夠在任何支援WASI的地方執行,達到一次編譯,隨處執行的目的。

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

因此開發者可以依據需求,將編譯程式放在Linux容器上執行,或是將應用程式編譯成WebAssembly,而後者就可以利用Krustlet工具來部署。Deislabs提到,Krustlet的設計類似Virtual Kubelet,可以從Kubernetes API事件串流中監聽新的Pod;Virtual Kubelet是一個開源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上取得程式。


Advertisement

更多 iThome相關內容