通過分析對比EdgeX Foundry、K3S、KubeEdge、StarlingX和OpenEdge五個開源邊緣計算框架的差異,推薦選擇華為開源的KubeEdge邊緣計算集群方案來自建邊緣計算集群。
一、五個邊緣計算開源框架的簡介:
1)EdgeX Foundry Linux基金組織的開源項目。偏重於端側設備的管理,定位是通用工業IOT邊緣計算通用框架,提供了一些設備接入、邊緣數據傳輸等場景的實現,但不具備雲上對邊緣端的應用和設備的管控、雲邊協同等智能邊緣系統的能力,架構組件之間依賴復雜。
2)K3S Rancher Labs的開源產品。K3s是在邊緣運行整個K8s集群的方案,不具備雲邊協同的能力;其次K3s雖然對K8s做了輕量化,但整體資源要求仍然較高,無法運行在IOT Hub、工業網關等小型設備中。
3)KubeEdge 華為開源產品,打通了雲、邊、端的整體流程:
· 用戶能夠在雲上統一管理邊緣節點上的應用、設備
· 提供了雲邊協同的能力,能夠同步雲邊的應用、設備的數據
· 針對復雜多樣的邊緣設備,KubeEdge定義了一套通用的設備管理API(K8s CRD)以及設備協議解耦層,用戶可以方便地使用KubeEdge在雲上管理各種邊緣設備
· 針對雲邊網絡不穩定的情況,提供了雲邊數據協同的可靠性傳輸、邊緣元數據持久化
· 針對邊緣資源不足的情況,輕量化裁剪了Kubelet,支持在256MB的小型設備上運行
4)StarlingX Intel和WindRiver開源的邊緣計算項目。StarlingX是一個軟件棧,他包含了打包,編譯,安裝配置,openstack本身,WindRiver的MTCE平台,以及WindRiver針對電信雲開發的VIM等等。基於OpenStack的大規模邊緣計算方案,集成了OpenStack的核心服務用於實現計算,網絡,存儲等能力。目標是實現邊緣端的無人值守,虛擬機級別的管理。邊緣端組成邊緣雲互相協同,以及和中心雲實現協同。
5)OpenEdge 百度開源的面向端的工業互聯網智能邊緣計算方案,需要和百度的雲端管理套件BIE結合實現雲邊協同。
二、架構對比:
1)EdgeX Foundry
2)K3S
3)KubeEdge
4)StarlingX
5)OpenEdge
三、功能對比:
|
EdgeX Foundry |
K3S |
KubeEdge |
StarlingX |
OpenEdge |
---|---|---|---|---|---|
雲邊協同 | 不支持 | 不支持 | 支持 | 支持 | 支持 |
原生支持K8S | 不支持 | 支持 | 支持 | 不支持 | 不支持 |
邊緣組件資源占用 | 中 | 小 | 最小(內存256M) | 較大 | 較大 |
部署復雜度 | 復雜 | 簡單 | 簡單 | 復雜 | 復雜 |
是否去中心化 | 否 | 否 | 是 | 否 | 否 |
是否支持MQTT | 支持 | 支持 | 支持 | 支持 | 支持 |
容器化編排 | 不支持 | 支持 | 支持 | 支持 | 不支持 |
通過以上對各個邊緣計算開源方案的對比,結合我們的業務場景和已有的技術棧(基於K8S平台),KubeEdge和K3S是比較合適我們業務的邊緣計算集群產品。其中KubeEdge的雲邊端協同,支持的功能和性能整體比K3S更加出色。所以推薦使用KubeEdge產品作為我們邊緣計算集群的落地實施對象。下面將詳細介紹一下KubeEdge目前穩定版本(v1.1.0版本,v1.2.0版本將在2019年12月底發布)支持的特性和功能:
1.關於部署:
kubeEdge 包括 cloud 和 edge 部分,在 kubernetes 構建,在 cloud 與 edge 端提供核心的基礎支持,比如網絡,應用,部署以及元數據的同步等。
安裝kubeEdge 需要安裝 kubernetes 集群,cloud 與 edge 部分
cloud side: docker, kubernetes cluster and cloudcore.
edge side:docker, mqtt and edgecore.
2.kubeedge 組件:
Edged:一個運行在 edge 節點的 agent 程序,管理邊緣的容器化應用程序
EdgeHub:邊緣的通信接口模塊。這是一個 Web 套接字客戶端,負責邊緣計算與雲服務的交互。包括同步雲端資源到邊緣端,以及報告邊緣端 host 和 device 狀態到雲端
CloudHub:雲端通訊接口模塊。一個 Web 套接字服務器,負責監視雲端的更改、緩存以及向EdgeHub 發送消息
EdgeController:管理邊緣節點。它是一個擴展的 Kubernetes 控制器,管理邊緣節點和 pod 元數據,以便數據可以面向特定的邊緣節點
EventBus:使用 MQTT 處理內部邊緣通信。MQTT 客戶端與 MQTT 服務器(mosquitto)交互,為其他組件提供發布和訂閱功能
DeviceTwin:處理設備元數據的設備軟件鏡像。該模塊有助於處理設備狀態並將其同步到雲上。它還為應用程序提供查詢接口,它連接到一個輕量級數據庫(SQLite)
MetaManager:管理邊緣節點上的元數據。這是 Edged 和 Edgehub 之間的消息處理器。負責在輕量級數據庫(SQLite)中存儲 / 檢索元數據
3.支持的特性:
• Replace data exchange format between cloud and edge from json to protobuf.
• Support reliable message delivery from cloud to edge.
• Evaluate gRPC for cloud to edge communication.
• Support CSI for persistent storage (using PV/PVC/StorageClass) at edge.
• Support ingress at edge.
• Add admission-webhook based validation for device CRDs.
• Enhance performance and reliability of KubeEdge infrastructure.
• Upgrade Kubernetes dependencies in vendor to v1.15.
• Migrate to Go module for dependency management.
• Improve contributor experience by defining project governance policies, release process, membership rules etc.
• Improve the performance and e2e tests with more metrics and scenarios.
4.未來版本將支持的特性:
• Support edge-cloud communication using edgemesh.
• Add Layer 4 proxy support in edgemesh.
• Istio-based service mesh across Edge and Cloud where micro-services can communicate freely in the mesh.
• Enable function as a service at the Edge.
• Support more types of device protocols such as OPC-UA, Zigbee.
• Evaluate and enable much larger scale Edge clusters with thousands of Edge nodes and millions of devices.
• Enable intelligent scheduling of applications to large scale Edge clusters.
• Data management with support for ingestion of telemetry data and analytics at the edge.
• Security at the edge.
• Support for monitoring at the edge.
5.功能原理介紹:
1)KubeEdge的雲邊協同通信測試過包括Grpc、WebSocket、Quic,最后發現WebSocket是性能最好的,所以默認采用了WebSocket。Quic作為備選項,在網絡頻繁斷開等很不穩定場景有優勢。KubeEdge雲邊消息傳遞是通過EdgeHub跟CloudHub間的Websocket或Quic協議的長連接傳遞的。
2)KubeEdge會將邊緣收到的應用、設備元數據都進行本地持久化。相比Kubelet在內存中緩存對象的方式,可以有效保證節點離線、故障恢復時的業務自治和快速自愈。
3)edgemesh組件實現邊緣節點之間的pod通信和邊緣pod到雲端pod的通信,但是目前還不支持雲端pod到邊緣側pod的通信。
6.嘗鮮結果:
通過kubeedge源碼自帶的一鍵部署腳本部署kubeedge集群,並熟悉組件的配置,得知在已有K8S集群平台上部署集成KubeEdge比較容易,阻礙不會很大。目前體驗了在雲端編排部署容器后,在邊緣側離線自治和故障自愈的功能。通過停止cloudcore和edgecore組件來模擬斷開雲邊的連接和邊緣節點故障重啟,容器在斷開和雲端的連接后仍然正常運行,在節點重啟后能自動拉起容器運行正常。目前發現大部分功能和阿里雲的邊緣集群差不多,可以考慮取代阿里雲的邊緣集群實現自建邊緣計算集群。
另外:K3S是輕量化的K8S集群,在邊緣側部署一個完成的集群,完全的在邊緣側實現編排管理。如果不考慮雲邊協同的場景也可以使用,如:海外場景。不過KubeEdge的EdgeSite組件也是側重於邊緣側的編排管理而生的,也具備這樣的能力,只是目前版本還不成熟和完善。
其他功能在測試中。。。