KubeEdge:如何在云端点亮您家的灯 的相关思考

2024-01-07 08:20

本文主要是介绍KubeEdge:如何在云端点亮您家的灯 的相关思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

KubeEdge:如何在云端点亮您家的灯

的相关思考 
  • 边缘计算与KubeEdge

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

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

  • 设备孪生与kubeEdge设备管理

设备孪生Device twin,作为一种IoT设备元数据在应用平台上的映射,已经成为IoT设备管理的重要组成。
这大概解决我对云端如何管理边缘设备的困扰。

IoT设备元数据分为静态属性(序列号、资产标示符、mac地址等)和动态属性(特定背景下的实时数据)动态属性也成为Twin属性。

设备孪生和物理设备具有相同的特性,便于设备与应用之间进行更好的通信。

思考,设备孪生是位于云端,k8s管理设备孪生的状态,而设备孪生真正控制物理设备,这其实相当加了一层虚拟,好似软件定义的设备。

设备孪生维护这期望值和实际值,期望值是远端下达的命令结果,实际值是从物理设备更新到的数据,设备孪生像物理设备发送控制命令,使两个状态最终一致。
在这里插入图片描述

从这张图,可以看到设备孪生的两个状态属性,以及和物理设备之间的关系。IoT设备实时反馈自己的actual state到其孪生设备上,孪生设备根据其期望值向IoT设备发送期望状态,IoT收到Expected State后,更新自己的状态。

有个疑问,将IoT设备纳入云端管理的意义是什么?
原来认为IoT设备就是被一个远程服务器在处理控制的,比较像一个单一的服务器,现在看起来通过容器云管理,粒度细了,各服务进程相对对立,资源隔离。有点感觉像从虚拟机到容器的状态。

这样看来,容器中实际运行的应该IoT的设备孪生,及是它的远程服务,用户端app是和设备孪生通信,设备孪生和IoT设备交换数据。
设备孪生就是从原来复杂的后台服务编程器了独立服务进程。如下图,描述kubeEdge的一个架构及数据流通状态。

  • KubeEdge设备管理组件

在这里插入图片描述
相比k8s,kubeEdge变成了专用系统,增加了
EdgeController:管理云端及云端与边缘册设备的同步;
Cloudhub:web socket服务端,负责监听云端资源变化,缓存消息到EdgerHub;
EdgeHub:websocket客户端,包括同步云端资源更新,报告边缘节点和设备信息到云端等;
DeviceTwin:负责存储设备状态并同步到云端。
EventBus: 与MQTT服务器Mosquitto交互的客户端,为其他组件提供订阅和发布消息的功能。
Mapper(sdk/app):用于连接和控制端侧设备,例如开、关灯。

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

CRD是k8s的一个功能,实现自定义资源到k8s api中,所以这样来说kubeEdge其实是对k8s的一个高层次的应用。

  • 如何点亮家里的灯

hw举了一个例子,下图是设备孪生的属性状态,主要是两个属性,即实际状态和期望状态。下图就像k8s资源对象的配置文件。
在这里插入图片描述

开关灯流程,见下图。

图中分成了两个层次,一个云端一个边缘,这就跟上边所理解的设备孪生放在docker里作为独立的服务处理请求,应该是层次的划分,就像master和node节点的划分,下边一段话引用自kubeEdge的github的readme,注意edge node,应该印证了上边的思路。

Note: Currently, for edge node, we must use hostPort in the Pod container spec so that the pod comes up normally, or the pod will be always in ContainerCreating status. The hostPort must be equal to containerPort and can not be 0.

先看下,怎么开关电灯的。
在这里插入图片描述

首先我们看看如何上报灯的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值,获取到边缘侧设备上的灯开、关的实际状态。
在这里插入图片描述

这里为自己强调一下,mapper,即sdk/app,其实是物理设备,由于edge node上运行的是设备孪生,所以用户app应该不是直接访问/控制数据的,而应从专门的服务(该服务可能也部署在k8s上,甚者和设备孪生在同一个物理node上)上获得处理,并更新到设备孪生上。

云端控制,主要是服务处理吧,像丰巢、贩卖机、路灯等等需要商业维护的物联网,而不像是自己一直带入的智能家居类的IoT。

k8s为自己带来了一个新的容器云世界,kubeEdge又带来了一个不一样的IoT云端管理的思路。

  • 参考
  1. 文章来自 华为容器魔方 KubeEdge:如何在云端点亮您家的灯
  2. kubeEdge项目

这篇关于KubeEdge:如何在云端点亮您家的灯 的相关思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579316

相关文章

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组