10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

边缘上的容器化

  • 2021-11-26
  • 本文字数:2444 字

    阅读完需:约 8 分钟

边缘上的容器化

像 Docker 这样的应用容器是云原生增长的主要推动力。不过,尽管云原生开发范式已被证明是非常流行的,但是由于应用容器需要大量的计算资源,将云原生基础设施扩展到大型数据中心之外就变得困难了。


比如,Docker 不支持实时操作系统(real-time operating systems,RTOS),而只支持 POSIX 系统。在像智能工厂和智能汽车这样的边缘网络和设备上,行业生态系统和供应商网络决定了应用必须从多个独立的供应商“组合”。举例来说,一个典型的电动汽车有 100 多个厂商为汽车的不同部分编写软件组件。为汽车 OEM 提供一个安全、高效、实时的运行环境,对各供应商和厂商进行软件集成具有重要意义。现在已经有了一些在边缘实时操作系统上支持应用容器的尝试。


VxWorks 是商用实时操作系统,应用于飞机和航天器等关键任务系统。VxWorks 容器是最近的一项倡议(2021 年),它支持在 VxWorks 实时操作系统上遵循 OCI 的轻量级容器。但是,Docker 方法并不适用于边缘的实时操作系统。


从根本上说,Docker 并不具有实时性,因为它假定了很多底层操作系统服务的可用性。对于实时操作系统来说,一个更好的运行时方式是高级字节码虚拟机。这样的虚拟机比 Docker 更轻、更快。它们提供了基于功能的安全沙箱,几乎不考虑底层操作系统服务,同时,在前端支持多种编程语言。WebAssembly 有着广泛的行业支持和轻量级设计,这似乎就是复杂边缘应用的完美虚拟机运行时间。


WebAssembly 的另一个有趣之处在于 WebAssembly 程序的正确性通常可以与 seL4 本身一样得到正式验证。因此,它适用于关键人物系统,如汽车操作系统。

WasmEdge 和 seL4

seL4 操作系统是一种经过正式验证的高安全性和实时性的微内核操作系统。它目前越来越多地用于自动驾驶汽车和无人机,在这些地方,安全性和实时性非常重要。seL4 操作系统是一种不遵循 POSIX 的微内核,因此对于运行类似 Docker 的容器尤其具有挑战性。而 WebAssembly 则可以对操作系统进行很大程度的抽象化,并向开发者提供一套统一的编程语言和 SDK。


WasmEdge Runtime 是 CNCF 托管的高性能的开源 WebAssembly 运行时。将其作为 微服务无服务器函数插件的运行时使用在云原生基础设施中。除标准的 WebAssembly 规范外,WasmEdge 支持扩展 API,这些 API 与云原生用例相关,比如网络套接字基于 TensorFlow 的推理、数据库存储等等。WasmEdge 支持 Rust 和 JavaScript 作为前端语言,可以作为插件或者嵌入式函数嵌入到 RustGo、Python 和 Node.js 主机应用中。


与“边缘容器”用例最相关的是,WasmEdge 是一种兼容 OCI 的运行时,Docker 工具和 Kubernetes 可以对其进行管理和协调。在这项工作中,我们构建了一个 WebAssembly 管理代理,用于 seL4 和 WasmEdge。可以让 WebAssembly 字节码应用在 seL4 实时操作系统上部署和执行。


官方说法是,seL4 只支持用 c/c + + 编写的应用程序。有了 WasmEdge Runtime,开发者现在可以使用任何 WebAssembly 语言来编写 seL4 实时操作系统应用程序,包括 Rust、 Swift、 AssemblyScript 和 JavaScript。这可能是 seL4 开发者体验的一个重大改进。

总体设计

seL4 微内核可充当虚拟机监控器(Hyperviser)。它可以在相同的硬件上并行启动 seL4 实时操作系统和一个 Linux 操作系统(称为客户操作系统)。Linux 客户操作系统具有完整的文件系统、网络、用户账户、shell 和 CLI 的功能和工具,但是它并非实时的。seL4 方面是实时的,但它是无头(headless)的。我们的方法是在客户 Linux 中运行 WasmEdge 代理。在客户 Linux 中,我们可以上传并存储 WasmEdge 字节码文件,然后使用代理热部署并使用安装在 seL4 中的 WasmEdge 运行器来执行字节码。该架构如下所示:


这种代理和运行器架构允许我们将客户 Linux 的易用性与 seL4 的健壮性、安全性和实时性能相结合。


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

示例 WebAssembly 应用

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


  • nbody-c.wasm 是一个用 C 语言对 N 体问题进行数值逼近的程序。然后,它从 C 语言编译成 WebAssembly 字节码。

  • hello.wasm 是一个 Rust 程序,用于返回字符串到控制台。

