在 openEuler 上通過 KubeEdge+iSulad 搭建雲邊協同叢集

語言: CN / TW / HK

本文非廣告,分享一篇尤拉系統關於邊緣計算相關的文章。

9月,全新的 openEuler 21.09 正式釋出。 openEuler 21.09 是尤拉正式升級面向數字基礎設施的開源作業系統後的第一個社群創新版本,基於一套作業系統架構,支援多樣性裝置、應用一次開發,覆蓋全場景。 面向數字基礎設施的開源 作業系統 openEuler,聯手面向萬物互聯的智慧終端作業系統鴻蒙,進一步打通數字全場景。 伴隨 openEuler 社群的快速發展,面向場景化的 SIG 不斷組建,openEuler 的應用邊界從最初的伺服器場景,逐步拓展到雲端計算、邊緣計算、嵌入式等更多場景。

概述

隨著邊緣裝置數量指數級增長,以及裝置效能的提升,資料量爆發式增長,資料規模已由原來的 EB 級擴充套件到 ZB 級。資料回傳中心雲處理成本太高,目前業界對邊緣計算的價值已經被證明。openEuler 21.09 釋出了邊緣版本 openEuler 21.09 Edge 探索邊緣計算場景的能力。openEuler 21.09 Edge 集成了邊雲協同框架 KubeEdge,具備邊雲應用統一管理和發放等基礎能力,未來將通過增強智慧協同提升 AI 易用性和場景適應性,增強服務協同實現跨邊雲服務發現和流量轉發,增強資料協同提升南向服務能力。

目前提供統一的跨邊雲的協同框架(KubeEdge+),實現邊雲之間的應用管理與部署,跨邊雲的通訊,以及跨邊雲的南向外設管理等基礎能力。配置感知:GitOps 會感知 git 配置庫中叢集配置資訊的變化,給部署引擎發起叢集相應的操作請求。

未來還將提供:

  1. 邊雲服務協同:邊側部署 EdgeMesh Agent,雲側部署 EdgeMesh Server 實現跨邊雲服務發現和服務路由;

  2. 完善邊緣南向服務:南向接入 Mapper,提供外設 Pofile 及解析機制,以及實現對不同南向外設的管理、控制、 業務流的接入,可相容 EdgeX Foundry 開源生態;

  3. 邊緣資料服務:通過邊緣資料服務實現訊息、資料、媒體流的按需持久化,並具備資料分析和資料匯出的能力

  4. 邊雲 AI 協同架構(Sedna):基於開源 sedna 框架,提供基礎的邊雲協同推理、聯邦學習、增量學習等能力, 並實現了基礎的模型管理、資料集管理等,使能開發者快速開發邊雲 AI 協同特性,以及提升使用者邊雲 AI 特性的 訓練與部署效率。

openEuler 21.09 Edge 深度集成了邊雲協同框架 KubeEdge,作業系統映象內建了 KubeEdge 全套的軟體包並配套詳細的部署文件,使用者可以按照文件簡單、快速的啟動 KubeEdge,將運行了 openEuler 21.09 Edge 的裝置納管成一個邊緣節點。邊緣節點可以理解為地理位置分佈在“邊緣”的 K8s 工作節點,對於使用者來說與 K8s 工作節點無異,它用於執行邊緣應用,處理使用者的資料,並安全、便捷地和雲端應用進行協同。openEuler 21.09 Edge 啟用 KubeEdge 參考文件:《KubeEdge 部署文件》。KubeEdge 100%相容 Kubernetes 原生能力,支援使用者使用 Kubernetes 原生 API 統一管理邊緣應用,此外還具有獨有的裝置管理 API 用於管理海量邊緣裝置,openEuler 21.09 Edge 使用 KubeEdge 的使用手冊請參考:《KubeEdge 使用手冊》。

邊緣計算平臺 KubeEdge

邊緣計算的挑戰

邊緣計算的應用場景已經深入到社會的方方面面並與人們的生活息息相關,例如智慧家居、智慧醫療、智慧城市、車聯網、工業網際網路、智慧城市、AR/VR/MR、智慧農業、智慧零售等等。

