摘要:本篇文章将從KubeEdge架構設計理念、KubeEdge代碼目錄概覽、KubeEdge叢集部署三方面帶大家認識KubeEdge。
KubeEdge即Kube+Edge,顧名思義就是依托K8s的容器編排能力和排程能力,實作雲邊協同、計算下沉、海量裝置的平滑接入。本篇文章将從KubeEdge架構設計理念、KubeEdge代碼目錄概覽、KubeEdge叢集部署三方面帶大家認識KubeEdge。

這裡是一個經典的K8s架構,K8s相信大家已經了解比較多了,它主要是分為控制面和資料面,而現在K8s的生态已經非常火爆了,關于應用管理和容器管理已經形成了一套标準,這裡列舉了它的一些優勢:
隻有API server可以通路etcd
元件通過 API Server 通路叢集狀态
API采用聲明式設計
API對象彼此互補、可組合
優先使用事件監聽而不是輪詢
…
核心優勢主要有4方面:
容器化應用封裝現在已經成為應用傳遞的一個趨勢,我可以把我的應用打包到容器裡,我隻打包一次,可以跑在各種地方,這種如果應用到我們IOT領域,我們傳統有很多IOT嵌入式裝置,它其實很多硬體和軟體強相關的,如果換一個硬體,可能軟體就要更改,如果說我這個容器化封裝以後,裝置可支援容器runtime,我可以将容器跑在任何IOT裝置上。
通用應用抽象定義:K8s的API,包括development、pod現在其實在業内已經形成一套标準,大家都比較了解和認可,其實我們基于這些應用做這個平台,大家也更能容易接受。
松耦合架構:它的可擴充性比較好,比如我們基于K8s之上可以通過CRD來定義一些API,像我們通過裝置管理CRD來定義一些IOT裡device的一些API,到時候我們可以直接通過K8s的一些方式來管理這些裝置;還有一些可擴充,比如它的CIA可以對接各種runtime,我們有些邊緣節點它的資源非常有限,我們就可以對接一些輕量化的runtime。
其關鍵痛點有:
1)資源有限
網關裝置,128MB記憶體
K8s叢集需要至少1G記憶體
2)網絡不暢
邊緣位于私有網絡,無公網IP
雲邊跨越公網,帶寬有限,延遲高
K8s的List-watch需要資料中心網絡
3)邊緣如何離線自治
網絡不穩,随時可能離線
邊緣業務離線可工作
邊緣離線可故障恢複
4)裝置接入和管理
缺少邊緣裝置抽象
缺少邊緣裝置接入協定支援
我們這個架構主要是分了雲、邊、端三部分,雲上邊就是我們的控制面,邊就是我們的邊緣節點,端就是跑了我們的一些端側裝置,雲上左邊是一個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緻力于将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等
ADOPTERS就是我們社群的一些采納者,比如說你用了KubeEdge,并且想成為參與者,建議者,你可以提一個PR,把你們寫到這個ADOPTER裡面去,下面的這些就是代碼目錄,主要就是cloud(雲端)、edge(邊緣端)、mappers(接入裝置的mapper端),還有OWNERS是我們項目的一些matiner,主要負責核代碼,比如你對我們社群貢獻比較多,我們可以把你加到OWNERS,幫我們核代碼和檢視代碼。
這個是借鑒了K8s的Kubeadm,可以一鍵部署KubeEdge叢集,在部署KubeEdge叢集時,要先裝一個K8s的master,這個master用任何符合K8s的标準都可以,這個 keadm是基于K8s之上部署KubeEdge系統。
子指令參數:
init:部署雲端元件
join:部署邊緣端元件
gettoken:從雲端擷取邊緣端啟動憑據
reset:重置KubeEdge叢集的雲端和邊緣端
在已經裝好的master上裝我們的雲端,用 init即可:
重要參數:
--kube-config:連接配接K8s Master的憑據
--advertise-address:簽發到邊緣證書裡的IP位址
邊緣端主要用我們的join指令:
--token:邊緣端啟動時通路雲端的憑據
--cloudcore-ipport:邊緣端通路的雲端IP位址
本文分享自華為雲社群《KubeEdge架構解讀:雲原生的邊緣計算平台》,原文作者:技術火炬手。
點選關注,第一時間了解華為雲新鮮技術~