雲計算

深度解讀 OpenYurt:從邊緣自治看 YurtHub 的擴展能力

頭圖.png

作者 | 新勝  阿里雲技術專家

導讀:OpenYurt 開源兩週以來,以非侵入式的架構設計融合雲原生和邊緣計算兩大領域,引起了不少行業內同學的關注。阿里雲推出開源項目 OpenYurt,一方面是把阿里雲在雲原生邊緣計算領域的經驗回饋給開源社區,另一方面也希望加速雲計算向邊緣延伸的進程,並和社區共同探討未來雲原生邊緣計算架構的統一標準。為了更好地向社區和用戶介紹 OpenYurt,我們特地推出【深度解讀OpenYurt】系列文章,本文為系列文章的第三篇,一一介紹了 OpenYurt 中組件 YurtHub 的擴展能力。

系列文章推薦:

OpenYurt 介紹

阿里雲邊緣容器服務上線 1 年後,正式開源了雲原生邊緣計算解決方案 OpenYurt,跟其他開源的容器化邊緣計算方案的區別在於:OpenYurt 秉持 Extending your native Kubernetes to edge 的理念,對 Kubernetes 系統零修改,並提供一鍵式轉換原生 Kubernetes 為 openyurt,讓原生 K8s 集群具備邊緣集群能力。

同時隨著 OpenYurt 的持續演進,也一定會繼續保持如下發展理念:

  • 非侵入式增強 K8s
  • 保持和雲原生社區主流技術同步演進

YurtHub 架構說明

在上篇文章中,我們介紹了 OpenYurt 的邊緣自治能力,重點解讀了其中的組件 YurtHub。其架構圖如下:

1.png

同時在介紹 YurtHub 的優勢中我們提到 與 Kubernetes 設計理念契合,YurtHub 非常容易擴展出更多的能力。具體在 YurtHub 擴展出了什麼能力呢?接下來我們將一一展開介紹。

YurtHub 的擴展能力

1. 邊緣網絡自治

首先介紹一下何謂邊緣網絡自治:即在邊緣和雲端網絡斷連時,不管時業務容器重啟,或是邊緣節點重啟等,邊緣業務的跨節點通信可以持續工作或是自動恢復。

在 OpenYurt 中,實現邊緣網絡自治需要解決如下的問題(以 flannel vxlan overlay 網絡為例):

  • 問題 1: 節點上的網絡配置可以自治,kube-proxy 的 iptables/ipvs 規則,flannel 的 fdb/arp/route 配置,coredns 的域名解析等網絡配置,在節點重啟後可以自動恢復,否則邊緣跨節點通信將無法持續;
  • 問題 2: 業務容器 IP 保持不變,因為和雲端網絡斷連狀態下容器 IP 變化將無法通知到其他節點;
  • 問題 3: vtep(vxlan tunnel endpoint) 的 mac 地址保持不變,原因和容器 IP 保持不變類似。

從問題 1 可以看出,必須解決 kube-proxy/flannel/coredns 等組件的自治,才能實現網絡配置的自治。如果之前邊緣自治是採用重構 kubelet 來實現的話,要實現邊緣網絡自治就會碰到很大的麻煩,如果強行把重構的 kubelet 自治能力移植到各個網絡組件 (kube-proxy/flannel/coredns),也對整個架構將是噩夢。

在 OpenYurt 中因為 YurtHub 的獨立性,kube-proxy/flannel/coredns 等網絡組件輕鬆使用 YurtHub 來實現網絡配置的自治能力。因為 YurtHub 緩存了 service 等網絡配置資源在 local storage,即使斷網並且節點重啟,網絡組件仍然可以獲得斷網前的 object 狀態以及相應的配置信息。如下圖所示:

2.png

問題 2,3 和 Kubernetes core 無關,主要涉及到 cni 插件和 flanneld 的增強,後續文章中再詳細介紹。

2. 多雲端地址支持

公有云上的 Kubernetes 高可用部署時,多實例 kube-apiserver 前面一般都掛了一個 SLB,但是在專有云場景下或者邊緣計算場景下,節點需要通過多個雲端地址來訪問。比如:

  • 專有云場景:因為沒有 SLB 服務,用戶需要需要在雲端通過 VIP 方式來自行實現 kube-apiserver 的負載均衡,或者像 kubespray 那樣在每個節點上部署一個 nginx 來實現多雲端地址的訪問;
  • 邊緣計算場景: 考慮到邊緣和雲端之間網絡的穩定性和安全性要求,某些場景下用戶也通過專線和公網兩種方式和雲端通信,比如優先採用專線,當專線故障時能自動切換到公網通信。

