QPS最高提升91% 騰訊云TKE基于Cilium eBPF提升k8s Service性能,騰訊云tke 容器實戰QPS高達91% 騰訊云TKE基于纖毛eBPF提升k8s服務性能前言Kubernetes已經成為集裝箱管理領域事實上的標準,網絡系統是Kubernetes的核心部分。隨著越來越多的業務部署在Kuberne......
前言
Kubernetes已經成為集裝箱管理領域事實上的標準,網絡系統是Kubernetes的核心部分。隨著越來越多的業務部署在Kubernetes,對集裝箱網絡提出了一些新的要求。
1.如何提高網絡的可觀測性,無服務器產品的需求尤為突出。
2.如何最大限度地減少容器對網絡性能的損失
上述需求沖擊引入了傳統的防火墻和負載平衡器技術,如iptables和IPVS。這也促使我們考慮容器網絡訪問鏈路是否可以獨立于節點,從而縮短容器訪問鏈路,提高網絡性能。
EBPF是一項革命性的技術,它可以安全地在內核的許多鉤子點執行程序。該技術可編程性強,無需維護內核模塊,可維護性好。這項技術為滿足上述要求提供了可能性。ciu[1]是基于eBPF技術的容器網絡開源項目,提供網絡互操作、服務負載均衡、安全性和可觀測性等解決方案。
因此,騰訊云容器服務TKE基于Cilium和eBPF實現了獨立網卡模式下的高性能ClusterIP服務方案。TKE致力于提供更高性能、更安全和更易于使用的集裝箱網絡。因此,TKE將持續關注纖毛等前沿的集裝箱網絡技術解決方案,未來將推出更多更完善的纖毛產品化能力。
獨立網卡服務方案
TKE去年推出了新一代的容器網絡方案,實現了一個Pod獨占一個彈性網卡,無需經過節點網絡協議棧(默認命名空間)。但是目前針對ClusterIP的kubeproxy解決方案都依賴于在節點側的網絡協議棧中設置相應的iptables規則,所以這種解決方案不再適用于獨立網卡解決方案。
解決方案之一是Cilium,它提供基于eBPF的地址翻譯能力,從而支持ClusterIP服務。但其原生解決方案只支持veth pair和ipvlan l3的數據平面,完全不支持Pod不通過節點網絡協議棧的數據平面,因此無法原生解決獨立網卡ClusterIP的接入問題。
TKE由此改造了Cilium,使其支持除了原生支持的veth和ipvlan l3之外的第三種數據平面方案,如圖所示(假設pod接入服務IP為172.16.0.2)。在數據平面上,原本掛載在節點側veth上的bpf程序掛載在pod中的獨立網卡(也是彈性網卡)上。它使得Pod的網絡報文在發出的時候做DNAT(目的地址轉換),返回的報文在網卡收到的時候做反向DNAT,從而支持ClusterIP訪問。該數據平面方案可以用作通用方案,以適應Ipvlan l2、SRIOV和其他數據平面場景。
在控制端,Cilium與TKE的VPCCNI模式(包括共享網卡模式和獨立網卡模式)深度融合,用戶無需對業務代碼邏輯做任何修改,即可使用Cilium的功能特性。
性能比較
本文使用wrk工具對Cilium的產品化解決方案進行性能測試,測試確保客戶端Pod和服務器Pod分布在不同的節點。
測試環境:TKE集群,4個CVM節點,配置為服務器5.2個大8,客戶端5.2個小2
測試結果表明,基于纖毛的ClusterIP接入方案性能最佳。在短連接場景下,其QPS比共享網卡的iptables和ipvs方案分別提高了48%和74%,比全局路由的iptables和ipvs方案分別提高了62%和91%。在長連接場景下,其QPS比共享網卡的iptables和ipvs方案分別提高了33%和57%,比全局路由的iptables和ipvs方案分別提高了49%和66%。iptables的性能優于ipvs是因為測試環境中沒有足夠的服務,而ipvs的優勢在于大量服務的場景。
產品化過程中的相關問題
TKE團隊在實現Cilium產品化解決方案的過程中也發現了Cilium項目中的一些問題,相應的解決方案和Cilium支持新數據平面計劃將于近日以pr的形式提交給Cilium社區。
ClusterIP自訪問在獨立網卡方案下被阻止
事實上,上述解決方案并不能完全解決ClusterIP訪問的問題,有一種特殊的場景會阻止訪問。這種場景就是Pod訪問的ClusterIP,它的后端包括它自己。在這種場景下,獨立網卡的Pod發快遞的網絡消息會直接到達IaaS層,不符合預期。
由于獨立網卡Pod中實際上只有兩個網絡設備:loopback device (lo)和elastic網卡,一個簡單的思路就是在發快遞消息之前,通過bpfredirect調用直接將自接入流量重定向到loopback device。基于此,TKE團隊修改了纖毛的相關bpf代碼并提供了解決方案。經過測試,該方案可以解決獨立網卡方案下的ClusterIP自訪問問題。
缺少加載bpf程序的纖毛的名稱
Cilium項目的調試中存在問題。它的bpf程序開發的比較早,很多老的工具集,比如tc,都是用在底層加載bpf代碼。
老tc基于老內核版本(lt;4.15)設計上,它在加載bpf程序時忽略了bpf程序的名稱,導致所有由Cilium加載的bpf程序都是無名的。這會影響對代碼的理解、跟蹤和調試。
為此,TKE團隊結合更新的內核修改了tc工具,這樣當它加載bpf程序時,它將正確地傳入名字。通過這個名字,我們可以發現實際運行的是哪個bpf函數,從而提高Cilium的調試。
用法
申請Cilium支持開啟ClusterIP產品化內測后,創建TKE集群時,在高級設置中開啟ClusterIP增強:
總結和展望
介紹了TKE團隊實現的基于Cilium和eBPF的獨立網卡模式下的高性能ClusterIP服務方案,與目前基于iptables和ipv的傳統網絡方案相比,性能大幅提升(33%91%)。
顯然,Cilium提供的功能不止于此。基于eBPF這一革命性技術,它還提供了安全性、可觀察性、QoS等能力。,而提供更高性能、更安全和更易用的集裝箱網絡是TKE的服務目標。因此,后續TKE將積極參與纖毛社區,與社區共同推出更強更好的容器網絡能力。
參考數據
[1]纖毛工程官網:[https://cilium.io/]
[2] eBPF介紹和參考指南:[https://docs.cilium.io/en/v1.10/bpf/]
[3] Kubernetes服務:【https://Kubernetes . io/docs/concepts/servicesnetworking/Service/】
[4]騰訊云容器服務TKE推出新一代零損耗容器網絡。
特別聲明:以上文章內容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內容、版權或其它問題請于作品發表后的30日內與ESG跨境電商聯系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯系在線顧問
小程序
ESG跨境小程序
手機入駐更便捷
返回頂部