KubeEdge
文章目录
KubeEdge
1. 什么是 KubeEdge
KubeEdge 构建于Kubernetes 之上,是将Kubernetes 原生的容器编排能力扩展到了边缘节点上,并增加了对边缘设备的管理功能。它由云端部分和边缘部分组成,核心基础架构提供了对网络、应用部署和云边之间元数据同步的支持。它同时支持 MQTT,使得边缘设备可以通过边缘节点接入集群。
1)KubeEdge 的优势
KubeEdge 的主要功能特性如下。
(1)支持原生 Kubernetes。
在云端以完全兼容 Kubernetes 的 API,管理边缘应用和边缘设备。
(2)可靠的云边协同。
确保云边之间可靠的消息传递,不会因云边网络的不稳定而丢失数据。
(3)边缘自治。
当云边网络不稳定、边缘节点离线和重启时,可确保边缘节点自主运行、边缘应用运行正常。
(4)边缘设备管理。
通过原生Kubernetes API管理边缘设备,该API由CRD实现。
(5)极轻量的边缘代理。
极轻量级的边缘代理(EdgeCore),可在资源受限的边缘运行。基于KubeEdge 的功能特性,用户采用 KubeEdge 具有如下优势。
(1)边缘计算,借助在边缘上运行的业务逻辑,大量数据可以直接在本地安全处理。这减少了边缘到云端的网络带宽需求和消耗,提高了业务响应速度,降低了成本且有利于保护客户的数据隐私。
(2)简化开发,开发人员可以编写常规的HTTP或 MQTT 应用程序,然后用容器化的方式按需选择在云端或边缘运行。
(3)Kubernetes 原生支持,借助KubeEdge,用户可以在边缘节点上编排应用、管理设备,并监控应用和设备状态,就像传统的云端Kubermnetes一样。
(4)丰富的应用,可以轻松地将现有的复杂机器学习、图像识别、事件处理和其他高级应用部署到边缘。
2)KubeEdge 的组件 KubeEdge 的组件主要包括∶
(1)Edged∶在边缘节点上运行并管理容器化应用程序的代理程序。
(2)EdgeHub∶WebSocket 客户端,在边缘计算场景下,负责与云端服务进行交互(如KubeEdge 架构中的 EdgeController)。这包括将云端资源同步到边缘,并反馈边缘端节点和设备的状态变化。
(3)CloudHub∶ WebSocket服务器,负责监控云端相关资源的更新,缓存并向EdgeHub 发送消息。
(4)EdgeController∶ 一个扩展的 Kubernetes控制器,用于管理边缘节点和Pod元数据,以便将数据定位到特定的边缘节点。
(5)EventBus∶ 与 MQTT 服务器(Mosquitto)交互的MOTT 用户端,为其他组件提供发布和订阅功能。
(6)DeviceTwin∶ 负责存储设备状态并将设备状态同步到云。它还为应用程序提供查询接口。
(7)MetaManager∶ Edged 和EdgeHub之间的消息处理器。它还负责元数据在轻量级数据库(SQLite)中的存储或检索。
2.KubeEdge 的消息框架 Beehive
AubeEdge通信主要是基于Beehive实现的。Beehive是一个基于go-channels"息传递框架,用于 KubeFdge模块之间的通信。如果已注册其他 Beehive模块的名称或模块组的名称已知,则使用 Beehive 注册的模块可与其他 Behiy。模块通信。
1)Beehive 的消息格式
(1)Header。
ID∶消息ID(string)
ParentID∶ 如果是对同步消息的响应,则存在 parentID(string)。 TimeStamp∶ 生成消息的时间(int)。
Sync∶ 标志,以指示消息是否为同步类型(bool)。
(2)Route。
Source∶ 消息来源(string)。
Group∶ 消息必须被广播的组(string)。
Operation∶ 对资源的操作(string)。
Resource∶ 要操作的资源(string)。
(3)Content∶ 消息内容(interface{})。
2)模块注册
(1)在启动EdgeCore 时,每个模块都尝试将自身注册到Beehive核心。(2)Beehive核心维护一个名为 modules 的映射,其模块名称为key,模块接口的实现为 value。
(3)当模块尝试使用 Beehive 核心注册自己时,Beehive 核心检查已经加载的modules.yaml配置文件检查模块是否已启用。如果已启用,则会将其添加到模块 Map 中,否则将添加到已禁用的模块映射中。
3)模块操作
(1)AddModule,添加模块操作。
创建消息类型的新通道,然后在通道上下文结构的通道映射中添加模块名称(键)及其通道(值)。
(2)addModuleGroup,将模块添加到组。
先从channels map 中获取模块的channel,然后将模块及其 chanl添加到 typeChannels map中,其中key 是组,value是一个映射(key是模块名称,value是通道)。
(3)CleanUp,删除模块。
从通道映射(channels map)中删除模块,并从所有组中删除模块(typeChannels map),然后关闭与模块关联的通道。
4)消息操作
(1)Send to a Module。从通道映射中获取模块的通道,然后将消息放在通道上。
(2)Send to a Group。首先 Send2Group从typeChannelsmap中获取所有模块(map),然后它遍历map并在map中所有模块的通道上发送消息。
(3)Receive by a Module。首先Receive从通道映射中获取模块的通道,然后它等待消息到达该通道并返回消息。如果有错误,则返回错误。
(4)SendSync to a Module。SendSync有3个参数(模块、消息和超时时间), SendSync 先从频道映射中获取模块的通道,然后将消息放在通道上,再创建一个新的消息通道,并将其添加到 anonChannels 映射中,其中key是mesageID。它等待在它创建的 anonChannel 上收到消息(响应),直到超时,如果在超时之前收到消息,则返回消息并显示 nil 错误,否则返回超时错误。
(5)SendSync to a Group。首先从组的typeChannels映射中获取模块列表,创建一个消息通道,其大小等于该组中的模块数,并将其作为值放入 anonChannels 映射中,将 key 作为 messageID,在所有模块的通道上发送消息,到超时。如果该组中的 anonChannel=no 模块的长度,检查通道中的所有消思是否都具有 parentID=messageID。如果没有返回错误,则返回nil错误,如果超时,则返回超时错误。
(6)SendResp to a Sync Message。SendResp用于发送同步消息的响应,发送响应的 messageID需要位于响应消息的parentID中。当调用 SendResp 时,它会检查响应消息的 parentID 是否存在一个通道 anonChannels。如果存在通道,则在该通道上发送消息(响应),否则会记录错误。
3. KubeEdge 边缘侧组件
1)EdgeD
EdgeD是管理 Pod生命周期的边缘节点模块。它可以帮助用户在边缘节点部署容器化工作负载或应用程序。这些工作负载可以执行简单的遥测数据操作、分析或 ML 推理等操作。使用 Kubectl 云端的命令行界面,用户可以发出指令来启动工作负载。
目前,容器和镜像管理支持 Docker 容器运行,将来应该添加其他运行支持功能,如 Containerd 等,许多模块可以用于实现边缘功能。
Pod Management∶是Pod添加、删除和修改的句柄。它还使用Pod状态管理器和 Pleg 跟踪 Pod的运行状况。其主要工作包括∶从 MetaManager接收和处理 Pod的添加、删除、修改等操作;处理单独的工作队列,以添加和删除 Pod;处理 Worker 例程以检查工作队列,执行 Pod 操作;分别为配置映射和机密保留单独的缓存; 周期性清理孤立 Pod。
CRI∶容器运行接口,即一个插件接口,可以使用多种容器运行,无须重新编译,也支持多个运行,如Docker,Containerd,Cri-o等。目前KubeEdge Edged仅支持使用旧版 dockertools 的 Docker运行,因此 Edge 使用 CRI。
CRI需要支持KubeEdge中多个容器运行的原因包括∶在Kubernetes Kubelet中有 CRI支持,支持 Containerd,Cri-o等;使用旧版 dockertols 会继续使用 Docker运行支持,直到CRI支持它为止,即使用dockershim支持Docker运行时不考虑边缘;在资源受限的边缘节点上支持轻量级容器运行,但这些节点无法运行现有的 Docker;支持边缘节点上多个容器运行,如 Docker、Containerd、 Cri-o等;稍后需要支持具有暂停容器和IP 的相应CNI;用户可以在资源受限的边缘节点上运行轻量级容器,但该节点无法运行现有的Docker;用户可以选择在其边缘平台上选择多个容器运行时。
2) EventBus
EventBus 充当在 MQTT 主题上发送/接收消息的接口。它支持3种模式,分别为 internalMqttMode、externalMqttMode、bothMqtMode。其具体工作包括∶ EventBus 从外部用户端发送消息; EventBus 向外部用户端发送响应消息。
3)MetaManager
MetaManager 是 Edged和 EdgeHub之间的消息处理器。它还负责向轻量级数据库(SQLite)存储、检索元数据。MetaManager 根据下面列出的操作接收不同类型的消息
(1)Insert 操作。创建新对象时,通过云接收操作消息。一个示例可以是通过云创建/部署的新用户应用程序窗格,通过EdgeHub云接收插入操作请求。它将请求分派给 MetaManager,后者将此消息保存在本地数据库中。然后, MetaManager 将一条异步消息发送给 Edged。边缘处理插入请求。通过启动Pod并填充消息中的响应。MetaManager 检查消息,提取响应并将其发送回Edged,然后将其发送回云端
(2)Update 操作。可以发生在云/边缘的对象上,更新消息流类似于插入操作。此外,MetaManager 检查正在更新的资源是否已在本地更改。如果存在增量,则仅在本地存储更新,并且将消息传递给边缘并将响应发送回云。
(3)Delete 操作。当从云中删除诸如 Pod之类的对象时,将触发操作。
(4)Query 操作。可以在边缘本地查询元数据,也可以从云中查询某些远程资源(如配置映射/机密)。Edged 从 MetaManager 查询此元数据,进一步处理本地/远程查询并将响应返回给 Edged。消息资源可以基于分隔符"/"分为3个部分(resKey,resType,resld).
(5)Responses 操作。返回在云/边缘执行的任何操作。以前的操作显示响应来自云或本地边缘。
(6)NodeConnection 操作。从 EdgeHub接收操作消息以提供有关云连接状态的信息。MetaManager 在内存中跟踪此状态,并在某些操作中使用它,如远程查询云。
(7)MetaSync 操作。MetaSyncmetamanager 定期发送操作消息,以同步在边缘节点上运行的 Pod状态。同步间隔可配置为 confedge.yaml(默认时间为60s)。
4)EdgeHub
EdgeHub 负责与云中存在的 CloudHub 组件进行交互。它可以使用 WebSocket 或 QUIC协议连接 CloudHub。它支持云端资源在边缘的同步更新,同时报告边缘主机和设备状态变化等。它充当边云之间的通信链路。它将从云端接收的消息转发到边缘的相应模块,反之亦然。
EdgeHub 执行的主要操作是包括∶
(1)保持活跃状态,每次 hearbeatPeriod后,都会向 CloudHub 发送保持活动消息或 heartbeat。
(2)发布用户信息∶主要职责是通知其他组或模块有关云连接的状态。它向所有组(即 metaGroup,twinGroup 和 busGroup)发送蜂窝消息,通知它们云的连接状态。
(3)路由到云∶主要职责是从其他模块(通过蜂窝框架)接收要发送到云的所有消息,并通过 WebSocket 将它们发送到CloudHub。该过程涉及的主要步骤包括∶持续接收来自蜂箱上下文的消息,将该消息发送到 CloudHub(如果收到的消息是同步消息,且在 syncChannel 上收到响应,则它会创建一个 map【string】chan,其中包含消息的 messgeID 作为密钥,等待一个heartbeat 周期在创建的信道上接收响应;如果它在指定时间内没有在信道上收到任何响应,则超时),使用 SendResponse()函数将通道上收到的响应发送回模块
(4)路由到边缘∶主要职贡是从云端接收消息(通过 WebSocket 连接),并通过蜂窝框架将它们发送到所需的组。该过程涉及的主要步骤包括:从CloudHub接收消息,检查是否找到了邮件的路由组,检查它是否对 SendSync()函数响应(如果它不是响应消息,则将消息发送到所需的组;如果是响应消息,则将消息发送到 syncKeep 通道)。
5) DeviceTwin
DeviceTwin 模块负责存储设备状态,处理设备属性,处理设备双操作,在边缘设备和边缘节点之间创建成员资格,将设备状态同步到云及在边缘和云之间同步设备双信息。它还为应用程序提供查询接口。
DeviceTwin控制器执行的功能包括∶Sync Metadata to/from db(Sqlite)、 Register and Start Sub Modules、Distribute Message to SubModules、Health Check。
下面对 DeviceTwin 控制器执行的功能进行详细介绍。
(1)Sync Metadata to/from db(Sqlite)∶ 对于由边缘节点管理的所有设备, DeviceTwin执行以下操作。它检查上下文中的设备(设备列表是否存储在上下文中),如果不存在,那么它会向上下文添加互斥锁;从数据库查询设备;从数据库查询设备属性;从数据库查询设备信息;将设备属性和设备双数据组合到一个结构中,并将其存储在设备双上下文中。
(2)Register and Start Sub Modules∶ 注册4个设备双模块并将它们作为单独的 go 例程启动
(3)Distribute Message ToSub Modules∶ 在蜂箱框架中持续监听任何设备双信息;将收到的消息发送到 DeviceTwin 的通信模块中;根据消息源对消息进行分类,即根据消息是来自 EventBus,EdgeManager 还是 EdgeHub进行分突,并填充模块的动作模块映射(ActionModuleMap);将消息发达到所而的
设备双模块中。
(4)Health Check∶设备双控制器定期(60s)向子模块发送ping消息。只接收到 ping,每个子模块就会更新地图中的时间戳。控制器检查模块的时间截是否超过2 min,结果如果为 true 则重新启动子模块。
DeviceTwin 由4个模块组成,它们分别是成员模块、双模块、通信模块、设备模块。
(1)成员模块的主要职责是为通过云添加到边缘节点的新设备提供成员资格。此模块将新添加的设备绑定到边缘节点,并在边缘节点和边缘设备之间创建成员资格。该模块执行的主要操作是∶初始化动作回调映射,它是map 【string】包含可以执行的回调函数的回调;接收发送给会员模块的消息;对于每条消息,读取操作消息并调用相应的函数;从heartbeat通道接收heartbeat,并向控制器发送heartbeat.
(2)双模块的主要职责是处理所有双设备相关操作。它可以执行双设备更新、设备双重获取和设备双同步到云的操作。该模块执行的主要操作是∶初始化操作回调映射【它是执行请求操作的回调函数的操作映射(字符串)】;接收发送给双模块的消息;对于每条消息,读取操作消息并调用相应的函数;从 heartbeat 通道接收 heartbeat,并向控制器发送 heartbeat。
(3)通信模块的主要职责是确保设备双工和其他组件之间的通信功能。该模块执行的主要功能是∶初始化动作回调映射,它是map 【string】包含可以执行的回调函数的回调;接收发送到通信模块的消息;对于每条消息,读取操作消息并调用相应的函数; 确认消息中指定的操作是否已完成,如果操作未完成,则重新执行操作;从heartbeat 通道接收 hearbeat,并向控制器发送heartbeat。
(4)设备模块的主要职责是执行与设备相关的操作,如进行设备状态更新和设备属性更新。该模块执行的主要操作是∶初始化操作回调映射【它是执行请求操作的回调函数的操作映射(字符串)】;接收发送到设备模块的消息;对于每条消息,读取操作消息并调用相应的函数;从heartbeat 通道接收 heartbeat,并向控制器发送 heartbeat。
4.KubeEdge 云端组件
1) EdgeController
边缘控制器(EdgeController)是Kubernetes Api-Server 和 EdgeCore之间的桥梁。边缘控制器执行的功能包括∶下游控制器,从K8sApi-server 向 EdgeCore同步添加/更新/删除事件;上游控制器 将资源和事件(节点 POD 和Configmap)的监视和更新状态同步到 K8s Api-server,并从 EdgeCore 订阅消息;
controllerManager,创建管理器 Interface,实现管理 ConfigmapManager、 LocationCache 和 podManager 的事件。
2) CloudHub
CloudHub 是 EdgeController 和 Edge 之间的中介。它同时支持基于 WebSocket 的连接及 QUIC协议访问。EdgEhub 可以选择其中一个协议来访问 CloudHub。CloudHub 的功能是启用 Edge 和 EdgeController之间的通信。
到边缘的连接(利用 EdgeHub 模块)通过HTTPover WebSocket 连接完成。对于内部通信,它直接与EdgeController 通信。发送到CloudHub的所有请求都是上下文对象,它们与标记为其 nodeID 的事件对象的映射通道一起存储在 channelQ中。
CloudHub 执行的主要操作包括∶获取消息上下文并为事件创建 ChannelQ;通过 WebSocket 创建 HTTP连接;提供 WebSocket 连接;从边缘读取消息;向边缘写消息;将消息发布到 Controller上。这些操作的具体内容如下。
(1)获取消息上下文并为事件创建 ChannelQ∶ 上下文对象存储在 ChannelQ中。为所有 nodeID 创建通道,并将消息转换为事件对象,然后通过通道传递事件对象。
(2)通过 WebSocket 创建 HTTP 连接∶TLS 证书通过上下文对象提供的路径加载;HTTP 服务器使用 TLS 配置启动;然后 HTTP 连接升级到接收 comn对象的 WebSocket 连接,其中 ServeConn 函数为所有传入连接提供服务。
(3)从边缘读取消息;首先为 keealive 间隔设置截止日期;其次读取来自连接的JSON 消息;再次设置消息路由器详细信息并将消息转换为事件对象以进行云内部通信;最后,将事件发布到 EdgeContoller上。
(4)向边缘写消息;先为给定的 nodeID 接收所有事件对象;然后检查相同请求的和节点的活跃性;将事件对象转换为消息结构;写截止日期已设定;最后将消息传递给 WebSocket 连接。
(5)将消息发布到 EdgeContollr上∶每次向 WebSocket连接发出请求时,即会向控制器发送带有时间戳的clientID 和事件类型的默认消息;如果节点断开连接,则抛出错误,并将描述节点故障的事件发布到控制器上。
3) DeviceController
设备控制器是KubeEdge 的云组件,负责设备管理。KubeEdge 中的设备管理是通过自定义资源(CRD)描述设备元数据/状态和设备控制器来实现的,以便在边缘和云之间同步这些设备更新。设备控制器启动两个单独的 goroutine,称为Upstream Controller和Downstream Controller。这些不是单独的控制器,但为了清楚起见在此命名。
设备控制器利用设备模型和设备实例实现设备管理。其中,设备模型用于描述设备和属性(为方便访问者访问而公开的设备属性)。设备模型类似于可重复使用的模板,使用该模板可以创建和管理许多设备。设备实例用于表示实际的设备对象。它就像是模型中定义的和引用属性的实例化,设备规范是静态的,而设备状态包含动态更改的数据,如设备属性的所需状态和设备报告的状态。
设备控制器执行的操作包括∶下游控制器,通过在K8s API服务器上观察,将设备更新从云同步到边缘节点;上游控制器,使用设备双组件将设备更新从边缘节点同步到云。
5.EdgeSite 边缘的独立集群
在 Edge 计算中,有些用户希望在边缘位置安装整个集群。因此,管理员/用户可以利用本地控制平面来实现管理功能,并利用所有边缘计算的优势。
EdgeSite有助于在边缘运行轻量级集群。在有些情况下,用户需要在边缘运行独立的Kubermnetes 集群才能完全控制并改善离线调度功能。用户需要执行以下两种方案。
方案一,边缘群集在 CDN 而不在用户站点。CDN站点通常在世界各地都很大,并且无法保证网络连接和质量,而且部署在 CDN 边缘的应用程序通常不需要与中心交互。对于 CDN 资源中的那些边缘群集,他们需要确保群集可行,而不与中心云连接,这不仅针对已部署的应用程序,而且还针对计划功能。因此,无论与一个中心的连接如何,CDN 边缘都是可管理的。
方案二,用户需要部署资源有限的边缘环境,并且大部分时间都需要脱机运行。在某些 IoT方案中,用户需要部署完整的控制边缘环境并脱机运行。
对于这些用例,需要一个独立的、完全受控的轻量级 Edge 集群。通过集成KubeEdge和标准 Kubernetes,EdgeSite 使用户能够运行高效的Kubermetes集群进行 Edge/loT 计算。
假设我们在边缘位置部署了一个集群,包括管理控制平面。为了管理控制平面能够管理具有一些规模的边缘工作节点,托管主节点需要有足够的资源。我们假设∶ EdgeSite群集主节点不少于2个CPU 且不少于1GB内存;如果需要高可用性,则不同的边缘位置处需要2~3个主节点;使用相同的Kubemetes安全性(authN 和authZ)机制来确保主节点和工作节点之间的安全握手;使用相同的K8s HA机制来启用 HA。
通过集成,可以启用以下功能∶完全控制边缘的Kubermetes簇;轻量控制平面和代理;网络断开/重新连接时边缘工作者节点自治;边缘计算在包括时延、数据位置等方面有优势。
6. KubeEdge 映射组件 Mappers
Mapper 是用于连接和控制设备的应用程序。KubeEdge 目前支持 Blueooth Mapper 和 ModBus Mapper 两类。
1)Bluetooth Mapper
这是蓝牙协议的映射器的实现。目的是创建一个应用程序,通过该应用程序,用户可以使用蓝牙协议轻松操作设备,以便与 KubeEdge 平台进行通信。用户需要向映射器提供通过配置文件控制其设备所需的信息。这些可以在运行时通过 MQTT 代理提供输入来更改。
运行映射器的工作流程包括∶确保设备的蓝牙服务已开启;为节点设置"bluetoth=true"标签(此标签是调度程序在节点上调度 bletooth mapper pod的先决条件); 按照给出的步骤构建和部署映射器。
蓝牙映射器包括以下 5个主要模块∶ Action Manager、Scheduler、Watcher、 Controller、Data Converter。下面对上述 5个模块进行详细介绍。
(1)Action Manager;可以通过在设备的物理寄存器中设置特定值来控制监牙设备,并且可以通过从特定寄存器获取值来获取读数。我们可以将 Action定义为设备上的一组读/写操作。设备可以支持多个这样的操作。寄存器由特征值标识,这些特征值由设备通过称为 characteristic-uids的实体显示。这些操作中的每一个都应该通过配置文件提供给操作管理器,或者在运行时通过 MQTT提供。最初通过配置文件指定的值可以在运行时通过 MQTT进行修改。通过配置文件向操作管理器提供输入指南的操作包括∶在操作管理器模块中添加多个操作,这些动作中的每一个都可以由映射器的其他模块(如 Scheduler 和 Watcher)调用动作管理器执行;每个操作的名称应该是唯一的,其他模块可以调用要执行的操作;动作管理器的Perform-immediately字段告诉动作管理器是否应该立即执行动作,如果设置为 true,则动作管理器将执行一次事件;每个操作都与device-property-name 相关联,device-name-name 是设备 CRD中定义的属性名称,后者又包含操作所需实现的详细信息。
(2)Scheduler∶ 调度程序模块是可以定期执行操作的组件。其可以利用先前在动作管理器(ActionManger)模块中定义的动作,必须确保在执行计划前定义动作,否则会导致错误。可以将计划配置为运行的指定次数或无限次运行。调度程序是可选模块,如果用户不需要,则无须指定。用户可以通过配置文件或在运行时通过 MQTT向调度程序输入。用户最初通过配置文件指定的值可以在运行时通过 MQTT进行修改。通过配置文件向调度程序提供输入指南的操作包括∶用户可以通过配置文件提供数组作为输入来定义多个计划;Name指定要执行的调度的名称,每个调度必须具有唯一的名称,因为它被调度程序用作标识方法;间隔是指计划重复的时间间隔,期望用户以毫秒为单位提供输入;发生限制是指动作应该发生的次数(如果用户希望事件无限次运行,则可以将其设置为0或跳过该字段);动作是指应该在计划中执行的动作名称。这些操作的定义顺序与此处提及的顺序相同;期望用户以执行顺序提供要在调度中执行的动作的名称。
(3)Watcher∶ 观察者组件。其主要功能包括∶扫描蓝牙设备并在联机范围内连接到正确的设备;密切关注设备双重属性的预期状态,并执行操作以使实际状态等于预期;将双属性的实际状态报告回云。观察者是可选模块,如果不必要,用户无须定义或使用。观察者的输入可以通过配置文件或在运行时通过 MQTT提供。可以在运行时通过 MOTT 更改通过配置文件定义的值。通过配置文件向观察者提供输入指南的操作包括;Device-property-name,是指在创建设备时给出的设备双属性名称,使用此名称,观察者会监视预期状态的任何变化;动作,是指动作名称列表,这些动作名称是我们可以将实际状态转换为预期状态的动作名称,必须在映射器开始执行之前使用操作管理器定义所提供操作的名称。动作名称也应按照必须执行的顺序提及。
Controller∶控制器模块负责公开MQTTAPI,以在观察者、调度程序作管理器模块上执行 CRUD操作。控制器还负责启动其他模块,如动作管和,观察者和调度程序。控制器首先将MQTT用户端连接到代理(使用配置共性中指定的 MQTT配置),然后启动将连接到设备的观察者模块(基于配置文件中提供的配置),在观祭者开行运行后,启动动作管理器,该动作管理器执经已在其中启用的所有动作,之后调度程序也开始并行运行。(5)Data Converter∶ 这里不进行详细介绍。 2) ModBus Mapper
ModBus Mapper用于 ModBus 协议的映射器的实现。目的是创建一个应用程序,通过该应用程序,用户可以使用 ModbusTCPModbusRTU协议轻松操作设备,以便与KubeEdge 平台进行通信。用户需要向映射器提供通过dpl配置文件控制其设备所需的信息。这些可以在运行时通过更新 ConfigMap来更改。
ModBus 映射器包含4个主要模块∶Controller、Modbus 管理器、DeviceTwin管理器、File Watcher。
(1)Controller∶ 主要条目是 index.js,负责订阅边缘MQTT DeviceTwin主题并对连接的 ModBus 设备执行检查/修改操作。Contoller 还负责加载配置和启动其他模块。其首先将 MQTT 用户端连接到代理以接收预期 DeviceTwin 值的消息(使用conf.json 中的 MQTT配置),然后连接到设备并每2s检查一次设备的所有属性(基于提供的dpl配置),在配置文件中观察程序并行运行情况以检查 dpl 配置文件是否已更改。
(2)ModBus 管理器∶ModBus 管理器是一个可以对 ModBus 设备执行读写操作的组件。该组件的主要功能包括∶当控制器收到预期的DeviceTwin值消息时,ModBus 管理器将连接设备并更改寄存器以使实际状态等于预期值;当控制器检查设备的所有属性时,ModBus 管理器将连接到设备并读取符合 dpl配置的寄存器中的实际值。
(3)DeviceTwin 管理器;DeviceTwin 管理器是一个可以传输边缘 DeviceTwin 消息的组件。该组件的主要功能包括∶从边缘MQTT代理和解析消思接收边缘 DeviceTwin 消息;以DeviceTwin格式向云报告设备属性的实际值。
(4)File Watcher∶ 是一个可以从配置文件加载 dpl和MQTT 配置的组件该组件的主要功能包括∶ 监视 dpl 配置文件,如果此文件已更改,则文件观察程序会将dpl配置重新加载到映射器;在Mapper第一次启动时加载dpl和MQTT配置。
摘录自 边缘计算与算力网络 ——5G+AI时代的新型算力平台与网络连接
本文地址:https://blog.csdn.net/u012339179/article/details/111994213
上一篇: STM32升级方法:IAP升级详细介绍
下一篇: SpringBoot POM说明