Krustlet可让用户在K8s上简单部署WebAssembly工作负载

互联网2021-02-14 06:02:01
最佳答案

云端开源工具厂商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上取得程式。

免责声明:本文由用户上传,如有侵权请联系删除!