文档章节

KubeEdge之设备管理:如何在云端点亮您家的灯

KubeEdge
 KubeEdge
发布于 2019/12/28 17:46
字数 1551
阅读 134
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

边缘计算与KubeEdge

云计算离终端设备(如摄像头、传感器等)较远,对于实时性要求高的计算需求,把计算放在云上会引起较长的网络延时、网络拥塞、服务质量下降等问题。而终端设备通常计算能力不足,无法与云端相比。在此情况下,边缘计算应运而生,将云端计算能力延伸到靠近终端设备的边缘节点,完美解决上述问题。

KubeEdge作为全球首个Kubernetes原生的开源边缘计算平台,依托Kubernetes的容器编排和调度能力,通过纳管用户的边缘节点,提供将云上应用延伸到边缘的能力,联动边缘侧和云端的数据,满足客户对边缘计算资源的远程管控、数据处理、分析决策、智能化的诉求。同时,在云端提供统一的设备/应用监控、日志采集等运维能力,为企业提供完整的边云协同一体化服务的边缘计算解决方案。

本文将介绍KubeEdge是如何在云端管理边缘侧的设备的,例如:用户只需在按下手机上app的一个按钮,就能打开自己家中的电灯。

 

设备孪生与KubeEdge设备管理

说到IoT设备,不得不提到一个概念叫做设备孪生Device Twin。设备孪生作为一种IoT设备元数据在应用平台上的虚拟映射,已经成为IoT设备管理的重要组成部分。IoT设备通常包含两类数据:一是不会改变的元数据,包括序列号、资产标识符、Mac地址等描述设备的详细信息,也可以称为设备的静态属性。另一类是设备的动态数据,包括特定背景下的设备专有实时数据,例如灯的开、关状态,也可以称为设备的Twin属性。设备孪生具有与物理设备相同的特性,便于设备与应用之间进行更好地通信。应用发送的命令首先到达设备孪生,设备孪生根据应用设置的Expected State进行状态更新,此外IoT设备实时反馈自身的Actual State,设备孪生同时记录IoT设备的Actual State和Expected State 。这种方式也使IoT设备在离线状况下再次上线时,设备的状态也能得到同步。

设备管理也是边缘计算中IoT场景的关键功能。KubeEdge作为一个云端和边缘侧都开源的边缘计算平台,除了实现云端应用的配置和下发之外,另一个很重要的功能就是在云端管理IoT设备,并且实现云边之间的设备状态同步。

 

KubeEdge设备管理组件

KubeEdge设备管理相关的组件如下:

  • DeviceController:扩展的 Kubernetes 控制器,管理云端的设备信息以及云端与边缘侧设备的同步。

  • CloudHub:WebSocket 服务端,负责监听云端资源变化, 缓存并发送消息到 EdgeHub。

  • EdgeHub:WebSocket 客户端,包括同步云端资源更新、报告边缘节点和设备信息到云端等功能。

  • DeviceTwin:负责存储设备状态并将设备状态同步到云端。

  • EventBus:与 MQTT 服务器Mosquitto交互的客户端,为其他组件提供订阅和发布消息的功能。

  • Mapper:用于连接和控制端侧设备,例如开、关灯。

KubeEdge通过CRD(Customer Resource Definition)扩展Kubernetes的API,扩展的API资源包括:Device和DeviceModel等,这样我们能在云端通过Kubernetes命令行工具Kubectl或其他方式对设备资源进行CRUD的操作。Device资源映射与各个边缘节点关联的设备,例如传感器。DeviceModel则是对一类设备定义的模板,方便用户可以在云端依据DeviceModel模板轻易地完成对Device资源的批量操作。

 

使用KubeEdge点亮您家的灯

在云端点亮您家的灯,让我们来看看KubeEdge如何实现这件有趣的事情?一个设备孪生的参考示例如下所示:

这里就需要用到上面提到Device Twin。例如灯的元数据信息以Json的格式描述如上,包含静态属性attributes和动态属性twin。这里定义一个名为powerstatus的twin属性,它的expected值和actual值可以为ON或者OFF。设备自身可以上报powerstatus的actual值到云端,云端则可以通过修改为powerstatus属性的expected值来控制边缘侧灯的开、关。

