Sealos 云操作系统一键集成 runwasi,解锁 Wasm 的无限潜力
WebAssembly (通常缩写为 Wasm) 是一种为网络浏览器设计的低级编程语言。它旨在提供一种比传统的 JavaScript 更快、更高效的方式来执行代码,以弥补 JavaScript 在性能方面的不足。通过使用二进制格式,WebAssembly 能够提供比传统 JavaScript 更快的解析和执行速度。
Wasm 扩展到云原生领域
然而但随着时间的发展,它的应用范围已经扩展到了云原生领域。相比于容器和虚拟机,WebAssembly 具有以下优势:
- 性能和安全:随着云原生生态系统的发展,大家对于高性能和安全的需求日益增长。WebAssembly 以其快速、安全、沙箱化的特点,成为了一个吸引人的选择。
- 跨平台特性:WebAssembly 的跨平台特性使得它非常适合云原生环境,因为它可以在任何支持 Wasm 运行时的环境中运行,与底层硬件或操作系统均无关。
- 轻量化:相比于传统的虚拟机和容器技术,Wasm 提供了更轻量级的解决方案,这对于需要快速扩展和缩放的云原生应用尤为重要,例如函数计算场景。
- 微服务和边缘计算:Wasm 适合被用于微服务架构和边缘计算场景,因为它能够提供快速的启动时间和更高的资源利用效率。
随着技术的成熟和社区的发展,已经有越来越多的工具和平台被开发出来以支持在云原生环境中使用 WebAssembly,runwasi 便是其中之一。它是一个 Containerd 插件,用来将 Wasm 运行时整合到 Containerd 中,以支持使用 Containerd 来创建和管理 Wasm 应用。
本文将会给大家介绍如何在 Sealos 云操作系统中快速集成 runwasi,并使用 runwasi 来运行 Wasm 应用。
️ 注意:runwasi 目前还是 Alpha 版,不建议在生产环境中使用。
runwasi 介绍
先来看一眼 runwasi 骚气的 Logo:

