基於KubeEdge的邊緣節點分組管理設計與實現
KubeEdge 1.11版本提供了“邊緣節點分組管理”新特性,抽象出了跨地域的應用部署模型。該模型將邊緣節點按地區劃分為節點組,並將應用所需資源打包成一個整體在節點組上進行部署,降低了邊緣應用生命週期管理的複雜度,有效減少運維成本。
01
邊緣應用跨地域部署面臨的挑戰
圖1 邊緣應用跨地域部署示意圖
在邊緣計算場景中,邊緣節點通常分佈在不同的地理區域,這些區域中的節點有著計算資源、網路結構和硬體平臺等屬性上的差異。如圖1所示,邊緣節點部署在杭州、北京和上海等地域,各地域邊緣節點的規模不同,不同地域網路不互通,以及不同區域映象倉庫也是不同的,如北京的節點無法透過IP直接訪問其他區域的節點。因此在部署邊緣應用的時候,通常需要為每個這樣的地理區域維護一個Deployment,對於資源少的區域減少副本數量,對於區域網中的節點需要把映象地址改為本地映象倉庫的地址,同樣也需要為每個地區管理單獨的Service資源,來解決跨地域節點之間的訪問問題。然而隨著地理區域和應用數量的增長,對應用的管理會變得越來越複雜,運維成本也隨之增加。基於以上背景,KubeEdge提供了邊緣節點分組管理能力,來解決在跨地域應用部署中運維複雜度的問題。
02
邊緣節點分組管理設計與實現
圖2 邊緣節點分組整體概覽
如圖2所示,邊緣節點分組特性的整體設計圖,主要由節點分組、邊緣應用和流量閉環三個部分的內容組成,下面會就以上各個部分詳細展開。
▍2.1 節點分組(NodeGroup)
圖3 節點分組示例
根據邊緣節點的地理分佈特點,可以把同一區域的邊緣節點分為一組,將邊緣節點以節點組的形式組織起來,同一節點同時只能屬於一個節點組。節點分組可以透過matchLabels欄位,指定節點名或者節點的Label兩種方式對節點進行選擇。節點被包含到某一分組後,會被新增上apps.kubeedge.io/belonging-to:nodegroup的Label。
▍2.2 邊緣應用(EdgeApplication)
圖4 邊緣應用EdgeApplication的組成
邊緣應用用於將應用資源打包,按照節點組進行部署,並滿足不同節點組之間的差異化部署需求。該部分引入了一個新的CRD: EdgeApplication,主要包括兩個部分:
1. Workload Templates。主要包括邊緣應用所需要的資源模板,例如Deployment Template、Service Template和ConfigMap Template等;
2. WorkloadScopes。主要針對不同節點組的需求,用於資源模板的差異化配置,包括副本數量差異化配置(Replicas Overrider)和映象差異化配置(Image Overrider),其中Image Overrider包括映象倉庫地址、倉庫名稱和標籤。
對於應用主體,即Deployment,會根據Deployment Template以及差異化配置Overrider生成每組所需的Deployment版本,透過調整nodeSelector將其分別部署到指定分組中。對於應用依賴的其他資源,如ConfigMap和Service,則只會在叢集中透過模板建立一個相應的資源。邊緣應用會對建立的資源進行生命週期管理,當刪除邊緣應用時,所有建立的資源都會被刪除。
▍2.3 流量閉環
圖5 流量閉環示意圖
透過流量閉環的能力,將服務流量限制在同一節點組內,在一個節點組中訪問Service時,後端總是在同一個節點組中。當使用EdgeApplication中的Service Template建立Service時,會為Service添上service-topology:range-nodegroup的annotation,KubeEdge雲上元件CloudCore會根據該annotation對Endpoint和Endpointslice進行過濾,濾除不在同一節點組內的後端,之後再下發到邊緣節點。
此外,在下發叢集中預設的Master Service “Kubernetes”所關聯的Endpoint和Endpointslice時,會將其維護的IP地址修改為邊緣節點MetaServer地址,使用者在邊緣應用中list/watch叢集資源時,可以相容K8s流量訪問方式,實現無縫遷移和對接。
03
實現原理與設計理念
在這個部分,我們會分享一下邊緣節點分組管理特性的設計理念,並結合KubeEdge整體架構,詳細介紹一下我們的實現原理。
圖6 設計理念
我們希望給使用者提供一個統一的運維入口,原本我們需要維護各個地區的Deployment,如果需要進行增刪改查操作,我們需要對每個地區的Deployment都執行一遍相同的操作,不僅增加了運維成本,還容易引入人為操作的錯誤。邊緣節點分組管理特性透過引入EdgeApplication CRD,統一了Deployment等資源的運維入口。
另外我們需要提供更大的擴充套件可能性,在內部實現中,我們統一使用了Unstructured結構,降低與特定資源的耦合度,方便後續新增其他資源。另外為了不干涉原生資源和流程,我們降低與Kubernetes Reconciliation的耦合度,可以保證Deployment等資源操作過程的原生性。
圖7 節點組和邊緣應用實現
在邊緣節點分組管理特性中,我們引入了兩個CRD,分別是節點組NodeGroup和邊緣應用EdgeApplication。在NodeGroup Reconciliation中,NodeGroup Controller用於監聽NodeGroup CRD的變化,並對節點的apps.kubeedge.io/belonging-to:nodegroup Label進行增刪改等操作,同時,加入節點組的節點,會上報狀態到NodeGroup CRD中,我們就可以透過查詢NodeGroup直接檢視節點組內所有節點的狀態。
EdgeApplication Reconciliation與NodeGroup Reconciliation類似,由EdgeApplication Controller來監聽EdgeApplication CRD的變化,對相應資源進行增刪改等操作,同時對應資源會上報狀態到EdgeApplication CRD中。
圖8 整體架構
如圖8所示,是最終的整體架構圖。在邊緣節點分組管理特性中,我們引入了新的元件ControllerManager,其中包括了剛才我們介紹的NodeGroup Controller和EdgeApplication Controller,在CloudCore中引入了新的模組EndpointSlice Filter,用於實現流量閉環的能力。
圖中藍色區域是前面已經介紹了的節點分組和邊緣應用的內容,在這裡再重點介紹一下Service Template實現流量閉環能力的過程。首先在EdgeApplication CRD中加入Service的模板,在建立邊緣應用時,Service range-nodegroup資源也會隨之生成,同時控制面會自動為其建立EndpointSlice。EndpointSlice會透過KubeEdge的雲邊通道下發到邊緣節點,CloudCore中的EndpointSlice Filter會進行過濾,保證下發到同一節點組內的邊緣節點,由此可以保證邊緣上的客戶端訪問始終在一個節點組內。
對於使用者來說,圖8中紫色的線表達了使用者需要維護的資源。首先使用者需要維護NodeGroup,來管理節點組中的節點;其次,使用者需要維護EdgeApplication資源,透過EdgeApplication來實現對各個地域邊緣應用的生命週期管理。
04
發展規劃
目前KubeEdge社群已經實現了Deployment、Service和ConfigMap等資源的打包以及流量閉環的能力,並且支援資源的部分狀態收集;未來將繼續擴充邊緣節點分組的能力,實現邊緣閘道器,支援StatefulSet等更多資源,逐步完善應用狀態收集,並在Kubectl中支援更友好的資源展現形式。歡迎大家能夠加入KubeEdge社群,一起完善與增強KubeEdge邊緣節點分組等方面的能力。
本文作者:
KubeEdge社群Member:華為雲 鮑玥 ; 浙江大學SEL實驗室 張逸飛
來自 “ 容器魔方 ”, 原文作者:鮑玥&張逸飛;原文連結:https://mp.weixin.qq.com/s/wt_ntZmHrcyZ6v9UsR-A-w,如有侵權,請聯絡管理員刪除。
相關文章
- KubeEdge邊緣自治設計原理
- 如何實現邊緣計算中的節點自治
- 深度解讀KubeEdge架構設計與邊緣AI實踐探索架構AI
- 邊緣計算 KubeEdge+EdgeMash
- KubeEdge,一個Kubernetes原生邊緣計算框架框架
- 看KubeEdge攜手K8S,如何管理中國高速公路上的10萬邊緣節點K8S
- 使用 Prometheus 在 KubeSphere 上監控 KubeEdge 邊緣節點(Jetson) CPU、GPU 狀態PrometheusGPU
- KubeEdge邊緣計算在順豐工業物聯網中的實踐
- 下一代雲原生邊緣裝置管理標準DMI的設計與實現
- IoT 邊緣叢集基於 Kubernetes Events 的告警通知實現
- KubeEdge雲邊協同設計原理
- 基於etcd的選主功能實現的主備節點管理
- 邊緣計算服務,kubeedge+kserver搭建,【AI模型推理】ServerAI模型
- The New Stack:KubeEdge將Kubernetes的能力延伸至邊緣
- 雲原生與邊緣計算的碰撞——邊緣原生應用實踐
- Java畢業設計_基於MySQL網盤管理系統的設計與實現JavaMySql
- 基於SSH培訓機構管理系統的設計與實現
- 基於java的企業車輛管理系統的設計與實現Java
- 大規模 IoT 邊緣容器叢集管理的幾種架構-4-Kubeedge架構
- 基於android的智慧導診的設計與實現Android
- 邊緣計算2.0時代,“雲邊緣”與“邊緣雲”你分清了嗎?
- 基於java的大學生健康資訊管理系統的設計與實現Java
- 邊緣計算:分層架構及拓撲典型組網架構
- clash 實現訂閱節點與規則的分離
- 基於區塊鏈的智慧鎖設計與實現區塊鏈
- 邊緣計算的最佳實踐
- 【從0到1學習邊緣容器系列1】之 邊緣計算與邊緣容器的起源
- Golang 基於單節點 Redis 實現的分散式鎖GolangRedis分散式
- 基於Android的失物招領APP的設計與實現AndroidAPP
- 從 lite-apiserver 看 SuperEdge 邊緣節點自治APIServer
- 基於jsp學生資訊管理系統的設計與實現(含原始檔)JS
- 基於java的陶瓷工廠進銷存管理系統的設計與實現Java
- networkx基礎用法:新增節點、新增邊、刪除節點、刪除邊、計算度、賦權重
- 從中心走向邊緣——深度解析雲原生邊緣計算落地痛點
- 雲上影片業務基於邊緣容器的技術實踐
- 【邊緣計算】劉陽:邊緣計算髮展中的若干熱點問題及思考
- 邊緣計算與雲端計算
- 基於Android的音樂播放器的設計與實現Android播放器