【翻译】边缘的容器化

第二国家和未来之窗的特邀文章

这项工作由Second StateFutureWei支持,基于开源项目WasmEdgeseL4

应用容器,如Docker,是云原生应用增长的关键驱动力。然而,尽管云原生开发范式已被证明非常流行,但由于应用容器需要大量的计算资源,因此很难将云原生基础设施扩展到大型数据中心之外。例如,Docker不支持实时操作系统(RTOS),只适用于POSIX系统。此外,在边缘网络和设备上,如智能工厂和智能汽车,行业生态系统和供应商网络决定了应用程序必须从多个独立供应商那里组装。例如,在一个典型的电动汽车中,有超过100个供应商为汽车的不同部分编写软件组件。对于汽车OEM来说,提供一个安全的、高性能的、实时的运行环境给供应商和厂商来整合他们的软件组件是至关重要的。目前已经有一些尝试来支持边缘RTOS上的应用容器。

VxWorks是一个领先的商业实时操作系统,用于关键任务系统,如飞机和太空船。VxWorks容器是最近的一项举措(2021年),在VxWorks实时操作系统上支持符合OCI的轻量级容器。

然而,Docker的方法并不适合边缘的RTOS。从根本上说,Docker不是实时的,它假定许多底层操作系统服务的可用性。一个更好的RTOS运行时方法是高级字节码虚拟机。这样的虚拟机可以比Docker更轻更快。它们提供基于能力的安全沙箱,对底层操作系统服务的假设很少,同时,在前端支持多种编程语言。WebAssembly拥有广泛的行业支持和轻量级设计,似乎是复杂边缘应用的完美虚拟机运行时间。

WebAssembly的另一个有趣的方面是,WebAssembly程序通常可以像seL4本身一样被正式验证为正确的。这使得它们适合于像汽车操作系统这样的关键任务系统。

WasmEdge和seL4

seL4操作系统是一个经过正式验证、高度安全和实时的微内核操作系统。它现在越来越多地被用于自动驾驶汽车和无人机,其安全性和实时性能至关重要。seL4操作系统是一个微内核,不符合POSIX,这使得它在运行类似Docker的容器时特别具有挑战性。另一方面,WebAssembly可以抽象出操作系统的大部分内容,并为开发者提供一套统一的编程语言和SDK来工作。WasmEdge Runtime是一个高性能和开源的WebAssembly运行时,由CNCF主持。它在云原生基础设施中被用作微服务无服务器功能插件的运行时。除了标准的WebAssembly规格,WasmEdge支持与云原生用例相关的扩展API,如网络套接字基于Tensorflow的推理、数据库存储等。WasmEdge支持Rust和JavaScript作为前端语言,并可以作为插件或嵌入式函数嵌入到RustGo、Python和Node.js主机应用程序。与 "边缘容器 "用例最相关的是,WasmEdge是一个兼容OCI的运行时,可以由Docker工具和Kubernetes管理和协调。在这项工作中,我们为seL4和WasmEdge建立了一个WebAssembly管理代理。它允许WebAssembly字节码应用轻松地在seL4实时操作系统上部署和执行。

官方说,seL4只支持用C/C++编写的应用程序。通过WasmEdge Runtime,开发者现在可以使用任何WebAssembly语言来编写seL4 RTOS应用程序,包括Rust、Swift、AssemblyScript和JavaScript。这可能是对seL4开发者体验的一个重大改进。

整体设计

seL4微内核可以作为一个管理程序发挥作用。它可以在同一个硬件上并排启动一个seL4实时操作系统和一个Linux操作系统(称为客户操作系统)。Linux客体操作系统具有文件系统、网络、用户账户、shell和CLI的全套功能和工具,但它不是实时的。seL4方面是实时的,但没有头。我们的方法是在客人Linux中运行WasmEdge代理。我们可以上传并存储WasmEdge字节码文件在客座Linux中,然后使用代理热部署并使用安装在seL4中的WasmEdge运行器来执行字节码。该架构如下。

Containerized Runtime using seL4 microkernel and RTOS Architecture

这种代理和运行器的架构使我们能够将客座Linux的易用性与seL4的健壮性、安全性和实时性能结合起来。

这种设计提出了一种有趣的可能性。也许我们可以在客户操作系统中运行一个成熟的Kubernetes pod来管理和协调seL4上的WasmEdge应用程序。这也是团队积极研究的一个领域。

样品WebAssembly应用程序

WasmEdge可以在seL4上运行任何WebAssembly字节码应用程序。本演示中的WebAssembly应用样本是由C和Rust源代码编译而成。

  • nbody-c.wasm是一个用C语言对N体问题进行数值逼近的程序。然后,它从C语言编译成WebAssembly字节码。
  • hello.wasm是一个Rust程序,用来向控制台回传一个字符串。

为WasmEdge运行器打补丁的seL4

seL4的标准库并不支持WasmEdge runner。我们需要给这些库打补丁,以增加、开启或更新一些重要的功能。我们用这些补丁构建一个定制的seL4版本。

模拟器演示

构建脚本自动构建一个带有补丁的库、WasmEdge运行器、客户Linux操作系统(Ubuntu 20.04)和WasmEdge代理(称为wasmedge_emit)的seL4分发程序。

构建脚本需要一个安装了开发者工具的Ubuntu 20.04系统。关于系统所需的apt软件包的完整列表,请看这里

一旦定制的seL4发行版建成,我们可以在QEMU模拟器中运行它。我们可以登录到客户Linux操作系统的命令外壳,上传和保存WebAssembly字节码文件,然后运行wasmedge_emit来部署和运行seL4中的这些WebAssembly文件。该演示将引导你完成整个过程。你可以观看视频来了解它的运行情况!https://youtu.be/2Qu-TrtkspkGitHub行动日志显示了成功构建任务的控制台输出,而工件包含了构建结果。你可以简单地将构建工件下载到你自己的Ubuntu 20.04机器上,然后启动模拟器,在seL4上运行WebAssembly程序。

接下来是什么

在这篇文章中,我们演示了如何使用模拟器在seL4上管理和执行WebAssembly应用程序。下一步是在真实的硬件上运行WasmEdge应用程序。WasmEdge的主要特点之一是它是可扩展的。很容易从共享的本地库向WasmEdge添加主机功能API,这样WasmEdge WebAssembly字节码程序就可以访问硬件,如GPIO引脚、摄像头、USB连接器、I/O板和GPU。请继续关注seL4上WasmEdge的更多用例演示!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值