在理解 runwasi 之前,我们先来明确几个概念:
WebAssembly (Wasm) 运行时
- WebAssembly 基础:WebAssembly 提供了一个沙箱环境,允许在其中以接近原生性能执行预编译的二进制代码。这些代码模块独立于平台,能够在任何支持 Wasm 的环境中运行。
- Wasm 运行时:这是一个软件栈,用于加载、验证、编译,并最终执行 Wasm 二进制文件。例如,Wasmtime 或 Wasmer 就是这样的运行时。
Containerd 架构
Containerd 是一个达到工业标准的容器运行时,负责容器的创建、启动、停止和管理,它的架构被设计为模块化,可以通过插件来扩展其功能。这包括快照插件、运行时插件等。runwasi 就是其中一个快照插件。
runwasi 的工作原理
- 作为插件:
runwasi作为一个Containerd快照插件存在,使得 Wasm 应用能够作为容器运行。 - 加载 Wasm 应用:当
Containerd请求启动一个容器时,runwasi插件负责加载 Wasm 应用。 - Wasm 运行时集成:
runwasi使用一个 Wasm 运行时(如 Wasmtime)来执行 Wasm 应用。这意味着它会处理 Wasm 二进制文件的加载、验证和执行。 - 容器化的 Wasm 应用:通过
runwasi,Wasm 应用在Containerd的管理下以类似于传统容器应用的方式运行,但实际上是在 Wasm 运行时中执行。
Sealos 集成 runwasi
下面我们来演示如何在 Sealos 云操作系统中集成 runwasi,步骤非常简单,只需要一条命令即可。
Sealos 提供了 3 个不同的集群镜像:labring/containerd-shim-wasmtime、labring/containerd-shim-wasmedge 和 labring/containerd-shim-wasmer,分别对应三个不同的 Wasm 运行时:WasmEdge、Wasmtime 和 Wasmer。
以 Wasmtime 运行时为例,只需执行下面这条命令就可以将 runwasi 集成到 Sealos 集群中:
$ sealos run docker.io/labring/containerd-shim-wasmtime:v0.3.0
然后使用 Rust 编写一个 Wasm 应用:
// hello.rs
use std::thread::sleep;
fn main() {
loop {
sleep(std::time::Duration::from_secs(5));
println!("{}", "This is from a main function from a wasm module");
}
}
编译并运行:
$ rustup target add wasm32-wasi
$ rustc quick-start.rs --target wasm32-wasi
$ wasmtime quick-start.wasm
This is from a main function from a wasm module
这个仓库里已经编译好了 wasm 文件:https://github.com/labring-actions/wasi-image/tree/main/applications/quick-start/main
你可以克隆该仓库,进入 applications/quick-start/main,然后执行以下命令构建 wasi 镜像并推送到 Sealos 本地镜像仓库:
$ sealos build --platform "wasi/wasm" -t sealos.hub:5000/quick-start:latest .
$ sealos push sealos.hub:5000/quick-start:latest
编写一个 Job 配置清单:
# wasm-demo.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: wasm-demo
spec:
template:
metadata:
labels:
app.kubernetes.io/name: wasm-demo
spec:
containers:
- name: wasm-demo
image: sealos.hub:5000/quick-start:latest
runtimeClassName: runwasi-wasmtime # 修改成对应的 runtime 名字
restartPolicy: Never
创建 Job:
$ kubectl apply -f wasm-demo.yaml
查看 demo 日志:
$ kubectl logs jobs/wasm
This is from a main function from a wasm module
Sealos 云操作系统一键集成 runwasi,解锁 Wasm 的无限潜力的更多相关文章
- iNeuOS 物联网云操作系统2.0发布,集成设备容器、视图建模、机器学习三大模块
目 录 1. 概述... 2 2. 使命及目标... 3 3. 系统框架... 4 4. 设备容器(iNeuKernel)... 4 5. ...
- iNeuOS云操作系统,.NET Core全系打造
iNeuOS云操作系统,.NET Core全系打造 目录 一.演示地址... 2 二.技术体系... 2 三.iNeuOS整体介绍... 2 四.iNeuView概述... 3 五.iNeuView操 ...
- 中文企业云操作系统 CecOS
CecOS介绍 CecOS(原中文企业云操作系统.第一个版本基于oVirt 3.0,后续在此基础上不断升级迭代拓展至今,已形成基于基础底层和应用功能拓展集成在内的10款产品和四大平台),旨在通过先进的 ...
- 使用cocoaPods一键集成第三方登录(新浪微博,qq,微信)
第三方登录是现在app很常用的功能,而这个功能我已经写过两三次了...每次都写大同小异的代码真的是很痛苦,而且每次都要根据说明去添加那些依赖库,配置linkFlag什么的,完全是体力活,所以一直想把这 ...
- 泛微云桥e-birdge之金蝶云之家集成配置手册
最近在配置金蝶云之家与泛微ecology的打通,没有看官方文档,直接配置,一直配置不通,看了官方文档后知道了少配置参数了,转载一下,省得四处去找了. 泛微云桥e-birdge之金蝶云之家集成配置手册 ...
- eplise一键集成工具
因为要做平台,后台的内容就由我负责,目前想让测试人员 在本地使用eplise可以进行脚本开发,但是很多人都死在了搭建环境的道路上,那我就做了一键集成,点击就可以把所需要的配置项进行配置,总结:实际就 ...
- [转帖]“腾百万”之后,腾讯的云操作系统VStation单集群调度达10万台
“腾百万”之后,腾讯的云操作系统VStation单集群调度达10万台 https://www.leiphone.com/news/201909/4BsKCJtvvUCEb66c.html 腾讯有超过1 ...
- 什么是云效持续集成?如何关联Jenkins进行持续集成?
什么是云效持续集成?如何关联Jenkins进行持续集成?云效流水线 Flow是一款企业级.自动化的研发交付流水线, 提供灵活易用的持续集成.持续验证. 持续发布功能,帮助企业高质量.高效率的交付业务. ...
- SJGestureUnlock快速集成手势解锁
前言:如果页面显示不完整或图片看不了还请移步:简书 SJGestureUnlock.h 常用自定义属性 @interface SJGestureUnlock : UIView @property (n ...
- iOS开发融云即时通讯集成详细步骤
1.融云即时通讯iOS SDK下载地址 http://rongcloud.cn/downloads 选择iOS SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注 ...
随机推荐
- 部署 rsyslog 日志服务
ubuntu 服务端 + Centos 客户端 参考文档: ubuntu 20.04 搭建 rsyslog 服务器 CentOS7下搭建Rsyslog Server记录远程主机系统日志
- 记录一次线上服务CPU飙高问题
2023.07.20 20:01:38线上一个服务发生了CPU过高的告警, 看告警信息当前的CPU使用率已经达到了82.65%,问题已经很严重,赶紧开始排查起来.来复盘下如何排查这类问题, 一.排查方 ...
- python连接 Basler pylon相机遇到的问题
今天使用下图程序去连接相机 以下是摄像头IP参数 电脑IP参数 在确认电脑能够ping通相机的情况下 以及检查专用软件能否访问之后 依然遇到了以下错误 经过了多番调试之后发现即使能够ping通,子网掩 ...
- AcWing 第 92 场周赛 C题 4866. 最大数量 题解
原题链接 链表 + 并查集乱搞做法: 思路 首先可以发现,想要让度数尽量大,那我们应该构造成菊花图,即下图所示: 对于每个需求,我们可以知道,如果之前他们没有连在一起,那我们一定得把他们连在一起,该过 ...
- [docker]安装常见数据库
前言 本文使用docker安装常见数据库大部分没配置什么参数,只是基本的安装. 不只是数据库,还有elasticsearch.rabbitmq等和数据相关的服务. docker 版本: 18.06.3 ...
- 何时使用Elasticsearch而不是MySql
MySQL 和 Elasticsearch 是两种不同的数据管理系统,它们各有优劣,适用于不同的场景.本文将从以下几个方面对它们进行比较和分析: 数据模型 查询语言 索引和搜索 分布式和高可用 性能和 ...
- AVR汇编(三):寻址方式
AVR汇编(三):寻址方式 AVR具有多种寻址方式,在介绍具体的汇编指令之前,有必要对它们做一定了解. 前面介绍过,AVR将内存空间分为多个部分:寄存器堆.I/O空间.数据空间.程序空间.这些空间支持 ...
- 微服务集成RabbitMq保姆级教程
本文通过简单的示例代码和说明,让读者能够了解微服务如何集成RabbitMq 之前的教程 https://www.cnblogs.com/leafstar/p/17641358.html 在这里我将介绍 ...
- 设置服务账号Service Accounts(sa)的token不挂载到pod
目录 一.系统环境 二.前言 三.Service Accounts(sa)简介 四.在pod里设置sa的token不挂载到pod 五.在sa里设置sa对应的token不挂载到pod上 六.总结 一.系 ...
- arthas的安装及使用
arthas的安装及使用 官方文档 安装 #1.下载 https://arthas.aliyun.com/download/latest_version?mirror=aliyun #2.将下载文件上 ...