登录
立即咨询

语言选择

谐云 谐云

谐云作为国内企业级Paas服务商领头羊

以“底层核心技术+超前发展理念”

致力于为企业数字化转型提供最佳解决方案

更轻量!谐云边缘计算贡献再获CNCF官方点赞
2022年02月18日

近日,CNCF(Cloud Native Computing Foundation)官方网站发表了由谐云边缘计算研发实习生晋晨和来自 Second State 的Vivian Hu共同撰写的文章—《使用 OpenYurt 管理 WasmEdge|轻量级边缘计算方案》。

文章介绍了边缘计算框架 OpenYurt 在边端如何使用轻量级runtime WasmEdge。其中,谐云边缘计算研发实习生晋晨主要负责实验操作部分,包括实验记录工作。实际场景中,docker在边缘资源受限场景下作为runtime过重,在本实验中,改用containerd作为high level runtime,修改对应的containerd配置,使得containerd默认的low level runtime 由runc转crun,最后在OpenYurt集群上成功运行基于WebAssembly的demo app。最终,通过OpenYurt和WasmEdge的集成,拓宽在边缘计算边端资源受限场景下的使用。晋晨表示:“本文只是双方合作的一次前期尝试,后续将对于具体的场景开发更多合作的可能。”

 

谐云边缘计算解决方案,通过EdgeStack智能边缘计算平台保障稳定性,EdgeBox边缘一体机确保边缘安全。其中,EdgeStack®智能边缘计算平台基于轻量级容器编排框架云边端协同技术,打造“云+边缘+端”的云边端协同架构,将容器云计算能力下沉至边缘节点,可支撑百万级边缘节点和设备接入。智能边缘计算平台同时支持KubeEdge和OpenYurt,通过轻量级边缘组件与云端协同完成海量数据边缘处理;支持边缘应用和模型从云端的自动下发、更新和运维,大幅降低边缘侧应用和数据运维管理的压力。

 

 

HC-EdgeStack® 边缘计算平台架构图

使用 OpenYurt 管理 WasmEdge | 轻量级边缘计算方案

作者:晋晨(OpenYurt)Vivian Hu(WasmEdge)

 

边缘计算[1] 是一种分布式应用架构,将计算资源(例如 CPU 和存储)放置在靠近数据源的位置。通过这种方式,为各种应用程序提供了低延迟、高性能和强大的安全性。然而,与数据中心的云计算类似,边缘计算也面临着跨异构设备和网络的工作负载分发、管理和编排等挑战。为了应对以上云计算中的这些挑战,很多开发者会选择基于容器的解决方案。因此,开发者们现在正在将 Kubernetes (K8s) 和容器等解决方案引入边缘计算。然而遗憾的是,K8s 和 Linux 容器都不是为边缘计算而设计的。边缘上标准 K8s 的潜在问题包括:

·边缘设备的计算、存储和网络资源有限。在边缘设备上运行完整的 K8s 节点通常过于耗费资源。

·K8s 只能管理具有公共 IP 地址的设备。然而,许多边缘设备不会暴露其公共 IP。

·边缘设备经常离线,而标准的 K8s 要求其 pod 始终处于连接状态。

 

边缘设备通常通过非 TCP 网络连接,并且需要专门的网络接口与它们的 K8s 管理器进行通信。

 

因此,开发者为边缘计算创建了专门的 Kubernetes 发行版本。一个领先的为边缘优化的 K8s 发行版本是 OpenYurt[2]。OpenYurt 最初由阿里巴巴创建,现在是 CNCF 的沙箱项目。OpenYurt 是一个开放平台,囊括了上游 Kubernetes 强大的编排能力。因此,用户可以使用相同的上游 Kubernetes API 交付、管理和监控边缘工作负载。