不同的應用場景下邊緣計算的形態與定義具有差異性,主要分為現場/接入邊緣、城市邊緣、省級邊緣和中心雲等不同的形態,不同形態下的典型應用與算力需求都是不同的。邊緣計算形態的差異性和自身特點帶來了諸多的挑戰:

  • 邊緣計算 細分領域眾多互操作性差

  • 邊雲通訊網路質量低,時延高,且邊緣經常位於私有網路,難以實現雙向通訊

  • 邊緣資源受限,需要輕量化的元件管理執行邊緣應用

  • 邊緣離線時,需要具備 業務自治本地故障恢復 等能力

  • 邊緣節點高度分散,如何高效管理,降低運維成本

  • 如何對 異構資源 進行標準化管理和靈活配置

邊雲協同框架 KubeEdge

KubeEdge 依託於 K8s 的容器編排和排程能力,併為雲和邊緣之間的網路,應用部署和元資料同步提供基礎架構支援的開源系統。KubeEdge 結合了雲原生的核心優勢,解決了邊緣計算場景下的挑戰,在生態上保持開放,並支援海量邊緣裝置管理、支援複雜的邊雲網絡環境、應用/資料邊緣自治等能力。KubeEdge 在架構上分為雲端元件 CloudCore 和邊緣側 EdgeCore,詳細的架構細節可以參考文件:

https://docs.kubeedge.io/en/docs/architecture/

KubeEdge 架構圖

openEuler 21.09 Edge 已整合 KubeEdge 全套軟體包,支援搭載了 openEuler 21.09 Edge 作業系統的機器可以部署 CloudCore 元件,成為雲端裝置,或者部署 EdgeCore 元件,成為邊緣節點。openEuler 21.09 Edge 現已在多個邊緣應用場景中落地,作為邊緣計算的基礎底座。

邊雲服務協同 EdgeMesh

邊緣計算場景下的邊緣節點大多呈離散式分佈,節點之間的物理網路拓撲非常複雜。邊緣網路割裂,微服務跨邊雲、邊邊部署,微服務間如何自動發現及互相通訊是一個需要解決的難題。分散式協同網路外掛 EdgeMesh 作為 KubeEdge 的一部分,遮蔽了複雜的邊緣網路,負責資料面的流量代理工作,其核心優勢在:

  • 跨子網通訊:基於 LibP2P 實現,利用中繼和打洞技術來提供容器間的跨子網邊邊和邊雲通訊能力。

  • 雲原生體驗:為 KubeEdge 叢集中的容器應用提供與雲原生一致的服務發現與流量轉發體驗。

  • 輕量化:每個節點僅需部署一個 Agent,邊緣側無需依賴 CoreDNS、Kube-Proxy 和 CNI 外掛等原生元件。

  • 低時延:通過 UDP 打洞,完成 Agent 之間的點對點直連,資料通訊無需經過多次中轉。

  • 高可靠性:在底層網路拓撲結構不支援打洞時,通過 Server 中繼轉發流量,保障服務之間的正常通訊。

  • 非侵入式設計:使用 Kubernetes Service 原生介面,無需自定義 CRD,降低使用者學習和使用成本。

EdgeMesh 架構圖

EdgeMesh 現已從 KubeEdge 中解耦,支援外掛化部署,詳細的部署文件可參考:https://github.com/kubeedge/edgemesh。EdgeMesh 與 Istio 之間的對比測試結果表明:在資源佔用方面,EdgeMesh 會比 Istio 少得多。主要原因在於 Istio 的 sidecar 模式會在每一個 Pod 中注入一個 istio-proxy 代理元件,而 EdgeMesh-Agent 是節點級的代理元件,每個節點僅有一個。單個數據面的資源開銷 edgemesh-agent 也比 istio-proxy 要少:記憶體消耗是 istio-proxy 的 30%左右,CPU 消耗是 istio-proxy 的 10%左右。

邊雲 AI 協同架構:Sedna

