作者

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

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

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

背景

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

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

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

方案设计

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

本方案的优点:

  • 完全原生

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

  • 组件可选

    我们对 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 相关文章:

落地案例相关资料:

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

手把手教你在 SuperEdge 上用 EdgeX Foundry 接入 IoT 设备的更多相关文章

  1. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

  2. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)

    前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...

  3. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置

    前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...

  4. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置

    前言 有朋友问了我关于博客系统搭建相关的问题,由于是做开发相关的工作,我给他推荐的是使用github的gh-pages服务搭建个人博客. 推荐理由: 免费:github提供gh-pages服务是免费的 ...

  5. 手把手教你在Ubuntu上分别安装Nginx、PHP和Mysql

    手把手教你在Ubuntu上分别安装Nginx.PHP和Mysql

  6. 手把手教你MyEclipseUML建模(上)

    手把手教你MyEclipseUML建模(上) 转 https://blog.csdn.net/qq_37939251/article/details/83444359 1.用UML 1建模 MyEcl ...

  7. 手把手教你在Ubuntu上安装Apache、MySql和PHP

    1:首先安装apache:打开终端(ctrl+Alt+t), 输入命令:sudo apt-get install apache2即可安装, 安装完后,打开浏览器,在地址栏输入:localhost或者h ...

  8. 手把手教你在ubuntu上安装apache和mysql和php

    1:首先安装apache:打开终端(ctrl+Alt+t), 输入命令:sudo apt-get install apache2即可安装, 安装完后,打开浏览器,在地址栏输入:localhost或者h ...

  9. 手把手教你在openshift上搭建wordpress博客(二)

    相同公布于:http://www.longgaming.com/archives/128 推荐前往阅读 这一篇文章主要介绍一些经常使用插件的使用和配置. 下面是我个人安装的一些插件.大家能够依据须要自 ...

随机推荐

  1. Java 中节省 90% 时间的常用的工具类

    前言 你们有木有喜欢看代码的领导啊,我的领导就喜欢看我写的代码,有事没事就喜欢跟我探讨怎么写才最好,哈哈哈...挺好. 今天我们就一起来看看可以节省 90% 的加班时间的第三方开源库吧,第一个介绍的必 ...

  2. ClickHouse与ES的优劣对比

    优点: ClickHouse写入吞吐量大,单服务器日志写入量在50MB到200MB/s,每秒写入超过60w记录数,是ES的5倍以上. 查询速度快,官方宣称数据在pagecache中,单服务器查询速率大 ...

  3. DC-1 靶机渗透测试

    DC-1靶机渗透测试 对着镜子大喊三声"太菜了""太菜了""太菜了" DC系列靶机的第一篇.边学习边日靶机边进步,摸爬滚打着前行. 内容不只 ...

  4. SQL语句(四)联表查询

    目录 一.关联查询的分类 按年代分 按功能分 二.sql92语法的连接 语法 1. 简单应用 2. 为表起别名 3. 加入筛选 4. 加入分组 5. 三表连接 6. 非等值连接 7. 自连接 三.sq ...

  5. Spring学习笔记-Hello Spring

    实现原理 采用XML方式配置Bean的时候,Bean的定义和实现分离的,采用注解的方式可以将两者合为一体,Bean的定义信息直接以注解形式定义在实现类中,从而实现了零配置. 控制反转是一种通过描述(X ...

  6. 【Android面试揭秘】面试官说“回去等通知”,我到底会不会等来通知?

    前言 大部分情况下,面试结束后,面试官都会跟你说:我们会在1-2个工作日内通知你面试结果. 许多人认为:所谓「等通知」其实是面试官委婉地给你「发拒信」.但是,这不是「等通知」的全部真相. 这篇文章,我 ...

  7. 解决Win10用户VS Code的C/C++更新到1.6.0后无法调试的问题

    今天突然遇到一个问题 Win10上 vscode C++突然无法正常调试 在运行调试后 编译成功后没有任何提示 直接就停止了 没有错误 不运行程序 尝试重新写一遍launch.json 自动生成lau ...

  8. 10 个超棒的 JavaScript 简写技巧

    今天我要分享的是10个超棒的JavaScript简写方法,可以加快开发速度,让你的开发工作事半功倍哦. 开始吧! 1. 合并数组 普通写法: 我们通常使用Array中的concat()方法合并两个数组 ...

  9. 授予mysql的其他用户数据库的使用权限

    场景:不同的开发人员有不同的数据库的权限:也可适用于外包公司不同的开发权限. root用户登录数据库,命令行执行下面语句即可. grant select,delete,update,create,dr ...

  10. 【笔记】F1 score

    F1 score 关于精准率和召回率 精准率和召回率可以很好的评价对于数据极度偏斜的二分类问题的算法,有个问题,毕竟是两个指标,有的时候这两个指标也会产生差异,对于不同的算法,精准率可能高一些,召回率 ...