手把手教你在 SuperEdge 上用 EdgeX Foundry 接入 IoT 设备

2021年09月16日 阅读数:2
这篇文章主要向大家介绍手把手教你在 SuperEdge 上用 EdgeX Foundry 接入 IoT 设备,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

做者

连泓乔,华南理工计算机科学与技术大三在读,主要研究容器领域,Kubernetes、容器等云原生技术爱好者,SuperEdge 优秀贡献者。linux

王冬,腾讯云研发工程师,专一于 Kubernetes、容器等云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器 TKE Edge 私有化相关工做。git

李腾飞,腾讯容器技术研发工程师,腾讯云 TKE 后台研发,SuperEdge 核心开发成员。github

背景

随着物联网的发展,链接云的设备种类和数量愈来愈多,2020年全球物联网设备已高达126亿个,而且还以每一年百分之十几的速度在增加。对众多的设备进行统一管控和众多设备产生的数据进行处理是没法回避的难题。web

EdgeX Foundry 是一个开源的边缘设备管理平台,能够部署在网络边缘链接各设备和上层组件进行交互,对设备管理和控制有一套成熟的解决方案。部署 EdgeX Foundry 在边缘集群,能够进一步加强边缘集群的功能,同相比将 EdgeX Foundry 部署在中心云集群,能够利用边缘集群的优点,更大发挥 EdgeX Foundry 的功能。api

  • EdgeX Foundry 运行在边缘须要一个边缘计算平台做为支撑,在中间起到承上启下的做用,上可链接到中心云,下可管控设备;
  • 边缘计算平台须要 EdgeX Foundry 通用的设备管理能力,打通云边端,造成云边端一体化。两者相辅相成,互相补足,为云边端赋能。

方案设计

为了能让用户快速在边缘集群使用 EdgeX Foundry 的功能,咱们提供了 EdgeX Foundry 在边缘集群的一键部署。经过配置相关文件,按层级分类,将命令集成到 edgeadm 的 addon 命令下,并进行了相应测试,减小可能的错误。使用户仅需简单几步,就能够轻松的在边缘集群上部署和使用 EdgeX Foundry 的功能。websocket

本方案的优势:网络

  • 彻底原生架构

    咱们对 EdgeX Foundry 没有任何修改,也没有任何封装,只是原生的部署。下一期咱们会提供新的组件与SuperEdge 及 Kubernetes 和 EdgeX Foundry 的对接,可是咱们依然会保持全部组件及能力可选,以插件方式集成,不会强绑定用户使用任何额外的功能。app

  • 组件可选运维

    咱们对 EdgeX Foundry 集成目前支持到层级可选,后面咱们还会继续细化,细化到组件可选,让用户彻底按本身的意愿和业务须要去部署须要的组件。层级可选见 EdgeX Foundry 的架构图:

图片来源于EdgeX Foundry官网,有关 EdgeX Foundry 的更多资料可参考其官网,及EdgeX Foundry Github

  • 全部参数可自定义

    咱们是以 yaml 模板方式集成的 EdgeX Foundry, 用户可修改 yaml 模板的任何参数,实现本身业务自定义的需求。

EdgeX Foundry 组件的安装

准备条件

执行如下命令下载 edgeadm 静态安装包,注意修改"arch=amd64"参数,目前支持[amd64, arm64],下载本身机器对应的体系结构,其余参数不变

arch=amd64 version=v0.6.0-beta.0 && rm -rf edgeadm-linux-* && wget https://attlee-1251707795.cos.ap-chengdu.myqcloud.com/superedge/$version/$arch/edgeadm-linux-$arch-$version.tar.gz && tar -xzvf edgeadm-linux-* && cd edgeadm-linux-$arch-$version && ./edgeadm

安装一个边缘集群可参考:一键安装边缘独立 Kubernetes 集群

安装 EdgeX Foundry 的组件

执行如下命令,便可一键安装 EdgeX Foundry 的全部组件

./edgeadm addon edgex

若是获得如下成功提示,说明部署成功