人工智慧也正逐步向邊緣遷移,將雲上 AI 能力下沉到邊緣節點,做到本地處理,打通 AI 的最後一公里。在 KubeEdge 社群中,AI 類應是使用最多的邊緣應用,目前有非常多的開發者和使用者正在基於 KubeEdge 部署邊緣 AI 應用。KubeEdge SIG AI 致力於解決 AI 在邊緣落地過程中的上述挑戰,提升邊緣 AI 的效能和效率。結合前期將邊雲協同機制運用在 AI 場景的探索,AI SIG 成員聯合發起了 Sedna 子專案,將最佳實踐經驗固化到該專案中。

Sedna 架構圖

Sedna 基於 KubeEdge 提供的邊雲協同能力,實現 AI 的跨邊雲協同訓練和協同推理能力,支援業界主流的 AI 框架,包括 TensorFlow/Pytorch/PaddlePaddle/MindSpore 等,支援現有 AI 類應用無縫下沉到邊緣,快速實現跨邊雲的增量學習,聯邦學習,協同推理,聯合推理,終身學習等能力,最終達到降低成本、提升模型效能、保護資料隱私等效果。Sedna 的核心特性如下:

  • 提供邊雲協同 AI 基礎框架:提供基礎的邊雲協同資料集管理、模型管理,方便開發者快速開發邊雲協同 AI 應用

  • 提供邊雲協同訓練和推理框架:- 聯合推理: 針對邊緣資源需求大,或邊側資源受限條件下,基於邊雲協同的能力,將推理任務解除安裝到雲端,提升系統整體的推理效能 - 增量訓練: 針對小樣本和邊緣資料異構的問題,模型可以在雲端或邊緣進行跨時間自適應優化 - 聯邦學習: 針對資料大,原始資料不出邊緣,隱私要求高等場景,模型在邊緣訓練,引數雲上聚合,可有效解決資料孤島的問題 - 終身學習:針對小樣本和邊緣資料異構的問題

通過雲端知識庫提供記憶功能,讓邊緣積累的樣本知識能在持續更新同時被持久化,從而處理災難性遺忘問題;結合增量訓練和多工訓練,同時實現跨時間與跨情景的知識遷移,從而更好地處理未知任務。

one more thing

  • 相容主流 AI 框架 TensorFlow、Pytorch、PaddlePaddle、MindSpore 等

  • 針對雲邊協同訓練和推理,預置難例判別、引數聚合演算法,同時提供可擴充套件介面,方便第三方演算法快速整合

openEuler + iSulad +KubeEdge

KubeEdge 的邊緣側元件 EdgeCore 支援容器執行時介面(CRI),使邊緣能夠使用各種容器執行時,如 Docker、containerd、CRI-O 等,而無需重新編譯。這次的 openEuler 21.09 Edge 版同時預安裝了 iSulad,openEuler+iSulad+KubeEdge 強強聯手,為邊緣計算帶來極致輕量的、快速的邊緣應用部署體驗。

什麼是 iSulad

iSulad 是一個輕量級容器 runtime 守護程式,專為 IOT 和 Cloud 基礎設施而設計,具有輕便、快速且不受硬體規格和體系結構限制的特性,支援 ARM 和 X86 等體系架構,可以被更廣泛地應用在雲、IoT、邊緣計算等多個場景。

iSulad 的技術特點如下:

  • 輕量語言:C/C++/Rust

  • 北向介面:提供 CRI 介面,支援對接 Kubernets;同時提供便捷使用的命令列

  • 南向介面:支援 OCI runtime 和映象規範,支援平滑替換

  • 容器形態:支援系統容器、虛機容器等多種容器形態

  • 擴充套件能力:提供外掛化架構,可根據使用者需要開發定製化外掛

以上的特點使得 iSulad 可以不受硬體規格和架構的限制,更小的底噪開銷也使得它的可應用領域更為廣泛。

