云端开源工具厂商 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智慧 的文章