Start install edgex-application-services.yml to your cluster
...
Deploy edgex-ui.yml success!

也能够经过如下命令添加所需组件到集群

./edgeadm addon edgex [flag]

能够经过./edgeadm addon edgex --help命令查看可使用的flag:

--app           Addon the edgex application-services to cluster.
--core          Addon the edgex core-services to cluster.
--device       Addon the edgex device-services to cluster.
--support      Addon the edgex supporting-services to cluster.
--sysmgmt    Addon the edgex system management to cluster
--ui              Addon the edgex ui to cluster.

例如只安装 core 服务层的相关组件,可运行

./edgeadm addon edgex --core

其余组件同上安装,替换 flag 便可。如需同时安装多个层级组件,能够同时添加多个 flag。

目前默认安装的 EdgeX Foundry v1.3 版本,如需安装其余版本的组件,可自行定制 EdgeX Foundry组件的版本。

以上安装不包含 Security 层相关组件和配置,后期版本可能添加相关功能,也可在项目源文件中自行配置。

部署成功后,能够经过如下命令查看 Pod 和 Service 的部署状况

kubectl get -n edgex svc/pod

注意: 若是出现同一层级的组件部分安装成功,部分安装失败,可直接从新执行安装命令进行更新和安装。若是已安装的组件出现异常没法运行,可使用./edgeadm detach edgex [flag]对特定层级的组件进行卸载重装。卸载操做具体参考 下文中【 EdgeX Foundry 的卸载】。

EdgeX Foundry 的界面

访问 consul

从网页访问 core-consul 的服务的端口能够查看各组件的部署状况,其中30850是 core-consul 服务暴露的端口号。

curl http://localhost:30850/ui/dc1/services

若是显示红色叉号,说明组件安装失败,若是刷新仍然无效,可查看组件相应日志,排查失败状况,或者从新安装相应组件。

访问 UI

从网页经过访问 UI 服务的端口一样能够查看各组件是否正常部署,其中30040是 UI 服务暴露的端口号

curl http://localhost:30040/

若是部署成功,则各项会有相应的条目生成。

EdgeX Foundry 的验证

链接设备

经过如下命令启动一个虚拟设备。

kubectl apply -f https://raw.githubusercontent.com/superedge/superedge/main/deployment/edgex/edgex-device-random.yaml

该命令会启动一个随机整数生成器的虚拟设备链接到 EdgeX Foundry,该设备会向 core-data 发送随机数,同时接收 core-command 的命令控制。

数据访问

经过如下命令从网页访问 core-data 的服务的端口查看上一步启动的随机数设备向 core 服务发送的最近10条数据,其中30080是 core-data 服务的端口号,Random-Integer-Generator01是以上文件安装的虚拟设备。

curl http://localhost:30080/api/v1/event/device/Random-Integer-Generator01/10

设备控制

查看可用命令

网页访问 core-command 服务可查看对虚拟设备进行的指令,包括 Put 指令和 Get 指令,其中 Put 用于下发命令,Get 用于获取命令,其中30082是 core-command 服务的端口号。

curl http://localhost:30082/api/v1/device/name/Random-Integer-Generator01

Put 指令

执行 Put 命令能够对虚拟设备进行控制,这里咱们修改其产生随机数的范围,从网页中找到 Put 命令的 url,并执行如下命令:

curl -X PUT -d '{"Min_Int8": "0", "Max_Int8": "10"}' http://localhost:30082/api/v1/device/2a20be3f-d9e6-4032-aeba-23f602d99a63/command/646fb3c7-f8bc-4b4f-bbad-d566777582d1

这里将虚拟设备的生成数范围改成0到10,并执行 Put 命令。

此处仅为例子,具体 url 由显示的 Put命令的 url 获得,请记得将edgex-core-command:48082字段改成localhost:30082,将{}内的内容改成可用的参数,可修改的参数由以前查询命令的显示中获得。其中30082是 core-command 服务的端口号。

Get 指令

从上面的网页内容中能够获得 Get 命令的 url,使用 Get 的 url 能够获取随机数设备发来的数据。