YurtHub 正式考慮到了上述的需求,支持多雲端地址訪問。雲端地址的負載均衡模式可以選擇:

  • rr(round-robin): 輪轉模式,默認選擇該模式;
  • priority: 優先級模式,高優先級地址故障後才使用低優先級地址。

具體可以參照 YurtHub 的 LB 模塊,如下圖所示:

3.png

3. 節點維度的雲端流控

對於一個分佈式系統來說,流控都是一個無法迴避的問題。原生 Kubernetes 從集群視角在 kube-apiserver 中以及從訪問者視角在 client-go 庫中封裝了流量管控,在邊緣計算場景下,client-go 的流量管控既分散又對業務有一定侵入,顯然不能很好的解決流控問題。

YurtHub 在邊緣可以接管不論是系統組件還是業務容器對雲端訪問的流量,可以很好的解決節點維度的雲端流控問題。目前 YurtHub 的流控配置是:單節點上對雲端的併發請求數超過 250 個時,將拒絕新的請求。

4. 節點證書輪換管理

Kubernetes 已經支持節點證書自動輪換,即當節點證書快過期前,kubelet 會自動向雲端申請新的節點證書。但是在邊緣計算場景下,很有可能因為邊緣和雲端網絡的斷連,造成 kubelet 將無法完成證書的輪換。證書過期後即使和雲端網絡連接恢復,節點證書也可能無法自動輪換,並造成 kubelet 的頻繁重啟。

YurtHub 在接管節點和雲端通信流量時,同時也可以接管節點的證書管理。這樣既解決了各類安裝工具對節點證書的管理的不一致,也解決了證書過期後網絡再恢復時的證書輪換問題。另外目前 YurtHub 還是 kubelet 共享節點證書,YurtHub 的獨立節點證書管理功能將在近期開源。

5. 其他

YurtHub 除了前面介紹的擴展能力,還有很多有價值的能力,在此也簡單介紹:

  • 節點多租隔離管理:在具備多租隔離能力的 Kubernetes 集群中,假定節點歸屬於某個租戶,那麼 YurtHub 將可以確保節點上所有云端請求都只返回節點所屬租戶的資源。比如說 list service 將只返回該租戶的 service。而這種多租隔離能力不需要其他組件做任何修改。當然如果要實現集群內的多租隔離,需要配合相應的多組 CRD 等,詳細可以參照項目 kubernetes-sigs/multi-tenancy
  • 集群間節點遷移:某些場景下,邊緣節點需要從集群 A 遷移到集群 B,常規操作是先從集群 A 下線,然後再次接入集群 B,最後在集群 B 部署節點上的應用。因為 YurtHub 對節點流量以及節點證書的接管,可以直接對 YurtHub 注入集群B的信息,讓節點無損遷移到集群 B;
  • 通過域名訪問雲端 kube-apiserver 等等一些其他功能。

總結

  • 通過上述的擴展能力可以看出,YurtHub 不僅僅是邊緣節點上的帶有數據緩存能力的反向代理。而是對 Kubernetes 節點應用生命週期管理加了一層新的封裝,提供邊緣計算所需要的核心管控能力;
  • YurtHub 不僅僅適用於邊緣計算場景,其實可以作為節點側的一個常備組件,適用於使用 Kubernetes 的任意場景。相信這也會驅動 YurtHub 向更高性能,更高穩定性發展。

參考鏈接

OpenYurt 項目地址:https://github.com/alibaba/openyurt,歡迎大家參與共建!有疑問可加入釘釘交流群:31993519

課程推薦

為了更多開發者能夠享受到 Serverless 帶來的紅利,這一次,我們集結了 10+ 位阿里巴巴 Serverless 領域技術專家,打造出最適合開發者入門的 Serverless 公開課,讓你即學即用,輕鬆擁抱雲計算的新範式——Serverless。

點擊即可免費觀看課程:https://developer.aliyun.com/learning/roadmap/serverless

阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的公眾號。”

Leave a Reply

Your email address will not be published. Required fields are marked *