上文已經說到本次釋出的 openEuler 21.09 Edge 版同時預安裝了 iSulad,開箱即用,使用者在安裝完 openEuler 21.09 Edge 系統後即可直接使用 iSulad,在使用方式上與 Docker 無任何差異,使用者可以直接上手使用。通過簡單的配置,KubeEdge 即可採用 iSulad 作為容器引擎啟動。

openEuler 整合 KubeEdge 驗證

openEuler 21.09 Edge 在版本釋出之前,分別在不同的架構如 x86、arm,虛擬機器、物理機上進行了嚴格的驗證工作並通過。本小節將簡單的指導 openEuler 21.09 Edge 的核心使用流程,具體的使用方式還請參考《KubeEdge 部署文件》。

系統安裝

安裝 openEuler 21.09 Edge 系統是使用它的第一步,openEuler 提供了美觀、友好的安裝介面供系統安裝人員便捷地安裝系統:

openEuler 21.09 Edge 系統安裝介面 1

openEuler 21.09 Edge 系統安裝介面 2

正式進入系統:

啟用 KubeEdge

元件版本

元件 版本
OS openEuler 21.09
Kubernetes 1.20.2-4
iSulad 2.0.9-20210625.165022.git5a088d9c
KubeEdge v1.8.0

節點規劃(示例)

節點 位置 元件
10.2.5.7 雲側(cloud) k8s(master)、isulad、cloudcore
10.2.5.8 邊緣側(edge) isulad、edgecore

前文說過 KubeEdge 是基於 Kubernetes 構建的,所以啟用 KubeEdge 之前我們需要在 cloud 節點上部署 Kubernetes 控制面元件。你可以按照《KubeEdge 部署文件》裡面描述的直接使用 kubeadm 工具進行聯網快速安裝 Kubernetes,也可以使用 openEuler 離線安裝 Kubernetes 的方式。前者部署方便,但需要能夠連線外網,後者則可以離線安裝,具體方式請參考

https://docs.openeuler.org/zh/docs/21.09/docs/Kubernetes/Kubernetes.html。

雲側元件部署

可以選擇 KubeEdge 配套的 keadm 一鍵式部署工具進行部署(需要聯網):

keadm init --advertise-address="10.2.5.7" --kubeedge-version=1.8.0
# 注意--advertise-address引數填寫自己機器的IP

也可以選擇直接啟動 CloudCore(無需聯網):

cloudcore --defaultconfig > /etc/kubeedge/config/cloudcore.yaml
# 編輯cloudcore.yaml配置自己機器的IP
./cloudcore &

這兩種方式都可以使雲側元件 CloudCore 正常執行起來。

邊側元件部署

與雲側元件相同,都可以使用兩種方式對邊側元件進行部署,而且部署的方式相同,這裡不再贅述。

下發邊緣應用

邊緣應用多種多樣,這裡以 nginx 應用為例展示如果下發邊緣應用:

# KubeEdge提供了一個nginx模板,我們可以直接使用
$ kubectl apply -f https://github.com/kubeedge/kubeedge/raw/master/build/deployment.yaml
deployment.apps/nginx-deployment created

檢視是否部署到了邊緣側:

$ kubectl get pod -A -owide | grep nginx
default  nginx-deployment-77f96fbb65-fnp7n  1/1  Running  0  37s  10.244.2.4  edge.kubeedge  <none>  <none>

可以看到,應用已經成功部署到了 edge 節點。

總結

openEuler 社群企業已經超過 300 家,匯聚了處理器、整機到基礎軟體、應用軟體、行業客戶等全產業鏈夥伴,我們歡迎更多的軟體企業和使用者企業加入 openEuler,共建數字基礎設施全場景開源作業系統生態。

參考資料

  1. 邊緣版 openEuler 21.09 Edge 映象下載:https://repo.openeuler.org/openEuler-21.09/edge_img/

  2. openEuler 整合 KubeEdge 文件:https://docs.openeuler.org/zh/docs/21.09/docs/KubeEdge/overview.html

  3. iSulad:https://gitee.com/openeuler/iSulad

  4. KubeEdge 官方文件:https://kubeedge.io/en/docs/