curl http://localhost:30082/api/v1/device/2a20be3f-d9e6-4032-aeba-23f602d99a63/command/646fb3c7-f8bc-4b4f-bbad-d566777582d1

此处仅为例子,具体 url 根据显示获取,请记得将edgex-core-command:48082字段改成localhost:30082, 其中30082是 core-command 服务的端口号

能够看到随机数设备产生的随机数已经变成了[0,10]范围。

数据导出

执行如下命令部署一个将 EdgeX Foundry 的数据导出至云端的组件

kubectl apply -f  https://raw.githubusercontent.com/superedge/superedge/main/deployment/edgex/edgex-app-service-configurable.yaml

启动该组件,该组件能够将 core-data 中的数据导出到 HiveMQ 的公开的 MQTT Broker 上。能够经过网页访问该代理查看数据是否成功导出到云端。访问如下网址进入网页

http://www.hivemq.com/demos/websocket-client/

点击 connect 进行链接,填写主题为 EdgeXEvents

便可看到 message 一栏出现虚拟设备向 EdgeX Foundry 发送的数据

可是,因为这是公有的 Broker,多方屡次上传的数据都会保留并共存在相应的主题下,因此即便 message 一栏有数据显示,多是以前导出操做遗留的数据,要想真正验证是否导出成功,能够在 connect 后尝试建立一个新主题,该主题尚无 message 显示,再修改 mqtt.yaml 中env下的Writable_Pipeline_Functions_MQTTSend_Addressable_Topic的值为该主题,部署后查看 Broker 网页中是否有数据出现,如有,说明真正导出成功。

**注意:**若是上述操做中出现网页没法访问等异常,请从新查看 Pod 状况,必要时进行卸载重装。

EdgeX Foundry 的卸载

若是是执行./edgeadm addon edgex安装了全部组件或者自定义安装了全部层级组件的,能够执行如下命令将全部 EdgeX Foundry 卸载,同时卸载在主机上产生的挂载数据。若是只是安装了部分层级或者有部分组件缺失的,请根据后文中的经过添加 flag 的方式逐个层级卸载。

./edgeadm detach edgex

出现如下成功显示,说明卸载完成。

Detach edgex-application-services.yml success!
...
Detach edgex-configmap.yml success!
Detach edgex completely success!

也可执行./edgeadm detach edgex [flag]对 EdgeX Foundry 进行卸载,能够经过./edgeadm detach edgex –-help命令查看可使用的 flag:

--app             Detach the edgex application-services from cluster.
--core            Detach the edgex core-services from cluster.
--device         Detach the edgex device-services from cluster.
--support       Detach the edgex supporting-services from cluster.
--sysmgmt      Detach the edgex system management from cluster.
--ui                Detach the ui from cluster.
--completely  Detach the configmap and volumes from cluster.

如需卸载 core 服务的相关组件,可运行

./edgeadm detach edgex –-core

其余组件删除操做同上,替换 flag 便可,支持多个 flag 同时删除多个层级的组件。 能够经过如下命令查看全部 pod 是否已删除。

kubectl -n edgex  get deploy

注意

  • 若是删除中出现错误,致使某一层级的组件部分已删除,部分未删除,则对该层级从新执行删除操做将失败,需用 addon 对该层级全部组件重装,再进行删除。
  • ./edgeadm detach edgex仅适用于全部层组件都存在的状况,如仅存部分组件,请手动进行删除。

后期计划

目前咱们实现了和 EdgeX Foundry 集成的第一步,咱们的目标以下面这张图:

是完全打通云边端,造成云边端彻底的一体化。EdgeX Foundry 也不是咱们设备管理方案惟一的选择,咱们后续还会和更多的边缘设备平台进行集成和抽象,为更通用的多平台边缘设备无缝接入而奋斗。

若是在使用中遇到相关问题或有改进意见,可关注【腾讯云原生】公众号,或者在SuperEdge社区提Issues。

SuperEdge 相关文章:

落地案例相关资料:

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!