SuperEdge: 使用WebAssembly扩展边缘计算场景
2022/3/17 8:27:38
本文主要是介绍SuperEdge: 使用WebAssembly扩展边缘计算场景,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
作者
SuperEdge 开发者团队
概要
SuperEdge 是 一个开源的分布式边缘计算容器管理系统,用于管理多个云边区域中的计算资源和容器应用。
在当前架构中,这些资源和应用能够作为一个 Kubernetes 原生的资源进行管理。
然而在某些情况下,边缘设备通常需要一些更加轻量、性能更好的运行时。也需要减少以 GB 为单位的容器镜像,将容器的启动时间提升到到秒级甚至毫秒级,而基于虚拟机堆栈二进制指令格式的 WebAssembly 可以更好地处理这种情况。
WasmEdge 是一个轻量级、高性能和可扩展的 WebAssembly 运行时,适用于云原生、边缘和去中心化应用程序。它是当今发展最快的 Wasm 运行时,社区活跃度也相当的高。
运行简图
Superedge 最近支持了 Containerd,在边缘节点我们将让 Containerd 使用 crun 来支持 WasmEdge 运行时。也就是说,按照这些步骤后,你的边缘节点可以同时支持 OCI 容器和 WASM 容器。
安装 SuperEdge 边缘 K8s 集群
- 下载安装包
arch=amd64 version=v0.7.0 && rm -rf edgeadm-linux-* && wget https://superedge-1253687700.cos.ap-guangzhou.myqcloud.com/$version/$arch/edgeadm-linux-containerd-$arch-$version.tgz && tar -xzvf edgeadm-linux-* && cd edgeadm-linux-$arch-$version && ./edgeadm
注意选择机器架构对应的安装包,这个安装包默认带 Containerd 容器运行时。
- 创建边缘集群
./edgeadm init --kubernetes-version=1.18.2 --image-repository superedge.tencentcloudcr.com/superedge --service-cidr=10.96.0.0/12 --pod-network-cidr=192.168.0.0/16 --install-pkg-path ./kube-linux-*.tar.gz --apiserver-cert-extra-sans=<Master Public IP> --apiserver-advertise-address=<Master Intranet IP> --enable-edge=true --runtime=containerd
注意带 --runtime=containerd
参数,表示使用 Containerd 容器运行时, --runtime=dockerd
表示使用 Docker容器运行时。
- Join 边缘节点
./edgeadm join <Master Public/Intranet IP Or Domain>:Port --token xxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxx --install-pkg-path ./kube-linux-*.tar.gz --enable-edge=true --runtime=containerd
详细可查看 SuperEdge 官方文档一键安装原生的k8s集群和边缘K8s集群
安装 WasmEdge 运行环境
安装 WasmEdge
在边缘节点上使用脚本便可很轻松安装 WasmEdge,在边缘节点执行如下脚本:
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash
安装 crun
crun 项目内置了 WasmEdge 支持,但是默认的 crun release 没有把 wasmedge 模块编译进去,目前需要手动从源代码构建支持 WasmEdge 的 crun 二进制。
首先,确保在您的 Ubuntu 20.04 上安装了 crun 依赖项。对于其他 Linux 发行版请参阅 crun 的 README。
sudo apt update sudo apt install -y make git gcc build-essential pkgconf libtool \ libsystemd-dev libprotobuf-c-dev libcap-dev libseccomp-dev libyajl-dev \ go-md2man libtool autoconf python3 automake
接下来,编译和安装 crun:
git clone https://github.com/containers/crun cd crun ./autogen.sh ./configure --with-wasmedge make sudo make install
配置 Containerd 使用 crun 运行时
这里我们给出需要配置 Containerd 文件 /etc/containerd/config.toml
原始配置和配置之后的差异,用户可以按对比进行修改。
cat > config.toml.diff << EOF --- /etc/containerd/config.toml 2022-02-14 15:05:40.061562127 +0800 +++ /etc/containerd/config.toml.crun 2022-02-14 15:03:35.846052853 +0800 @@ -24,17 +24,23 @@ max_concurrent_downloads = 10 [plugins.cri.containerd] - default_runtime_name = "runc" - [plugins.cri.containerd.runtimes.runc] + default_runtime_name = "crun" + [plugins.cri.containerd.runtimes.crun] runtime_type = "io.containerd.runc.v2" - pod_annotations = [] + pod_annotations = ["*.wasm.*", "wasm.*", "module.wasm.image/*", "*.module.wasm.image", "module.wasm.image/variant.*"] container_annotations = [] privileged_without_host_devices = false - [plugins.cri.containerd.runtimes.runc.options] - BinaryName = "runc" + [plugins.cri.containerd.runtimes.crun.options] + BinaryName = "crun" # cni [plugins.cri.cni] bin_dir = "/opt/cni/bin" conf_dir = "/etc/cni/net.d" conf_template = "" + [plugins."io.containerd.runtime.v1.linux"] + no_shim = false + runtime = "crun" + runtime_root = "" + shim = "containerd-shim" + shim_debug = false EOF
最后重启下 Containerd 容器运行时
sudo patch -d/ -p0 < config.toml.diff sudo systemctl restart containerd
创建 WASM 应用
我们将使用已经在 dockerhub 上的一个wasm示例镜像wasm-wasi-example。这里 wasm 镜像需要在镜像的Manfest文件中增加一个"module.wasm.image/variant":"compat"
的 Annotation 让运行时区分出 wasm 和操作系统运行时,因此 docker build 功能是没法满足的,可以使用buildah来构建 wasm 镜像并 push 到任意 OCI 标准的镜像仓库中。
cat > wasmedge-app.yaml << EOF apiVersion: v1 kind: Pod metadata: annotations: module.wasm.image/variant: compat labels: run: wasi-demo name: wasi-demo spec: containers: - args: - /wasi_example_main.wasm - "50000000" image: hydai/wasm-wasi-example:with-wasm-annotation imagePullPolicy: IfNotPresent name: wasi-demo hostNetwork: true restartPolicy: Never EOF kubectl create -f wasmedge-app.yaml
可用 kubectl logs wasi-demo
看到这个程序输出如下内容:
Random number: -1643170076 Random bytes: [15, 223, ... 106, 51] Printed from wasi: This is from a main function This is from a main function The env vars are as follows. The args are as follows. /wasi_example_main.wasm 50000000 File content is This is in a file
未来
随着更广泛的边缘设备接入,更多的边缘场景覆盖的要求,SuperEdge 在边缘计算运行时不仅支持传统的 docker 和 containerd 等,现在还可以支持各种 WebAssembly 运行时(WasmEdge),也会持续为广大开发者创造充满想象力且无限可能的边缘计算和调度平台。
这篇关于SuperEdge: 使用WebAssembly扩展边缘计算场景的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?