雲栖号資訊:【 點選檢視更多行業資訊】
在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!
導讀:OpenYurt 開源兩周以來,以非侵入式的架構設計融合雲原生和邊緣計算兩大領域,引起了不少行業内同學的關注。阿裡雲推出開源項目 OpenYurt,一方面是把阿裡雲在雲原生邊緣計算領域的經驗回饋給開源社群,另一方面也希望加速雲計算向邊緣延伸的程序,并和社群共同探讨未來雲原生邊緣計算架構的統一标準。為了更好地向社群和使用者介紹 OpenYurt,我們特地推出【深度解讀OpenYurt】系列文章,本文為系列文章的第二篇,詳細介紹了 OpenYurt 的邊緣自治能力的設計細節。
OpenYurt介紹
5 月 29 号 OpenYurt 正式開源了。OpenYurt 作為公共雲服務 ACK@Edge 的核心架構,已經應用于 CDN、音視訊直播、物聯網、物流、工業大腦、城市大腦等實際應用場景中,并服務于阿裡雲 LinkEdge、盒馬、優酷、視訊雲等多個業務或項目中。目前開源的能力包括:
- 邊緣自治能力
- 原生 K8s 叢集一鍵式轉換為邊緣叢集
邊緣自治特性
1. 特性介紹
将 Kubernetes 系統延展到邊緣計算場景,邊緣節點将通過公網和雲端連接配接,從公網的不穩定性以及成本等因素考慮,邊緣要求斷網狀态或者弱網狀态下邊緣業務可以持續運作。我們從 Gartner 的邊緣計算報告中提到的邊緣計算訴求中,邊緣自治也是主要訴求之一:

而從 Kubernetes 系統架構來看,主要因為 Slave Agent(Kubelet) 中的容器資訊儲存在記憶體中,斷網狀态下因為無法從雲端擷取業務資料,如果節點或者 Kubelet 重新開機,将無法進行業務容器恢複。如下圖:
2. 邊緣自治需要解決的問題
是以邊緣自治在 Kubernetes 系統裡,需要解決下面的問題:
- 問題 1: 節點異常或重新開機時,記憶體資料丢失,網絡斷連時業務容器無法恢複;
- 問題 2: 網絡長時間斷連,雲端控制器對業務容器進行驅逐;
- 問題 3: 長時間斷連後網絡恢複時,邊緣和雲端資料的一緻性保障。
1)問題 1 的解決方案
解決方案 1:
重構 kubelet 元件,複用或者參考 kubelet 的 checkpoint 功能,持久化容器業務資料到本地磁盤,網絡斷連狀态下利用本地緩存資料實作業務恢複。
該方案經過重構 kubelet,成功解決邊緣自治的需求,具備如下優點:
- 通過重構 kubelet,友善在 kubelet 中內建對端裝置的管理能力;
- 通過重構 kubelet,可以對 kubelet 進行輕量化改造。此優點但是也意味着原生 kubelet 功能缺失的問題。
但是也有如下不足:
- 可維護性差: 侵入式修改 kubelet core,跟随社群版本更新非常困難,熟悉kubelet的同學都會有同感,kubelet 元件由于直接負責跟計算,存儲,網絡互動,是以其代碼結構和邏輯異常複雜。是以持續維護一個深度修改過的 kubelet 的工作量可想而知;
- 可擴充性差: 因為自治能力直接做到重構的 kubelet 元件中,這樣邊緣節點如果其他元件(如網絡元件)想複用邊緣自治能力将面臨重複造輪子的境地;
- 場景耦合更深: 例如在 kubelet 重構中增加了 IOT 裝置管理,将可能使 kubelet 和 IOT 場景深度耦合。
解決方案 2 (OpenYurt使用方案):
在邊緣節點上增加 web 緩存及請求代理 hub(取名為 YurtHub,商業産品中名為 edge-hub),邊緣側元件(kubelet)和雲端通信将經由該元件。YurtHub 相當于帶有資料緩存功能的”透明網關“,和雲端網絡斷連狀态下,如果節點或者 kubelet 重新開機,将從 YurtHub 中擷取到業務容器相關資料,有效解決邊緣自治的問題。
相比解決方案 1,有如下優勢:
- kubelet 零修改,意味原生 kubelet 能力天然具備,同時跟随 Kubernetes 版本更新零負擔;
- 可擴充性強,節點其他元件輕松複用 YurtHub;
- 與 Kubernetes 設計理念契合,YurtHub 非常容易擴充出更多的能力。
當然 OpenYurt 的解決方案,也會面臨如下的問題:原生 kubelet 比較 high-weight,在資源緊張場景下應用會比較挑戰。目前商業産品中節點規格推薦 2U4G 起步。
2)問題 2 和 3 的解決方案
問題 2 和問題 3 的解決方案相比比較簡單,是以不展開做過多的方案說明和比較。
問題 2:原生雲端元件 kube-controller-manager 對 Pod 驅逐解決
該問題正是通過開源元件 yurt-controller-manager 中的 Node Controller 來解決的。如 github 首頁介紹所示:
問題 3: 網絡恢複時,邊緣和雲端網絡一緻性
Kubernetes 系統中,使用者是通過雲端對邊緣進行管控的(如應用部署,更新,擴縮容等),是以當邊緣和雲端網絡斷聯時,邊緣節點将不會從雲端同步使用者對節點的管控操作,是以斷網期間,隻要 YurtHub 保持本地緩存資料和斷網時刻一緻(即斷網期間邊緣緩存資料不更新),而網絡恢複時,再從雲端同步最新資料即可。
後續展開
OpenYurt 剛剛開源,也意味這塊工作剛剛開始,相信我們更貼近雲原生的架構設計,會支援 OpenYurt 走的更遠。同時 OpenYurt 設計理念:Extending your native Kubernetes to edge,相信也會讓雲原生愛好者更為接受。
【雲栖号線上課堂】每天都有産品技術專家分享!
課程位址:
https://yqh.aliyun.com/live立即加入社群,與專家面對面,及時了解課程最新動态!
【雲栖号線上課堂 社群】
https://c.tb.cn/F3.Z8gvnK
原文釋出時間:2020-06-19
本文作者:新勝 阿裡雲技術專家
本文來自:“
dockone”,了解相關資訊可以關注“dockone”