连泓乔,华南理工计算机科学与技术大三在读,主要研究容器领域,Kubernetes、容器等云原生技术爱好者,SuperEdge 优秀贡献者。
王冬,腾讯云研发工程师,专注于 Kubernetes、容器等云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器 TKE Edge 私有化相关工作。 李腾飞,腾讯容器技术研发工程师,腾讯云 TKE 后台研发,SuperEdge 核心开发成员。
随着物联网的发展,连接云的设备种类和数量越来越多,2020年全球物联网设备已高达126亿个[1],并且还以每年百分之十几的速度在增长。对众多的设备进行统一管控和众多设备产生的数据进行处理是无法回避的难题。
EdgeX Foundry 是一个开源的边缘设备管理平台,可以部署在网络边缘连接各设备和上层组件进行交互,对设备管理和控制有一套成熟的解决方案。部署 EdgeX Foundry 在边缘集群,可以进一步增强边缘集群的功能,同相比将 EdgeX Foundry 部署在中心云集群,可以利用边缘集群的优势,更大发挥 EdgeX Foundry 的功能。
为了能让用户快速在边缘集群使用 EdgeX Foundry 的功能,我们提供了 EdgeX Foundry 在边缘集群的一键部署。通过配置相关文件,按层级分类,将命令集成到 edgeadm 的 addon 命令下,并进行了相应测试,减少可能的错误。使用户仅需简单几步,就可以轻松的在边缘集群上部署和使用 EdgeX Foundry 的功能。
本方案的优点:
图片来源于EdgeX Foundry[2]官网,有关 EdgeX Foundry 的更多资料可参考其官网,及EdgeX Foundry Github[3]。
执行以下命令下载 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 集群[4]。
执行以下命令,即可一键安装 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 的卸载】。
从网页访问 core-consul 的服务的端口可以查看各组件的部署情况,其中30850
是 core-consul 服务暴露的端口号。
curl http://localhost:30850/ui/dc1/services
如果显示红色叉号,说明组件安装失败,如果刷新仍然无效,可查看组件相应日志,排查失败情况,或者重新安装相应组件。
从网页通过访问 UI 服务的端口同样可以查看各组件是否正常部署,其中30040
是 UI 服务暴露的端口号。
curl http://localhost:30040/
如果部署成功,则各项会有相应的条目生成。
通过以下命令启动一个虚拟设备。
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 命令的 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 命令的 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 情况,必要时进行卸载重装。
如果是执行./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
注意:
./edgeadm detach edgex
仅适用于所有层组件都存在的情况,如仅存部分组件,请手动进行删除。目前我们实现了和 EdgeX Foundry 集成的第一步。
我们的目标如下面这张图:
是彻底打通云边端,形成云边端完全的一体化。EdgeX Foundry 也不是我们设备管理方案唯一的选择,我们后续还会和更多的边缘设备平台进行集成和抽象,为更通用的多平台边缘设备无缝接入而奋斗。
如果在使用中遇到相关问题或有改进意见,可添加小助手进群和我们一起讨论,或者在 SuperEdge 社区提 Issues。
SuperEdge 相关文章:
落地案例相关资料:
[1]
2020年全球物联网设备已高达126亿个: 【https://mp.ofweek.com/iot/a556714409057】
[2]
EdgeX Foundry: 【https://www.edgexfoundry.org/why_edgex/why-edgex】
[3]
EdgeX Foundry Github: 【https://github.com/edgexfoundry】
[4]
一键安装边缘独立 Kubernetes 集群: 【https://github.com/superedge/superedge/blob/main/docs/installation/install_edge_kubernetes_CN.md】
互动赢好礼
精读文章,回答问题赢好礼
Q1: 如何实现像操作 K8s 资源一样操作边缘设备,对边缘设备执行相应的指令操作?
Q2: SuperEdge 想和众多的 IoT 设备平台进行通用化对接,您能想到的方式是什么?
精读本文,回答以上2个问题。至9月7日上午11点前,将从留言处选出答案最优质及点赞数量最高的前5名,送腾讯定制T恤一件。
往期精选推荐