即便使用像 OpenYurt 这样的为边缘优化了的 K8s 发行版,标准 Linux 容器仍然过于笨重,无法在小型设备上运行边缘工作负载。一个典型的 Linux 容器镜像占用的空间通常以 GB 为单位,并且启动一个完整的 CPU 需要几秒钟。考虑到典型的边缘应用程序通常较精简,Linux 容器在资源受限的设备上占用了过多的存储、CPU 和电池资源。此外,Linux 容器应用程序在边缘设备上不可跨平台,且不安全。对于边缘容器化应用程序而言,符合 OCI 标准的,且兼容 k8s 的[3]轻量级 WebAssembly runtime, 比如 WasmEdge[4] ,相较于 Linux 容器[5]是更好的替代选项。WasmEdge 提供基于能力的安全沙箱,对底层操作系统服务做很少的假设,同时在前端支持多种编程语言[6]。除了 Linux、 macOS、 Windows, WasmEdge 甚至可以在实时操作系统(RTOS)上运行,像 Linux 基金会的 seL4[7]。

OpenYurt[8] 和 WasmEdge[9] 团队一起展示如何使用 OpenYurt 在一个边缘集群中管理 WasmEdge 应用。OpenYurt 和 WasmEdge 将终于把云原生的容器化的应用带入边缘计算了!让我们开始吧!

 

准备工作

OpenYurt 使用中心化 Kubernetes 控制面板来管理云服务器中的多个边缘节点。此外,它将上游 Kubernetes 扩展到边缘。在这个演示中,我们将设置两台机器。一个模拟的云节点称为 Master,另一个模拟的边缘节点称为 Node。这两个节点构成了最简单的 OpenYurt 集群,OpenYurt 组件在其中运行。首先,关闭 swap 分区

接下来,配置两个节点的文件 node/etc/hosts

然后,加载内核模块  br_netfilter,并调整内核参数。

最后,设置 rp-filter 值,将文件 /etc/sysctl.d/10-network-security.conf 中两个参数的值由 2 改为 1,且将 /proc/sys/net/ipv4/ip_forward 设置为 1。

 

安装 Containerd

使用下面命令行在边缘节点上安装 containerd 。

由于 crun 项目默认支持 WasmEdge,我们只需要为 runc 配置 containerd 配置即可。所以我们需要修改 /etc/containerd/config.toml 中的 runc 参数为 curn,添加 pod_annotation。

之后,重启 containerd 使配置生效。

 

安装 WasmEdge

使用下面的安装脚本,在 edge 节点上安装 WasmEdge。

 

安装并构建 crun

我们需要在 edge node 上构建一个支持 WasmEdge 的 crun 二进制文件。目前,最直接的方法是你自己从源代码开始构建 crun。首先请确保你在 Ubuntu 20.04  已经安装了 crun 的依赖项。如果你使用的是其他版本的 Linux,请参考官方文档[10]。

接下来,配置、构建、安装带有 WasmEdge 支持的 crun 二进制文件

 

安装 OpenYurt

现在,我们可以在 Edge 节点上安装 OpenYurt 来控制它下面的 containerd、crun 和 wasmedge 堆栈。构建 OpenYrut 集群最简单的方法是使用 OpenYurt 体验中心。你只需注册一个用于测试的帐户,然后就可以获得一个 OpenYurt 集群。接下来,你可以使用 yurtctl join 命令行来加入边缘节点。在此处[11]查看更多详细信息。目前,OpenYurt 体验中心提供的 OpenYurt 组件版本为 0.6.0(最新版),Kubernetes 版本为 1.20.11。

 

 

或者,你也可以根据下面的指南,从头开始构建 OpenYurt 集群。

 

设置一个 K8s 集群

这里我们使用 yurtctl convert 将 K8s 集群转换为 OpenYurt 集群,所以我们需要先搭建一个 K8s 集群。需要注意的一点,如果你使用 yurtctl init/join 来设置OpenYurt 集群并加入节点,你可以跳过这一步。

 

安装 yurtctl 工具

 

使用以下命令行安装 yurtctl 。yurtcli CLI 工具可以安装/卸载 OpenYurt 并将标准 Kubernetes 集群转换为 OpenYurt 集群。

 

安装 OpenYurt 各组件