首先我们看看如何上报灯的powerstatus的actual值到云端:

  1. Mapper实时上报实际状态Actual State给MQTT服务器Mosquitto。

  2. EventBus从Mosquitto收到订阅消息,消息内容包含设备的实际状态Actual State。

  3. EventBus把设备实际状态Actual State发送给Device Twin。

  4. Device Twin更新设备实际状态Actual State到边缘节点本地的轻量级数据库,例如SQLite。

  5. Device Twin同步实际状态Actual State给WebSocket客户端EdgeHub。

  6. EdgeHub发送消息给WebSocket服务端CloudHub。

  7. CloudHub回馈消息给DeviceController。

  8. DeviceController同步实际状态Actual State到Kubernetes API Server。

最后用户就能在云端查询设备的powerstatus的actual值,获取到边缘侧设备上的灯开、关的实际状态。

 

加入KubeEdge

设备管理毫无疑问是边缘计算IoT场景中十分关键的特性,目前KubeEdge的设备管理特性仍在开发之中,将会在0.3版本发布,敬请期待。

KubeEdge作为一个100%开源的项目,十分欢迎您的加入。KubeEdge Github项目地址:

https://github.com/kubeedge/kubeedge

KubeEdge
粉丝 6
博文 13
码字总数 17242
作品 0
深圳
私信 提问
加载中
请先登录后再评论。
Android 设备管理工具--androrat

androrat 是一个对 Android 设备进行远程管理的工具。 功能包括: 获取通讯录信息 获取呼叫记录 获取短信和彩信 通过 GPS 获取定位 实时监控接收到的短信 监控手机的呼叫状态 拍照 获取来自麦...

匿名
2013/03/28
2.7W
11
JS实现的1080p视频解码方案--ORBX.js

ORBX.js是Mozilla、OTOY、Autodesk和南加州大学联合开发的一款基于JavaScript和WebGL的HD编解码器,让1080p视频解码和云游戏都可以完全靠JS完成。这为HTML5高清视频提供了一种纯JavaScript替...

匿名
2013/05/07
2.4K
0
Unity3D是如何计算角色与物体之间的距离来触发动画的?

var a:GameObject;   var b:GameObject;   //a,b 分别定义两个公共GameObject对象//   function Update () {   if (a==null b==null) { unity3d   print("a or b = null");   r......

orientalfashion
2013/05/02
6.9K
2
U3D中如何实现事件回调

unity3d资源插件实现事件回调 Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结...

orientalfashion
2013/05/09
2.6K
1
Java工程师如何在Docker上进行开发

Java工程师如何在Docker上进行开发?本文能让你以最小的日常开支和预备知识就可以把Docker和Java结合使用。 安装 现在有很多的Java Web框架,挑选一个非常小的框架,选择Spark吧!它是一款基...

dockerer
2015/12/04
8.3K
20

没有更多内容

加载失败,请刷新页面

加载更多

利用Numpy中的ascontiguousarray可以是数组在内存上连续,加速计算

1. 概述 在使用Numpy的时候,有时候会遇到下面的错误: AttributeError: incompatible shape for a non-contiguous array 看报错的字面意思,好像是不连续数组的shape不兼容。 有的时候,在看...

osc_9we1w99u
41分钟前
0
0
如何管理客户的期望值?

根据客户关系管理(CRM)中的三角定律,客户满意度=客户体验-客户期望值。客户期望值与客户满意度成相对反比,因此需要引导客户期望值并维持在一个适当的水平,同时客户期望值需要与客户体验协...

cailisuper
今天
11
0
阿里研究员:软件测试中的18个难题

阿里QA导读:对于软件测试来说,怎么样才算测够了?如何评价测试的有效性?那么多测试用例,以后怎么删?在软件测试中会遇到非常多的问题,阿里研究员郑子颖分享了18个他总结出的难题以及相关...

阿里巴巴技术质量
昨天
0
0
Numpy的常用函数总结

1、np.argmax()、np.max()、np.argmin()、np.min()用法: argmax返回的是最大数的索引.argmax有一个参数axis,默认是0。看二维的情况如下: a = np.array([[1, 5, 5, 2],            ...

osc_auwur47t
43分钟前
0
0
【报告分享】2020抖音进阶-挑战赛2.0产品营销方案.pdf(附下载链接)

大家好,我是文文(微信:sscbg2020),今天给大家分享抖音营销中心出品的《2020抖音进阶-挑战赛2.0产品营销方案.pdf》,方案里面的玩法解析、案例、营销重点分析等都很清晰,对短视频及品牌...

智能推荐系统
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部