作者

连泓乔,华南理工计算机科学与技术大三在读,主要研究容器领域,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. jquery 对HTML标签的克隆、删除

    <table width="100%" class="table_form"> <tr> <td>奖励深度(<a hr ...

  2. Thinkphp中取消url中的index.php 和 Home 默认模块

    将配置文件中改: <?phpreturn array(    //'配置项'=>'配置值'    'URL_MODEL'=>'2',   //去掉url中index.php    ' ...

  3. python代码下载m3u8视频

    代码如下: # -*- coding: utf-8 -*- import requests import re import os import base64 from Crypto.Cipher i ...

  4. CF474D Flowers 题解

    题目:CF474D Flowers 传送门 DP?递推? 首先可以很快看出这是一道 DP 的题目,但与其说是 DP,还不如说是递推. 大家还记得刚学递推时教练肯定讲过的一道经典例题吗?就是爬楼梯,一个 ...

  5. centos7 下安装docker报错:You could try using...

    搞了台VPS,想要装docker,发现死活装不上,各种报错.之前系统是centos6,发现官方现在已经不支持centos6了,遂升级到centos7,然后还是出现下面这个错误. Error: Pack ...

  6. 【前端 · 面试 】HTTP 总结(十)—— HTTP 缓存应用

    最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正.交流. 争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火. 前言 通过前面几篇内容的学习,我们 ...

  7. 线程礼让_yield

    线程礼让_yield 礼让线程,让当前正在执行的线程暂停,但不阻塞 将线程从运行状态转为就绪状态 让cpu重新调度,礼让不一定成功!看CPU心情 测试案例: package multithreadin ...

  8. Java代码编写、代码优化技巧总结

    随着工作经验的积累,在代码编写和优化方面,个人的心得体会总结以及有些从网上或书本中看到的有用技巧 1. 判断何时使用keySet()和entrySet() 获取Map 的key 和value 当循环中 ...

  9. Alibaba-技术专区-RocketMQ 延迟消息实现原理和源码分析

    痛点背景 业务场景 假设有这么一个需求,用户下单后如果30分钟未支付,则该订单需要被关闭.你会怎么做? 之前方案 最简单的做法,可以服务端启动个定时器,隔个几秒扫描数据库中待支付的订单,如果(当前时间 ...

  10. 一张图说明 iaas paas saas的区别

    图片来源:https://www.bilibili.com/video/BV1QJ411S7c4  P2 云服务的三种模式 1laaS(基础设施即服务) laas(Infrastructure as ...