作者
連泓喬,華南理工計算機科學與技術大三在讀,主要研究容器領域,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 相關文章:
- 使用TKE Edge部署EdgeX Foundry
- 騰訊云聯合多家生態伙伴,重磅開源 SuperEdge 邊緣容器專案
- 【TKE 邊緣容器系列】SuperEdge易學易用 【6個短頻教學合集】
- 【TKE 邊緣容器系列】從0到N了解 SuperEdge【18篇干貨合集】
- 【TKE 邊緣容器系列】一文讀懂 SuperEdge 邊緣容器架構與原理
- 【TKE 邊緣容器系列】用 edgeadm 一鍵安裝邊緣 K8s 集群和原生 K8s 集群
- 【TKE 邊緣容器系列】Addon SuperEdge 讓原生 K8s 集群可管理邊緣應用和節點
- 【TKE 邊緣容器系列】打破內網壁壘,從云端一次添加成百上千的邊緣節點
- 【TKE 邊緣容器系列】SuperEdge 云邊隧道新特性:從云端SSH運維邊緣節點
- 【TKE 邊緣容器系列】SuperEdge 高可用云邊隧道有哪些特點?
落地案例相關資料:
- 騰訊WeMake工業互聯網平臺的邊緣容器化實踐:打造更高效的工業互聯網
- 完爆!用邊緣容器,竟能秒級實作團隊七八人一周的作業量
- 基于邊緣容器技術的工業互聯網平臺建設
【騰訊云原生】云說新品、云研新術、云游新活、云賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298019.html
標籤:其他
上一篇:好書推薦:《高級軟體測驗·卷1:高級軟體測驗分析師》PDF高清版
下一篇:如何在eolinker做引數系結

