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

萝らか妹 提交于 2019-12-28 18:03:46

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

边缘计算与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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!