作者
連泓喬,華南理工計算機科學與技術大三在讀,主要研究容器領域,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 高可用雲邊隧道有哪些特點?
落地案例相關資料:
【騰訊雲原生】雲說新品、雲研新術、雲游新活、雲賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!