修补用于 wasme/dge 运行器的 seL4

seL4 中的标准库不支持 WasmEdge 运行器开箱即用。为了增加、开启或更新一些重要特性,我们需要对这些库进行修补。使用这些补丁构建了定制的 seL4 版本。


模拟器演示

构建脚本 实现了构建 seL4 发行版的自动化,其中包括补丁库、 WasmEdge 运行程序、一个客户 Linux 操作系统(Ubuntu 20.04)和 WasmEdge 代理(称为 WasmEdge_emit)。


构建脚本要求 Ubuntu 20.04 系统安装有开发者工具。点击此处可以看到这个系统需要的 apt 软件包的完整列表。


完成了定制的 seL4 发行版之后,我们就可以在 QEMU 模拟器中运行它了。在 seL4 中,登录到客户 Linux 操作系统的命令 shell,上传并保存 WebAssembly 字节码文件,然后运行 wasmedge_emit 来部署并运行这些 WebAssembly 文件。该演示会带你走完全程。你可以观看视频,了解它的操作!GitHub Action 日志显示了成功构建任务的控制台输出,而构件包含了构建结果。你只需下载构建到你自己的 Ubuntu 20.04 机器上的构件,然后启动模拟器,运行 seL4 上的 WebAssembly 程序。

未来计划

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


原文链接:


https://www.cncf.io/blog/2021/11/11/containerization-on-the-edge/

2021-11-26 09:522670

评论 1 条评论

发布
用户头像
这一股浓浓的机翻味
2021-12-29 18:43
回复
没有更多了
发现更多内容

Web开发小妙招:巧用ThreadLocal规避层层传值

华为云开发者联盟

Java 前端 web开发

企业数字化转型,低代码是“趋势”还是“陷阱”?

云智慧AIOps社区

大前端 低代码 云开发

枚举通用接口&枚举使用规范

靠谱的程序员

枚举 企业应用 企业级应用

【刷题记录】2. 两数相加

WangNing

7月月更

牛客java选择题每日打卡Day8

京与旧铺

7月月更

offer如何选择该考虑哪些因素

KEY.L

7月月更

ServiceMesh主要解决的三大痛点

阿泽🧸

Service Mesh 7月月更

企业中台建设新路径——低代码平台

力软低代码开发平台

阿里云中间件开源往事

阿里巴巴中间件

阿里云 开源 中间件

小程序能运行在自有App中,且实现直播和连麦?

Speedoooo

小程序 直播 移动开发 小程序容器 连麦

抖音或将推出独立种草社区平台:会不会成为第二个小红书

石头IT视角

SchedulX V1.4.0及SaaS版发布,免费体验降本增效高级功能!

星汉未来

DevOps 运维 k8s IT FinOps

“去虚向实”大潮下,百度智能云向实而生

科技新知

leetcode 53. Maximum Subarray 最大子数组和(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

当 Knative 遇见 WebAssembly

阿里巴巴中间件

阿里云 容器 云原生 Knative WebAssenbly

从0开始创建小程序

小恺

7月月更

【写给初发论文的人】撰写综述性科技论文常见问题

左手の明天

论文阅读 论文 论文写作 研究论文 论文撰写

架构实战营模块 6 作业

Roy

架构实战营

云原生混部最后一道防线:节点水位线设计

阿里巴巴中间件

阿里云 云原生 中间件 混部

张平安:加快云上数字创新,共建产业智慧生态

华为云开发者联盟

云计算 后端 SaaS 华为云

java零基础入门-Scanner类

喵手

Java’ 7月月更

华为小米互“抄作业”

科技新知

1500万员工轻松管理,云原生数据库GaussDB让HR办公更高效

华为云开发者联盟

数据库 后端

从解析HTML开始,破解页面渲染时间长难题

华为云开发者联盟

html 前端 web开发 网页

Flutter3.0了,小程序不止于移动应用跨端运行

Speedoooo

flutter 小程序 移动开发 小程序容器 跨端运行

阿里云易立:云原生如何破解企业降本提效难题?

阿里巴巴中间件

阿里云 架构 云原生

HAVE FUN | “飞船计划”活动最新进展

SOFAStack

微服务架构 开源软件 新手引导

Linux 下的传统 IPC 通信原理

北洋

Andriod 7月月更

组织实战攻防演练的5个阶段

穿过生命散发芬芳

攻防演练 7月月更

解密函数计算异步任务能力之「任务的状态及生命周期管理」

阿里巴巴中间件

阿里云 中间件 异步 函数计算

用头像模仿天狗食月

急需上岸的小谢

7月月更

边缘上的容器化_服务革新_Second State、FutureWei_InfoQ精选文章