作者 | 新勝 阿里雲技術專家
導讀:OpenYurt 開源兩周以來,以非侵入式的架構設計融合雲原生和邊緣計算兩大領域,引起了不少行業內同學的關注。阿里雲推出開源項目 OpenYurt,一方面是把阿里雲在雲原生邊緣計算領域的經驗回饋給開源社區,另一方面也希望加速雲計算向邊緣延伸的進程,並和社區共同探討未來雲原生邊緣計算架構的統一標准。為了更好地向社區和用戶介紹 OpenYurt,我們特地推出【深度解讀OpenYurt】系列文章,本文為系列文章的第二篇,詳細介紹了 OpenYurt 的邊緣自治能力的設計細節。
系列文章推薦:
OpenYurt介紹
5 月 29 號 OpenYurt 正式開源了。OpenYurt 作為公共雲服務 ACK@Edge 的核心框架,已經應用於 CDN、音視頻直播、物聯網、物流、工業大腦、城市大腦等實際應用場景中,並服務於阿里雲 LinkEdge、盒馬、優酷、視頻雲等多個業務或項目中。目前開源的能力包括:
- 邊緣自治能力
- 原生 K8s 集群一鍵式轉換為邊緣集群
項目地址: OpenYurt, 歡迎大家一起來參與開源!
邊緣自治特性
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
,相信也會讓雲原生愛好者更為接受。
參考鏈接
OpenYurt 項目地址:https://github.com/alibaba/openyurt,歡迎大家參與共建!有疑問可加入釘釘交流群:31993519
課程推薦
為了更多開發者能夠享受到 Serverless 帶來的紅利,這一次,我們集結了 10+ 位阿里巴巴 Serverless 領域技術專家,打造出最適合開發者入門的 Serverless 公開課,讓你即學即用,輕松擁抱雲計算的新范式——Serverless。
點擊即可免費觀看課程:https://developer.aliyun.com/learning/roadmap/serverless
“阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的公眾號。”