注:需要将 -- yurtctl-servant-image="openyurt/yurtctl-servant:v0.5.0" 改成 --node-servant-image="openyurt/node-servant:latest"

 

运行一个简单的 WebAssembly app

接下来,让我们通过 Kubernetes 集群作为 pod 中的容器运行 WebAssembly 程序。本节将从 Docker hub 拉取基于 WebAssembly 的容器镜像开始。如果你想知道如何编译、打包 WebAssembly 程序并将其作为容器镜像发布到 Docker hub,请参阅 WasmEdge Book[12]。

从 master 节点的另一个终端窗口输入以下命令,然后开始使用集群。

因为 kubectl 1.18.9 没有 annotations 参数,所以我们在这里需要调整命令行。如果你使用的是 OpenYurt Experience Center,其默认版本为 OpenYurt 0.6.0 和 Kubernetes 1.20.11,请直接参阅 WasmEdge Book 中的 Kubernetes 部分[13]来运行 wasm 应用程序。

容器化应用程序的输出被打印到控制台。所有 Kubernetes 版本都是一样的。

现在,你可以通过 Kubernetes 命令行查看 pod 状态。

你可以在日志中看到从调度到运行 WebAssembly 工作负载的事件。

  

这样完成了。接下来,你可以尝试使用 OpenYurt 管理自己的 WasmEdge 应用。

未来可期

WasmEdge[14] 和 OpenYurt[15] 共同将 Kubernetes 的全部优势引入到了边缘计算。以上的 demo 演示了一个非常简单的使用场景,只是触及了其中巨大潜力和前景的一角。请在 GitHub 上关注这两个项目,以了解我们合作的最新信息。同时,如果你有从此技术路径中受益的应用,我们也很乐意聆听!

WasmEdge GitHub repo: https://github.com/WasmEdge/WasmEdge[16]

OpenYurt GitHub repo: https://github.com/openyurtio/openyurt[17]

 

参考资料

[1]  边缘计算: https://en.wikipedia.org/wiki/Edge_computing
[2]  OpenYurt: https://openyurt.io/
[3]  OCI 标准的,且兼容 k8s 的: https://wasmedge.org/book/en/kubernetes.html
[4]  WasmEdge: https://wasmedge.org/
[5]  相较于 Linux 容器: https://wasmedge.org/wasm_linux_container/
[6]  多种编程语言: https://wasmedge.org/book/en/dev.html
[7]  seL4: https://wasmedge.org/book/en/os/sel4.html
[8]  OpenYurt: https://github.com/openyurtio/openyurt
[9]  WasmEdge: https://github.com/WasmEdge/WasmEdge
[10]  官方文档: https://github.com/containers/crun#readme
[11]  此处: https://openyurt.io/docs/installation/openyurt-experience-center/overview/
[12]WasmEdge Book: https://wasmedge.org/book/en/

kubernetes/demo/wasi.html
[13]Kubernetes部分: https://wasmedge.org/book/en/

kubernetes/kubernetes.html

[14]  WasmEdge: https://github.com/WasmEdge/WasmEdge
[15]  OpenYurt: https://github.com/openyurtio/openyurt
[16] https://github.com/WasmEdge/WasmEdge: https://github.com/WasmEdge/WasmEdge
[17]  https://github.com/openyurtio/openyurt: https://github.com/openyurtio/openyurt

关于 WasmEdge

WasmEdge 是轻量级、安全、高性能、实时的软件容器与运行环境。目前是 CNCF 沙箱项目。WasmEdge 被应用在 SaaS、云原生,service mesh、边缘计算、汽车等领域。

申请合作咨询
您可以通过此表单填写您的合作意向,我们将会尽快与您取得联系!
或拨打电话0571-87607309
*姓名:
*手机:
*邮箱:
备注:
备注:
登录
登录
注册账号 忘记密码
注册
{{ code.btn }}
注册
立即登录 忘记密码?
忘记密码
{{ code.btn }}
确定
立即登录 忘记密码?
立即咨询