摘要:本篇文章將從KubeEdge架構設計理念、KubeEdge代碼目錄概覽、KubeEdge集群部署三方面帶大家認識KubeEdge。
KubeEdge即Kube+Edge,顧名思義就是依托K8s的容器編排能力和調度能力,實現雲邊協同、計算下沉、海量設備的平滑接入。本篇文章將從KubeEdge架構設計理念、KubeEdge代碼目錄概覽、KubeEdge集群部署三方面帶大家認識KubeEdge。
KubeEdge架構設計理念
1、Kubernetes的架構
這里是一個經典的K8s架構,K8s相信大家已經了解比較多了,它主要是分為控制面和數據面,而現在K8s的生態已經非常火爆了,關於應用管理和容器管理已經形成了一套標准,這里列舉了它的一些優勢:
- 只有API server可以訪問etcd
- 組件通過 API Server 訪問集群狀態
- API采用聲明式設計
- API對象彼此互補、可組合
- 優先使用事件監聽而不是輪詢
- …
2、基於Kubernetes構建邊緣計算的優勢與痛點
核心優勢主要有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)設備接入和管理
缺少邊緣設備抽象
缺少邊緣設備接入協議支持
3、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
4、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集群部署
1、KubeEdge 集群部署工具—— keadm
這個是借鑒了K8s的Kubeadm,可以一鍵部署KubeEdge集群,在部署KubeEdge集群時,要先裝一個K8s的master,這個master用任何符合K8s的標准都可以,這個 keadm是基於K8s之上部署KubeEdge系統。
子命令參數:
init:部署雲端組件
join:部署邊緣端組件
gettoken:從雲端獲取邊緣端啟動憑據
reset:重置KubeEdge集群的雲端和邊緣端
2、KubeEdge 部署 —— 雲端
在已經裝好的master上裝我們的雲端,用 init即可:
重要參數:
--kube-config:連接K8s Master的憑據
--advertise-address:簽發到邊緣證書里的IP地址
3、KubeEdge 部署 —— 邊緣端
邊緣端主要用我們的join命令:
重要參數:
--token:邊緣端啟動時訪問雲端的憑據
--cloudcore-ipport:邊緣端訪問的雲端IP地址
本文分享自華為雲社區《KubeEdge架構解讀:雲原生的邊緣計算平台》,原文作者:技術火炬手。