深度解读 OpenYurt:从边缘自治看 YurtHub 的扩展能力
作者 | 新勝 ?阿里云技術(shù)專家
**導(dǎo)讀:OpenYurt 開源兩周以來,以非侵入式的架構(gòu)設(shè)計融合云原生和邊緣計算兩大領(lǐng)域,引起了不少行業(yè)內(nèi)同學(xué)的關(guān)注。阿里云推出開源項目 OpenYurt,一方面是把阿里云在云原生邊緣計算領(lǐng)域的經(jīng)驗回饋給開源社區(qū),另一方面也希望加速云計算向邊緣延伸的進(jìn)程,并和社區(qū)共同探討未來云原生邊緣計算架構(gòu)的統(tǒng)一標(biāo)準(zhǔn)。為了更好地向社區(qū)和用戶介紹 OpenYurt,我們特地推出【深度解讀OpenYurt】**系列文章,本文為系列文章的第三篇,一一介紹了 OpenYurt 中組件?YurtHub?的擴展能力。
系列文章推薦:
- OpenYurt 開箱測評 | 一鍵讓原生 K8s 集群具備邊緣計算能力
- 深度解讀 OpenYurt :邊緣自治能力設(shè)計解析
OpenYurt 介紹
阿里云邊緣容器服務(wù)上線 1 年后,正式開源了云原生邊緣計算解決方案 OpenYurt,跟其他開源的容器化邊緣計算方案的區(qū)別在于:OpenYurt 秉持 Extending your native Kubernetes to edge 的理念,對 Kubernetes 系統(tǒng)零修改,并提供一鍵式轉(zhuǎn)換原生 Kubernetes 為 openyurt,讓原生 K8s 集群具備邊緣集群能力。
同時隨著 OpenYurt 的持續(xù)演進(jìn),也一定會繼續(xù)保持如下發(fā)展理念:
- 非侵入式增強 K8s
- 保持和云原生社區(qū)主流技術(shù)同步演進(jìn)
YurtHub 架構(gòu)說明
在上篇文章中,我們介紹了 OpenYurt 的邊緣自治能力,重點解讀了其中的組件 YurtHub。其架構(gòu)圖如下:
同時在介紹 YurtHub 的優(yōu)勢中我們提到 與 Kubernetes 設(shè)計理念契合,YurtHub 非常容易擴展出更多的能力。具體在 YurtHub 擴展出了什么能力呢?接下來我們將一一展開介紹。
YurtHub 的擴展能力
1. 邊緣網(wǎng)絡(luò)自治
首先介紹一下何謂邊緣網(wǎng)絡(luò)自治:即在邊緣和云端網(wǎng)絡(luò)斷連時,不管時業(yè)務(wù)容器重啟,或是邊緣節(jié)點重啟等,邊緣業(yè)務(wù)的跨節(jié)點通信可以持續(xù)工作或是自動恢復(fù)。
在 OpenYurt 中,實現(xiàn)邊緣網(wǎng)絡(luò)自治需要解決如下的問題(以 flannel vxlan overlay 網(wǎng)絡(luò)為例):
- 問題 1: 節(jié)點上的網(wǎng)絡(luò)配置可以自治,kube-proxy 的 iptables/ipvs 規(guī)則,flannel 的 fdb/arp/route 配置,coredns 的域名解析等網(wǎng)絡(luò)配置,在節(jié)點重啟后可以自動恢復(fù),否則邊緣跨節(jié)點通信將無法持續(xù);
- 問題 2: 業(yè)務(wù)容器 IP 保持不變,因為和云端網(wǎng)絡(luò)斷連狀態(tài)下容器 IP 變化將無法通知到其他節(jié)點;
- 問題 3: vtep(vxlan tunnel endpoint) 的 mac 地址保持不變,原因和容器 IP 保持不變類似。
從問題 1 可以看出,必須解決 kube-proxy/flannel/coredns 等組件的自治,才能實現(xiàn)網(wǎng)絡(luò)配置的自治。如果之前邊緣自治是采用重構(gòu) kubelet 來實現(xiàn)的話,要實現(xiàn)邊緣網(wǎng)絡(luò)自治就會碰到很大的麻煩,如果強行把重構(gòu)的 kubelet 自治能力移植到各個網(wǎng)絡(luò)組件 (kube-proxy/flannel/coredns),也對整個架構(gòu)將是噩夢。
在 OpenYurt 中因為 YurtHub 的獨立性,kube-proxy/flannel/coredns 等網(wǎng)絡(luò)組件輕松使用 YurtHub 來實現(xiàn)網(wǎng)絡(luò)配置的自治能力。因為 YurtHub 緩存了 service 等網(wǎng)絡(luò)配置資源在 local storage,即使斷網(wǎng)并且節(jié)點重啟,網(wǎng)絡(luò)組件仍然可以獲得斷網(wǎng)前的 object 狀態(tài)以及相應(yīng)的配置信息。如下圖所示:
問題 2,3 和 Kubernetes core 無關(guān),主要涉及到 cni 插件和 flanneld 的增強,后續(xù)文章中再詳細(xì)介紹。
2. 多云端地址支持
公有云上的 Kubernetes 高可用部署時,多實例 kube-apiserver 前面一般都掛了一個 SLB,但是在專有云場景下或者邊緣計算場景下,節(jié)點需要通過多個云端地址來訪問。比如:
- 專有云場景:因為沒有 SLB 服務(wù),用戶需要需要在云端通過 VIP 方式來自行實現(xiàn) kube-apiserver 的負(fù)載均衡,或者像 kubespray 那樣在每個節(jié)點上部署一個 nginx 來實現(xiàn)多云端地址的訪問;
- 邊緣計算場景: 考慮到邊緣和云端之間網(wǎng)絡(luò)的穩(wěn)定性和安全性要求,某些場景下用戶也通過專線和公網(wǎng)兩種方式和云端通信,比如優(yōu)先采用專線,當(dāng)專線故障時能自動切換到公網(wǎng)通信。
YurtHub 正式考慮到了上述的需求,支持多云端地址訪問。云端地址的負(fù)載均衡模式可以選擇:
- rr(round-robin): 輪轉(zhuǎn)模式,默認(rèn)選擇該模式;
- priority: 優(yōu)先級模式,高優(yōu)先級地址故障后才使用低優(yōu)先級地址。
具體可以參照 YurtHub 的 LB 模塊,如下圖所示:
3. 節(jié)點維度的云端流控
對于一個分布式系統(tǒng)來說,流控都是一個無法回避的問題。原生 Kubernetes 從集群視角在 kube-apiserver 中以及從訪問者視角在 client-go 庫中封裝了流量管控,在邊緣計算場景下,client-go 的流量管控既分散又對業(yè)務(wù)有一定侵入,顯然不能很好的解決流控問題。
YurtHub 在邊緣可以接管不論是系統(tǒng)組件還是業(yè)務(wù)容器對云端訪問的流量,可以很好的解決節(jié)點維度的云端流控問題。目前 YurtHub 的流控配置是:單節(jié)點上對云端的并發(fā)請求數(shù)超過 250 個時,將拒絕新的請求。
4. 節(jié)點證書輪換管理
Kubernetes 已經(jīng)支持節(jié)點證書自動輪換,即當(dāng)節(jié)點證書快過期前,kubelet 會自動向云端申請新的節(jié)點證書。但是在邊緣計算場景下,很有可能因為邊緣和云端網(wǎng)絡(luò)的斷連,造成 kubelet 將無法完成證書的輪換。證書過期后即使和云端網(wǎng)絡(luò)連接恢復(fù),節(jié)點證書也可能無法自動輪換,并造成 kubelet 的頻繁重啟。
YurtHub 在接管節(jié)點和云端通信流量時,同時也可以接管節(jié)點的證書管理。這樣既解決了各類安裝工具對節(jié)點證書的管理的不一致,也解決了證書過期后網(wǎng)絡(luò)再恢復(fù)時的證書輪換問題。另外目前 YurtHub 還是 kubelet 共享節(jié)點證書,YurtHub 的獨立節(jié)點證書管理功能將在近期開源。
5. 其他
YurtHub 除了前面介紹的擴展能力,還有很多有價值的能力,在此也簡單介紹:
- 節(jié)點多租隔離管理:在具備多租隔離能力的 Kubernetes 集群中,假定節(jié)點歸屬于某個租戶,那么 YurtHub 將可以確保節(jié)點上所有云端請求都只返回節(jié)點所屬租戶的資源。比如說 list service 將只返回該租戶的 service。而這種多租隔離能力不需要其他組件做任何修改。當(dāng)然如果要實現(xiàn)集群內(nèi)的多租隔離,需要配合相應(yīng)的多組 CRD 等,詳細(xì)可以參照項目 kubernetes-sigs/multi-tenancy;
- 集群間節(jié)點遷移:某些場景下,邊緣節(jié)點需要從集群 A 遷移到集群 B,常規(guī)操作是先從集群 A 下線,然后再次接入集群 B,最后在集群 B 部署節(jié)點上的應(yīng)用。因為 YurtHub 對節(jié)點流量以及節(jié)點證書的接管,可以直接對 YurtHub 注入集群B的信息,讓節(jié)點無損遷移到集群 B;
- 通過域名訪問云端 kube-apiserver 等等一些其他功能。
總結(jié)
- 通過上述的擴展能力可以看出,YurtHub 不僅僅是邊緣節(jié)點上的帶有數(shù)據(jù)緩存能力的反向代理。而是對 Kubernetes 節(jié)點應(yīng)用生命周期管理加了一層新的封裝,提供邊緣計算所需要的核心管控能力;
- YurtHub 不僅僅適用于邊緣計算場景,其實可以作為節(jié)點側(cè)的一個常備組件,適用于使用 Kubernetes 的任意場景。相信這也會驅(qū)動 YurtHub 向更高性能,更高穩(wěn)定性發(fā)展。
參考鏈接
- kubespray: HA endpoints for K8s
OpenYurt 項目地址:https://github.com/alibaba/openyurt,歡迎大家參與共建!有疑問可加入釘釘交流群:31993519
課程推薦
為了更多開發(fā)者能夠享受到 Serverless 帶來的紅利,這一次,我們集結(jié)了 10+ 位阿里巴巴 Serverless 領(lǐng)域技術(shù)專家,打造出最適合開發(fā)者入門的 Serverless 公開課,讓你即學(xué)即用,輕松擁抱云計算的新范式——Serverless。
點擊即可免費觀看課程:https://developer.aliyun.com/learning/roadmap/serverless
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實踐,做最懂云原生開發(fā)者的公眾號。”
總結(jié)
以上是生活随笔為你收集整理的深度解读 OpenYurt:从边缘自治看 YurtHub 的扩展能力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CNCF 宣布首个中国原创项目 Harb
- 下一篇: 云原生已来,只是分布不均