栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

OpenYurt Member晋晨:使用OpenYurt管理WebAssembly

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OpenYurt Member晋晨:使用OpenYurt管理WebAssembly

嘉宾 | 晋晨   整理 | 张润泽

出品 | CSDN云原生

2022年4月28日,在CSDN云原生系列在线峰会第3期“WebAssembly峰会”上,OpenYurt Member晋晨结合自己的使用经验,分享了如何使用OpenYurt管理WebAssembly。

 戳观看晋晨分享视频

云原生探索新边界,OpenYurt 实现“云边端一体化”!

OpenYurt 诞生背景

OpenYurt 社区的口号是“Extending your Native Kubernetes to Edge”。但从更高维度来看,“Kubernetes”和 “Edge”其实就是云原生和边缘计算。那么云原生的定义是什么?

根据CNCF官网上的定义,云原生是有利于各组织在公有云、私有云和混合云等新型动态环境中构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术,工程师能够轻松地对系统做出频繁和可预测性的重大变更。

而边缘计算,是一种分布式计算架构,将应用、数据与服务的运算,由网络中心节点,移往网络逻辑上的边缘节点来处理。

至于Kubernetes在整个云原生系统中的定位,正如Linux、Windows在单机上的架构一样,Kubernetes其实是云原生体系下的一种操作系统。根据CNCF Cloud NativeSurvey在2020年的调查显示,有55%的受访者已经在生产中使用容器来运行他们的应用程序。

上面这张图展示的是Kubernetes的架构。Kubernetes向下是对资源的调度和编排,从而屏蔽了底层的基础设施和差异。同时,向上可以实现工作负载的自动化。

云原生和边缘计算融合有哪些困难?可以简单总结为四个方面:

  • 边缘计算规模和业务复杂。原生的Kubernetes很难适应边缘计算的场景。

  • 云边网络连接不可靠。边缘节点和云中心通过公网进行连接,而由于公网的不稳定性,导致了对于业务的不稳定性

  • 云边端运维协同难度较大。kubectl logs和kubectl exec无法在边缘场景下正常使用。

  • 异构资源支持困难。系统可能是 Linux、Windows,架构也可能是 AMD64、ARM、ARM64 等等,从而给边缘标准化支持带来巨大挑战。

总的来说,OpenYurt 诞生在云原生探索新边界的时代,提出了“云边端一体化”的概念,主要分为三个层次:

  • 云上。云端提供标准化的接口、管控能力,或者是标准的云服务和云资源的接入能力,在其中也能够看到 Kubernetes 的身影。

  • 边缘侧。能够高效地管理处在整个边缘端的众多资源,其中包括在边缘端应用的效率问题,比如CDN、ENS。

  • 端设备。典型的场景是IoT产品,例如智慧楼宇智能停车设备、蓝牙设备、人脸识别设备等。

那么,OpenYurt是如何解决云原生和边缘计算融合困难问题的呢?

先了解一下OpenYurt 的云边架构。从上图可以看到,云上由各个组件组成,有 YurtHub、YurtControllerManger、YurtAppManager、YurtEdgeXManger、YurtTunnel Sever。云下的Edge端由YurtHub、YurtTunnel Agent等组件组成。针对上面四个难点,OpenYurt提出了不同的解决方案。

首先是单元化管理,实现了资源、应用、服务在本单元内闭环。

  • 在资源角度上,它根据地域将边缘站点资源进行划分,提出了节点池的概念。比如在杭州有一些边缘节点,可以将其一起纳管到同一个边缘节点池。同时,北京也有一些边缘节点,同样可以在北京建立一个节点池。

  • 在应用层面上,它设计了一整套应用部署模型,比如单元化部署、单元化DaemonSet、边缘Ingress等。

  • 在流量服务上,可以实现流量在本节点池内闭环访问。

其次是边缘节点、节点池的自愈。关于节点自愈,首先来看下YurtHub组件。它是边缘节点自愈能力的基础,其功能主要是缓存云端的数据,并提供给边缘节点。每当网络断开时,YurtHub就会发挥作用。通过边缘节点、节点池的自愈,OpenYurt可以轻松解决节点离线和节点重启对业务的影响,保证边缘业务持续、可靠地运行。当边缘网络恢复后,边缘业务的状态将与云端控制同步,并保持数据的一致性。

第三点是云边协同能力。它实现了在云端统一管理海量边缘资源及业务,主要提供能力的组件是YurtTunnel Sever和YurtTunnel Agent。从云上来看,OpenYurt 无缝融合了云上已有的能力,包括智能运维、日志、DevOps等,可以保证边缘资源和业务的少运维、高可用。同时,它借助云边端一体化的通道Yurttunnel Server/Agent,将大量云上的能力,包括中间件、安全、AI、存储及网络管理等能力下沉到边缘,减少常见云服务在边缘侧的自建成本,同时支持原生的Kubernetes运维能力。简单地说,其实就是kubectl logs以及kubectl exec。

