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 取得程序。


分享到:


相關文章: