從入門到精通之KubeEdge技術【與云原生的故事】(kubeedge實踐)
本文主要內容:

KubeEdge介紹
KubeEdge架構
KubeEdge優勢
KubeEdge應用場景
使用華為云原生搭建KubeEdge
小結
1、KubeEdge介紹
KubeEdge是華為云于2018年11月開源的云原生邊緣計算平臺項目,其主要功能就是將Kubernetes原生的容器編排和調度能力拓展到邊緣,并為邊緣應用部署、云與邊緣間的元數據同步、邊緣設備管理等提供基礎架構支持。
KubeEdge于2019年3月正式進入CNCF成為沙箱級項目(Sandbox),也成為CNCF首個云原生邊緣計算項目,并于2020年9月晉級為孵化項目。目前已廣泛應用智能交通、智慧城市、智慧園區、智慧能源、智慧工廠、智慧銀行、智慧工地、CDN等行業,為用戶提供一體化的邊端云協同解決方案。
2、KubeEdge架構
KubeEdge 由以下組件組成
Edged:在邊緣節點上運行并管理容器化應用程序的代理。
EdgeHub:一個 Web 套接字客戶端,負責與邊緣計算的云服務交互(如 KubeEdge 架構中的邊緣控制器)。這包括將云端資源更新同步到邊緣,并將邊緣端主機和設備狀態更改報告到云端。
CloudHub:一個 Web 套接字服務器,負責在云端觀察變化,緩存并發送消息到 EdgeHub。
EdgeController:一個擴展的 kubernetes 控制器,它管理邊緣節點和 pod 元數據,以便可以將數據定位到特定的邊緣節點。
EventBus:一個 MQTT 客戶端,用于與 MQTT 服務器(mosquitto)交互,為其他組件提供發布和訂閱功能。
DeviceTwin:負責存儲設備狀態并將設備狀態同步到云端。它還為應用程序提供查詢接口。
MetaManager: edged 和 edgehub 之間的消息處理器。它還負責在輕量級數據庫 (SQLite) 中存儲/檢索元數據。
3、KubeEdge優勢
KubeEdge的特點是在云邊通信的資源消耗小,使用方式基于Kubernetes,上手方便,比較適合我們當前的場景。
KubeEdge的優勢主要包括:
邊緣計算
借助在Edge上運行的業務邏輯,可以讓本地生成的數據,進行大量數據處理操作并對其進行保護。這樣可以減少邊緣和云之間的網絡帶寬需求和消耗,提高響應速度,降低成本并保護客戶的數據隱私。
簡化開發
開發人員可以編寫基于HTTP或MQTT的常規應用程序,對其進行容器化,然后在Edge或Cloud中的任何一個更合適的位置運行應用程序。
Kubernetes原生支持
借助KubeEdge,用戶可以像在傳統的Kubernetes集群一樣,在Edge節點上編排應用程序,管理設備并監視應用程序和設備狀態。
豐富的應用
可以輕松地將現有的復雜機器學習,圖像識別,事件處理等其他高級應用程序部署到Edge。
4、KubeEdge應用場景
4.1、基于KubeEdge 構建云原生衛星計算平臺
4.1.1、衛星計算的現狀
1)衛星制造面向通用化、智能化、軟件化的趨勢已經加快。主要原因是衛星的技術已經越來越傾向于通用化,一些工業級的地面上的器件,其實都可以在衛星中使用,尤其定位衛星。另外,衛星也越來越智能化,星上的載荷,也能支持GPU、NPU這樣的計算。此外,軟件化趨勢也是一個特征,星上的載荷,包括衛星的一些系統,軟件之間也可以通過API進行調用,星載計算機通過網口也可以把載荷上的軟件進行互聯互通。
2)衛星組網呈現便捷性、多樣性、融合性的特點。
4.1.2、問題和挑戰
1)眾所周知,2020年后,全球在軌衛星產生的數據已經超過衛星通信所產生的數據量。衛星以前主要是負責通信,或者是負責把a的數據通過衛星快速地傳給b,所以它最早其實是負責數據和網絡信號傳輸的。但從2000年以后,隨著軌道上不同的衛星越來越多,產生的數據也越來越多,衛星本身產生的數據量其實已超過衛星所傳輸的數據量,這就需要衛星進行在軌的實時處理,把一些冗余的數據丟棄。同時能夠提升響應時間,另外也減少網絡鏈路的壓力或網絡鏈路傳輸的消耗。
2)以遙感、應急、災害預警為代表的需求迫切需要通過在軌計算處理,提高響應時間和預測精度。
4.1.3、基于KubeEdge的云原生衛星計算平臺
1)首先使用KubeEdge邊緣協同AI子項目Sedna, 構建地面與衛星的多模型協同推理以及地面的模型增量訓練使用場景,在衛星上使用小模型,在地面使用大模型,以此能夠支持在衛星上使用非常少的資源來更好的支持AI推理的效果。
2)使用KubeEdge device mapper來對衛星上的各個傳感器進行統一的建模和管理,以便讓地面管理人員時時刻刻地知道衛星上面的設備工作情況。而所有的這一切都是通過KubeEdge建立起來的 ?高可靠的云邊通道來進行通信的。并且我們實現了使用K8s的數據模型,來對衛星上的應用來進行統一的生命周期的管理。
4.2、 KubeEdge基于AI應用
4.2.1、背景
華為云邊緣云創新實驗室ECIL(Edge Cloud Innovation Lab,Huawei Cloud)致力于分布式協同AI技術與業務創新,提供KubeEdge SIG AI系列中邊云協同推理、聯邦學習、增量學習和終身學習范式。
當前阻礙邊緣AI規模復制的兩個技術挑戰:邊側小樣本與邊緣數據異構。在邊緣云背景下:
不同邊側數據分布總是不斷變化
而邊側標注樣本也往往由于成本較高導致數量稀少。
因而封閉學習需不停標注樣本并重新訓練,這顯然給服務落地帶來巨大挑戰。這種數據分布和數據量上的挑戰分別稱為數據異構和小樣本。
同時,邊緣AI客戶往往存在數據安全合規與邊緣AI服務離線自治需求。基于1995年學界提出的終身學習概念,進一步定義邊云協同終身學習為邊云協同的多機器學習任務持續學習,正式定義如下:
邊云協同終身學習:給定云側知識庫中N個歷史訓練任務,推理持續到來的當前任務和未來M個邊側任務,并持續更新云側知識庫。其中,M趨向于無窮大,同時邊側M個推理任務不一定在云側知識庫N個歷史訓練任務當中。其中機器學習任務是指在特定情境下的機器學習模型相關運算工作,如中譯英(給定漢語翻譯為英語)、亞洲植物分類等。
4.2.2、方法介紹
KubeEdge-Sedna發布業界首個開源邊云協同終身學習范式流程。KubeEdge-Sedna邊云協同終身學習通過:
1)多任務遷移學習適應不同邊緣局點數據異構,實現“千人千面”精準預測;
2)未知任務增量處理在小樣本下越學越聰明,逐步實現AI工程化與自動化;
3)借助云側知識庫來記憶新情景知識,避免災難性遺忘;
4)邊云協同架構使得在應用云上資源同時保證數據安全合規與邊緣AI服務離線自治,希望從根本上解決上述邊云協同機器學習的挑戰。
其中,當前Sedna選用的模塊化方案和遷移學習方案使得開源的邊云協同終身學習特性能夠實現模型無關:
1)同一個特性能夠同時支持結構化和非結構化不同模型,在特性中模型可插拔;
2)同一個特性能夠同時支持分類、回歸、目標檢測、異常檢測等。
當前提供了一個樓宇空調控制驅動的熱舒適預測案例,基于開源Ashrae Thermal Comfort II數據集。在這個開源數據集中,收錄了全球28個國家99個城市1995~2015年之間樓宇內人員熱舒適真實數據,目標是構建一個機器學習分類模型,給定環境特征,預測人群的熱傾向(Thermal Preference)。熱傾向分為三類,希望更冷(覺得熱)、不希望變更(覺得舒適)、希望更熱(覺得冷)。
由于人員個體差異、房間與城市差異等,不同個體、不同地點對于熱舒適的感受是不一樣的,那么就會導致相同的環境溫度和空調設定下對應的人員的熱舒適度標簽值不一樣,從而導致較為突出的數據異構問題。熱舒適度預測主要針對樓宇中的房間人員個體,具有個性化的特點。在環境因素變化較多的情況下,邊側房間人員個體的熱舒適度樣本通常有限,往往不足以支撐對單個人員進行個性化模型的訓練,從而導致較為突出的小樣本問題。
案例初步結果如下圖所示,整體分類精度與單任務增量學習對比,相對提升5.12%(其中多任務提升1.16%)。其中,在Kota Kinabalu和Athens兩個任務,在使用終身學習前后預測效果在Kota Kinabalu數據中預測率相對提升24.04%,在Athens數據中預測率相對提升13.73%。
ATCII各城市Sedna終身學習預測精度一覽圖
4.3、DaoCloud 基于 KubeEdge 的邊緣計算實踐
4.3.1、現狀
邊緣端的edgecore, edgecore和cloudcore的設計模式是相同的,都是基于beehive模塊。beehive 模塊在整個 KubeEdge 中扮演了非常重要的作用,它實現了一套 Module 管理的接口,KubeEdge 中各個模塊的啟動、運行、模塊間的通信等都是由其統一封裝管理。
在服務初始化的時候,分別加載了各個 module 的 init 函數,將 module 注冊到 beehive框架的 modules 中。然后,執行 core.Run 來遍歷啟動各個模塊(StartModules)。最后,各個模塊使用beehive框架封裝好的消息通道來互相通信。
beehive 框架封裝好的消息通道來互相通信。Beehive 模塊采用 channel 通信,保證了消息的有序性;通道長度默認 1024,增加緩沖,可以有效防止程序阻塞;當緩沖用盡時,beehive 模塊會先將舊消息遺棄,再加入新消息。
但Beehive在通信過程中也會產生一些問題:
云端發送的消息,邊緣端遲遲不處理
邊緣端無法將消息發送到云端,導致邊緣端假死
云端到邊緣端的消息緩存溢出(websocket)
4.3.2、優化方案
針對beehive通信框架帶來的一些問題,我們進行了優化:
首先我們把KubeEdge的通道拆分為 Stream、Bus、Hub 三條消息通道,每條通道的職能更加獨立:Cloud/Edge Stream 負責同步日志與指標信息Cloud/Edge bus 負責同步數據信息Cloud/Edge hub 負責同步資源信息Edged 主動請求 Edgehub 獲取資源,Edgehub 通過 meta 在本地搜尋資源獲取,真正實現低時延,降低網絡成本。與此同時,通過擴展 Device Management Interface 定義,讓 EdgeX、AKri 等開源設備框架接入 KubeEdge 成為了可能。
Edgehub數據流
數據同步
Edgehub與Cloudhub同步資源數據
Edgehub將同步的資源寫入meta
反之,將meta操作過的資源同步到Cloudhub
數據操作
邊緣應用訪問Edgehub操作(CURD)資源
Edgehub從meta操作資源并返回
MetaManager多存儲后端
Service 是 Meta 資源操作的服務抽象層,實現 EdgeHub 所需的 Meta 資源 的能力,EdgeHub 直接與 Service 層交互。
Repository Interface 是 Meta 資源的倉儲能力標準接口定義。
Repository Factory 通過配置文件選擇 Repository Interface 的具體實現,如常用的 etcd、bolt、mongodb 等 kv型 nosql,以及常用的 mysql、sqlite 等關系型 sql。
配置文件的讀取解析也是用多態的方式去實現。通過這方面的改造,可更加貼合業務的節點,滿足業務特性。
數據通道
Edgebus
從edgehub獲取路由配置
包含原servicebus和eventbus的功能
Cloudbus
接收邊緣消息
根據消息目的地址轉發到對應云端應用
4.3.3、總結
通過對 Edgehub 數據流、 Cloud-Edge 同步模式、MetaManager 多存儲后端、Device Management Interface 以及數據通道的剖析,通信模塊的解決方案歸納為以下五點:
通過剝離 beehive 通信,不僅增加了代碼可讀性,還讓服務間調用變得更加簡單直接;
通過對云邊通道的優化演進,讓邊緣端請求真正達到了低時延;
多存儲后端的實現,可以讓邊緣端更加靈活地選擇適合自己的存儲方式;
對 Device Management Interface (DMI) 的定義,讓其它設備框架接入成為了可能;
云邊數據交互中最為關鍵的一環是要求擁有獨立的數據通道。
5、 使用華為云原生搭建KubeEdge
5.1、部署流程導航圖
創建CCE集群購買一個華為云CCE集群進入CCE控制臺:https://console.huaweicloud.com/cce2.0,點擊右上角購買Kubernetes集群按鈕:
購買(至少一個)CCE節點
進入CCE控制面板的資源管理-節點管理中,點擊右上角購買節點按鈕:
為(至少一個)CCE節點配置公網IP
進入ECS控制臺:https://console.huaweicloud.com/ecm,為剛剛購買的節點配置一個公網EIP:
此外還需要配置此節點的安全組,確保節點的10000、10002、20004、20006端口能夠被邊緣節點訪問到。
5.2? 搭建KubeEdge環境
5.2.1? 部署Cloudcore服務
5.2.2? 進入華為云OSC服務目錄界面、訂閱Cloudcore服務
進入OSC控制臺:https://console.huaweicloud.com/osc,在服務目錄中搜索并訂閱KubeEdge-Cloudcore服務。
5.2.3? 創建Cloudcore實例
訂閱后,點擊創建實例并按照安裝指南部署Cloudcore。
5.2.4? 納管(至少一個)邊緣節點
在邊緣節點上安裝keadm工具 ,可以從https://github.com/kubeedge/kubeedge/releases下載keadm工具包。
5.2.5? 從CCE獲取邊緣節點準入token
進入CCE新版界面:
選中之前創建的CCE集群后點擊CloudShell按鈕:
進入CloudShell交互式終端命令行后,可以使用kubectl get secret -nkubeedge tokensecret -o=jsonpath='{.data.tokendata}' | base64 -d命令獲取邊緣節點的準入token:
5.2.6? 使用keadm join納管邊緣節點
納管完邊緣節點后,還需根據edgemesh文檔:https://edgemesh.netlify.app/guide/getting-started.html#manual-installation
對edgecore.yaml進行配置。
5.3? 部署Edgemesh服務
進入華為云OSC服務目錄界面、訂閱Edgemesh服務。與步驟2.1相同,訂閱Edgemesh服務后根據安裝指南安裝Edgemesh服務:
5.4? 部署Sedna服務
進入華為云OSC服務目錄界面、訂閱Sedna服務。與步驟2.1相同,訂閱Sedna服務后根據安裝指南安裝Sedna服務:
最后,在云原生服務中心的服務實例看板中可以看到Cloudcore、Edgemesh和Sedna服務都已安裝完成:
6、小結
KubeEdge是面向邊緣計算場景、專為邊云協同設計的業界首個云原生邊緣計算框架,在 Kubernetes 原生的容器編排調度能力之上實現了邊云之間的應用協同、資源協同、數據協同和設備協同等能力,完整打通了邊緣計算中云、邊、設備協同的場景。隨著云業務不斷發展,相信在不久的將來,KubeEdge將會被更廣泛的應用起來。
【與云原生的故事】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/345260
Kubernetes 云原生
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。