邊緣計算中kubernetes網絡能大一統嗎?

邊緣計算集羣更靠近終端設備,能提供低延時、高帶寬、高可靠、本地安全隱私保護等特性,且集羣服務器以linux系統爲主,但海量服務器的存在增加了運維難度。

 

談邊緣計算網絡,就得先說說容器以及容器編排系統。對於單機來說,容器技術能有效地將單個操作系統的資源劃分到孤立的組中,以便更好地在孤立的組之間平衡有衝突的資源使用需求。容器實際上是結合了namespace 和 cgroup 的一般內核進程,注意,容器就是個進程[1,2]。Docker 是一個開源的應用容器引擎,在工業界和學術界引起了極大關注。Docker 使用客戶端-服務器(C/S) 架構模式,使用遠程API來管理和創建Docker容器。Docker 容器通過 Docker 鏡像來創建。其架構如下圖所示[8]:

  • 鏡像(Image):Docker 鏡像(Image),就相當於是一個 root 文件系統。

  • 容器(Container):鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。

  • 倉庫(Repository):倉庫可看着一個代碼控制中心,用來保存鏡像。

 

後來,爲了實現一個集羣(多臺服務器)中所有容器中的應用相互協調、共同工作,Apache Mesos、Google Kubernetes 以及 Docker Swarm 等容器編排工具應運而生。那麼讓集羣中所有容器中的應用相互協調工作的基礎是什麼呢?這便是邊緣計算網絡要解決的問題。

 

Kubernetes在17年就已佔據77%市場份額[3],而後也逐年上升。因此,主要來看看kubernetes。Kubernetes(k8s)是自動化容器操作的開源平臺,這些操作包括部署,調度和節點集羣間擴展。其架構組件較多,不一一贅述,讀者可自行查閱。這裏着重提一下Pod。Pod是kubernetes中可以被創建、銷燬、調度的最小單元,其中包含pause容器,以及一個或一組應用容器。如下圖所示,一臺主機節點可以創建多個Pod,每個Pod中能容納多個容器,但都會在最初創建pause容器,其他容器與pause容器共享net、ipc、pid等資源。網絡模型也是基於docker的網絡模型創建和使用的。

Docker原生的跨主機網絡模型有overlay,macvlan。macvlan 本身是 linxu kernel 模塊,其功能是允許在同一個物理網卡上配置多個 MAC 地址,即多個 interface,每個 interface 可以配置自己的 IP。macvlan本質上是一種網卡虛擬化技術。macvlan 的最大優點是性能極好,相比其他實現,macvlan 不需要創建 Linux bridge,而是直接通過以太 interface 連接到物理網絡[4]。但macvlan大大增加了路由的複雜度,爲了避免對主機路由的干擾,常常使用overlay網絡模型[5]。

 

Kubernetes可以看做是一個大型的docker容器編排系統,他的CNI(Container NetworkInterface)也遵循docker的原生網絡模型。目前kubernetes CNI有非常多的選擇,如:Flannel、Calico、Canal、Weave、Kube-router[7]和Antrea。

  Flannel: 最成熟、最簡單的選擇

  Calico: 性能好、靈活性最強,目前的企業級主流

  Canal: 將Flannel提供的網絡層與Calico的網絡策略功能集成在一起。

  Weave: 獨有的功能,是對整個網絡的簡單加密,會增加網絡開銷

  Kube-router: kube-router採用lvs實現svc網絡,採用bgp實現pod網絡。

 Antrea支持多種網絡模型(Overlayand non-overlay modes),可以使用VXLAN、Geneve、GRE或STT作爲封裝協議[6]。

 

2019年計算機網絡方向頂級會議NSDI中一篇paper(Slim)吸引了筆者注意。它的motivation是原始overlay網絡每個包在跨主機間通信的過程中,會遍歷兩次系統內核網絡棧(如Figure 2),而Slim的做法是利用SlimRouter和SlimSocket來改造通信過程,讓每個包在跨主機通信時僅僅遍歷一次網絡棧(如Figure 4)。從而提升吞吐,降低CPU佔用。

筆者親測了藉助Slim在跨主機docker裏的服務間通信,能讓TCP的bandwidth提升到主機間通信的極限,並且可以在Antrea這種CNI中直接使用。猜想一下,overlay模式下的其他CNI可能也可以藉助Slim的思想或方法使TCP的bandwidth提升到主機間通信的極限。

 

以小見大,延伸到整個kubernetes網絡世界,筆者認爲,雖然因歷史原因,已經有很多CNI共存於市場,但如果某種CNI能在不同網絡模型下都將性能提升到極致,並且更加方便用戶直接使用的同時留出接口,提供二次開發的可能,那麼有可能如同kubernetes一樣良性循環,有望實現大一統。

作者:曹培睿,上海交通大學。

參考文獻:

[1]https://www.cnblogs.com/shuiguizi/p/10922049.html

[2]https://coolshell.cn/articles/17010.html

[3]https://www.kubernetes.org.cn/3241.html

[4]https://blog.csdn.net/wfs1994/article/details/80659232

[5] Zhuo D, Zhang K, Zhu Y, et al. Slim: OSKernel Support for a Low-Overhead Container Overlay Network[C]. networkedsystems design and implementation, 2019: 331-344.

[6]https://github.com/vmware-tanzu/antrea

[7]https://www.jianshu.com/p/d9330360fc8c

[8]https://www.runoob.com/docker/docker-architecture.html

感謝閱讀,歡迎擴散傳播!感謝!

邊緣計算社區:促進邊緣計算領域知識傳播,中立,客觀,如果您關注邊緣計算、5G、物聯網、雲原生等領域請關注我們。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章