摘要:本篇文章將從KubeEdge架構設計理念、KubeEdge代碼目錄概覽、KubeEdge集羣部署三方面帶你們認識KubeEdge。
KubeEdge即Kube+Edge,顧名思義就是依託K8s的容器編排能力和調度能力,實現雲邊協同、計算下沉、海量設備的平滑接入。本篇文章將從KubeEdge架構設計理念、KubeEdge代碼目錄概覽、KubeEdge集羣部署三方面帶你們認識KubeEdge。數據庫
KubeEdge架構設計理念
一、Kubernetes的架構
這裏是一個經典的K8s架構,K8s相信你們已經瞭解比較多了,它主要是分爲控制面和數據面,而如今K8s的生態已經很是火爆了,關於應用管理和容器管理已經造成了一套標準,這裏列舉了它的一些優點:網絡
- 只有API server能夠訪問etcd
- 組件經過 API Server 訪問集羣狀態
- API採用聲明式設計
- API對象彼此互補、可組合
- 優先使用事件監聽而不是輪詢
- …
二、基於Kubernetes構建邊緣計算的優點與痛點
核心優點主要有4方面:架構
容器化應用封裝如今已經成爲應用交付的一個趨勢,我能夠把個人應用打包到容器裏,我只打包一次,能夠跑在各類地方,這種若是應用到咱們IOT領域,咱們傳統有不少IOT嵌入式設備,它其實不少硬件和軟件強相關的,若是換一個硬件,可能軟件就要更改,若是說我這個容器化封裝之後,設備可支持容器runtime,我能夠將容器跑在任何IOT設備上。app
通用應用抽象定義:K8s的API,包括development、pod如今其實在業內已經造成一套標準,你們都比較瞭解和承認,其實咱們基於這些應用作這個平臺,你們也更能容易接受。socket
鬆耦合架構:它的可擴展性比較好,好比咱們基於K8s之上能夠經過CRD來定義一些API,像咱們經過設備管理CRD來定義一些IOT裏device的一些API,到時候咱們能夠直接經過K8s的一些方式來管理這些設備;還有一些可擴展,好比它的CIA能夠對接各類runtime,咱們有些邊緣節點它的資源很是有限,咱們就能夠對接一些輕量化的runtime。工具
其關鍵痛點有:優化
1)資源有限url
網關設備,128MB內存spa
K8s集羣須要至少1G內存.net
2)網絡不順暢
邊緣位於私有網絡,無公網IP
雲邊跨越公網,帶寬有限,延遲高
K8s的List-watch須要數據中心網絡
3)邊緣如何離線自治
網絡不穩,隨時可能離線
邊緣業務離線可工做
邊緣離線可故障恢復
4)設備接入和管理
缺乏邊緣設備抽象
缺乏邊緣設備接入協議支持
三、KubeEdge 架構與核心理念
咱們這個架構主要是分了雲、邊、端三部分,雲上邊就是咱們的控制面,邊就是咱們的邊緣節點,端就是跑了咱們的一些端側設備,雲上左邊是一個K8s的master,是沒有作過改動的原生的K8s控制面,後邊咱們加了咱們的一個組件叫CloudCore,它雲上的組件主要是會拿一些K8s控制面上的東西,經過EdgeController和DeviceController作一些處理,而後經過下邊的Cloud Hub,Cloud Hub主要是跟邊端通訊的,邊端有個EdgeHub和Cloud Hub通訊,而後把數據拿下來。
邊端是主要作了一個應用管理和設備管理的能力,應用管理左邊會有一個Edged,右邊有DeviceTwin、EventBus,分別是應用管理和設備管理,左邊有個DataStore,就是咱們說的本地自治的能力,好比說咱們這應用或者設備的元素從雲上分發下來,咱們是先把它存到一個數據庫裏,而後再到它的Edged或者設備裏邊,這樣就能保證雲邊網絡斷開或者邊緣節點重啓了之後我應用的Edged它能夠從數據庫裏把應用源數據拿出來,這樣就能保證在故障的狀況下業務能夠正常恢復。
核心理念:
1)雲邊可靠協同
雙向多路複用消息通道,支持邊緣節點位於私有網絡
Websocket + 消息封裝,大幅減小通訊壓力,高時延下仍可正常工做
雲邊消息校驗,網絡不穩定時不丟數據
2)邊緣離線自治
節點元數據持久化,實現節點級離線自治
節點故障恢復無需List-watch,下降網絡壓力,快速ready
3)邊緣極致輕量
重組Kubelet功能模塊,極致輕量化(~70mb內存佔用)
支持CRI集成Containerd、CRI-O,優化runtime資源消耗
4)邊緣設備管理
雲端經過Kubernetes API管理邊緣Device
四、KubeEdge 社區生態
KubeEdge致力於將Kubernetes的能力拓展到邊緣
- 業界首個邊緣容器平臺項目
- Apache 2.0協議
- 2019年3月捐給CNCF基金會
- 2020年9月晉級爲孵化級託管項目
- K8s IoT Edge WG參考架構
- 基於Kubernetes構建,100%兼容K8s API
- 9個特性版本,最新版本爲v1.4.0
- 3100+ Star,810+ Fork,500+貢獻者
- 目前成立Device/IoT與MEC兩個SIG
- 參與社區貢獻的企業包括:中國聯通,ARM,中國移動,諧雲,中國電信,時速雲,http://JD.com,浙大SEL實驗室,EMQ,InfoBlox,Inovex,Midokura等
KubeEdge代碼目錄概覽
ADOPTERS就是咱們社區的一些採納者,好比說你用了KubeEdge,而且想成爲參與者,建議者,你能夠提一個PR,把大家寫到這個ADOPTER裏面去,下面的這些就是代碼目錄,主要就是cloud(雲端)、edge(邊緣端)、mappers(接入設備的mapper端),還有OWNERS是咱們項目的一些matiner,主要負責核代碼,好比你對咱們社區貢獻比較多,咱們能夠把你加到OWNERS,幫咱們核代碼和檢視代碼。
KubeEdge集羣部署
一、KubeEdge 集羣部署工具—— keadm
這個是借鑑了K8s的Kubeadm,能夠一鍵部署KubeEdge集羣,在部署KubeEdge集羣時,要先裝一個K8s的master,這個master用任何符合K8s的標準均可以,這個 keadm是基於K8s之上部署KubeEdge系統。
子命令參數:
init:部署雲端組件
join:部署邊緣端組件
gettoken:從雲端獲取邊緣端啓動憑據
reset:重置KubeEdge集羣的雲端和邊緣端
二、KubeEdge 部署 —— 雲端
在已經裝好的master上裝咱們的雲端,用 init便可:
重要參數:
--kube-config:鏈接K8s Master的憑據
--advertise-address:簽發到邊緣證書裏的IP地址
三、KubeEdge 部署 —— 邊緣端
邊緣端主要用咱們的join命令:
重要參數:
--token:邊緣端啓動時訪問雲端的憑據
--cloudcore-ipport:邊緣端訪問的雲端IP地址
本文分享自華爲雲社區《KubeEdge架構解讀:雲原生的邊緣計算平臺》,原文做者:技術火炬手。