第四点是无缝转化能力。可以简单理解为,Kubernetes和OpenYurt集群一键转换。目前,社区主要提供了三种方法:

  • YurtCluster Operator。它提供了一个声明式API,用户可以快速地通过设置配置文件,达到从Kubernetes到OpenYurt的集群转换。

  • Yurtctl init/join。init的功能是从零开始搭建一个Operator的集群。join是把边缘节点加入到OpenYurt集群中来。

  • Yurtctl convert/revert。它的功能与YurtClusterOperator类似,convert是把Kubernetes集群转化为OpenYurt的集群。而revert则恰好相反。下图所展示的即为convert的过程。

WebAssembly和WasmEdge

前面讲述了OpenYurt的基本情况,下面讲一讲WebAssembly以及WasmEdge。

众所周知,在云原生领域中,Kubernetes是容器编排和调度系统的事实标准。而作为容器技术风潮的引领者——Docker,一直是云原生领域的热门方向之一。下图中展示了Kubernetes如何一步步调用runC的过程。

目前,对于WebAssembly能否取代Docker一直争论不休。比如有争论,“云原生的下一步或从WebAssembly在边缘取代Docker开始”。根据WebAssembly官网的定义,WebAssembly简称WASM,是基于对量式虚拟级的一个二进制指令集,它被设计为编程语言的一个可执行编译目标,从而可以部署于客户端和服务端的Web应用程序。目前主流的浏览器都内嵌了WebAssembly的1.0版本。2019年3月,Docker联合创始人Solomon Hykes发了一条很有争议性的推特,主要内容是如果2008年WASM和 WASI已经存在了的话,他们就没有必要创立 Docker了。

之后他对此又进行了回复,主要内容是说 WASM真的会取代 Docker吗?当然是不可以,他畅想的愿景是在Linux容器、 Windows容器、Wasm容器以密切合作的形式运行在Docker中。但从目前的情况来看,把 Docker换成Kubernetes可能更合适一些。

那么他所说的 WASM 和 WASI是什么?WASM是一个二进制的文件。WASI全称是WebAssambly System Interface,其实就是一个系统接口,它实现了可移植性和安全性。可移植性指的是,在不同的系统中,同样的WASM二进制文件,能够支持将它转化为不同的系统调用。安全性指的是,在系统调用过程中对用户访问权限的控制,不能直接让第三方包直接访问系统资源。WASI作为一层软操作系统接口层,在系统调用前,实现了被WASM二进制文件所调用。

到2021年底,云原生基金会CNCF已经接受了至少三个WebAssembly sandbox 项目,包括WasmCloud、WasmEdge以及Krustlet。其共同的目标是统一跨云中心、边缘计算、物联网和移动设备的广泛分布式应用程序的管理。

下面结合Second State(WasmEdge所在的公司)给出的基准测试,对比展示一下,与Docker相比而言,WebAssembly所具有的优势。

第一个是在启动上,WebAssembly比Docker要快100倍。第二个是在执行时间上,WebAssembly比Docker要快10%~50%。第三个是在占用的空间上,WebAssembly相对于Docker来说更少。Docker镜像一般少则几十M,多则几个G。而WebAssembly可以做到它的1%。当然,具体大小跟业务联系紧密。

在没有用户互动的产品中,如果使用Docker是什么样的情况呢?这时候的Docker只是作为一个执行的环境,把已经写好的程序在Docker中执行,执行完后,再把Docker关掉。这时候我们可能会思考:如果程序直接去运行,那也是可以的。其实,WebAssembly就是提供了这样的一种可能性,把WebAssembly应用到边缘场景,能够在边缘计算场景下跨平台、轻量、快速地用云原生理念和云原生工具去部署应用程序,具有很大的优势。

上图是基于WasmEdge构建的WebAssembly的生态圈。可以看到纵向的最底层是软件层,向上是OS操作系统层,再就是WasmEdge,然后基于WasmEdge又会有一些其他的技术产生。

     

OpenYurt如何管理WebAssembly

下面以WasmEdge为例,介绍OpenYurt如何管理WebAssembly。

首先,为什么OpenYurt可以很好地将WasmEdge作为一个边缘节点的运行时?

  • 第一点是OpenYurt对Kubernetes的无侵入设计。可以理解为Kubernetes能做的事情,在OpenYurt都是可以做的。

  • 第二点是WasmEdge是符合OCI runtime设计标准。不管是对crun还是runc等等,都是非常友好的。

下面通过视频展示如何使用OpenYurt来管理WasmEdge。

点击视频观看实践演示

使用OpenYurt管理WebAssembly演示demo

相信通过视频的演示,基本已经了解了如何使用OpenYurt来管理WasmEdge。更多关于OpenYurt和WasmEdge的情况,可以去github详细了解。


聚焦云原生新技术、新实践,帮助开发者群体赢在开发范式转移的新时代。欢迎关注CSDN云原生微信公众号~ 

扫这里↓↓↓加入CSDN云原生交流群

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/882554.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号