关于腾讯云:SuperEdge-使用WebAssembly扩展边缘计算场景

8次阅读

共计 4366 个字符,预计需要花费 11 分钟才能阅读完成。

作者

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),也会继续为宽广开发者发明充斥想象力且有限可能的边缘计算和调度平台。

对于咱们

更多对于云原生的案例和常识,可关注同名【腾讯云原生】公众号~

福利:

①公众号后盾回复【手册】,可取得《腾讯云原生路线图手册》&《腾讯云原生最佳实际》~

②公众号后盾回复【系列】,可取得《15 个系列 100+ 篇超实用云原生原创干货合集》,蕴含 Kubernetes 降本增效、K8s 性能优化实际、最佳实际等系列。

③公众号后盾回复【白皮书】,可取得《腾讯云容器平安白皮书》&《降本之源 - 云原生老本治理白皮书 v1.0》

④公众号后盾回复【光速入门】,可取得腾讯云专家 5 万字精髓教程,光速入门 Prometheus 和 Grafana。

⑤公众号后盾回复【精选集】,可取得腾讯 24 位腾讯云专家精彩演讲——4 万字《腾讯云技术实际精选集 2021》。

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

正文完
 0