手把手教你在 SuperEdge 上用 EdgeX Foundry 接入 IoT 裝置

騰訊雲原生發表於2021-09-06

作者

連泓喬,華南理工電腦科學與技術大三在讀,主要研究容器領域,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 相關文章:

落地案例相關資料:

【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公眾號,及時獲取更多幹貨!!

相關文章