那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于DPU與SmartNIC的K8s Service解決方案

DPU高性能云異構算力解決方案 ? 來源:DPU高性能云異構算力解決 ? 作者:DPU高性能云異構算 ? 2024-09-02 17:01 ? 次閱讀

1. 方案背景

1.1. Kubernetes Service介紹

Kubernetes Service是Kubernetes中的一個核心概念,它定義了一種抽象,用于表示一組提供相同功能的Pods(容器組)的邏輯集合,并提供了一種方式讓這些Pods能夠被系統內的其他組件發現并訪問。簡單來說,Service提供了一種讓客戶端能夠穩定地連接到后端Pods的機制,即使這些Pods會動態地創建、銷毀或遷移。

Kubernetes Service主要特性和用途

服務發現:Service允許客戶端(如Pods中的應用程序)通過穩定的IP地址和端口號訪問后端Pods集合,而無需關心實際Pod的IP地址或端口號,因為這些信息可能會因為Pod的重啟或遷移而改變。

負載均衡:Kubernetes會自動在Service后面創建的Pods之間分配進入的流量,實現了簡單的負載均衡。這意味著當多個Pods提供了相同的服務時,客戶端的請求可以被均衡地分發到這些Pods上。

支持DNS:Kubernetes支持基于DNS的服務發現,允許Pods通過服務名(而不是IP地址)來相互通信。這大大簡化了服務之間的調用和依賴關系的管理。

定義服務類型:Service可以有多種類型,最常見的是ClusterIP(默認,僅集群內部可訪問)、NodePort(通過集群中每個節點的靜態端口暴露服務)、LoadBalancer(在Cloud環境中,使用云提供商的負載均衡器暴露服務)和ExternalName(將服務映射到DNS名稱,而不是選擇Pods)。

在Kubernetes集群中,kube-proxy作為Service的代理組件,負責實現集群內部及外部對Service的訪問。kube-proxy通過監聽Kubernetes API Server中的Service和Endpoint資源變化,動態地在每個節點上配置網絡規則,確保對Service的請求能夠被正確地路由到后端的Pod實例上。

在iptables 模式下,kube-proxy會在每個節點上通過iptables規則來實現請求的轉發。它會創建一系列的iptables規則,這些規則根據Service的IP和端口,將訪問Service的流量重定向到后端的Pod IP和端口上。這種方式簡單直接,但隨著Service和Pod數量的增加,iptables規則會急劇膨脹,影響性能。

作為iptables的改進,ipvs(IP Virtual Server)模式提供了更高的性能和更好的擴展性。ipvs使用更高效的哈希表來管理網絡規則,可以更快地查找和轉發流量。這使得在大規模集群中,Service的訪問性能得到顯著提升。

1.2. 問題與挑戰

盡管kube-proxy在大多數基礎場景中表現良好,但它也存在一些明顯的局限性:

1、場景簡單:kube-proxy主要適用于簡單的網絡拓撲結構,對于復雜的IaaS(Infrastructure as a Service)場景,如需要支持VPC(Virtual Private Cloud)網絡隔離、靈活的EIP(Elastic IP)使用等高級網絡功能時,顯得力不從心。

2、性能瓶頸:由于kube-proxy的報文轉發完全依賴于軟件實現(無論是iptables還是ipvs),這意味著它無法利用現代硬件(如DPU、SmartNIC)進行網絡加速,在高負載跨節點轉發的情況下,這種軟件實現的性能瓶頸尤為明顯。

3、資源消耗:基于軟件實現的Kubernetes Service,在高負載跨節點轉發的情況下會導致CPU資源消耗過高,從而影響整體系統的穩定性和性能。

與kube-proxy相似,許多開源的容器網絡接口(CNI)插件,如使用Open vSwitch(OVS)的kube-ovn、Antrea等,通常依賴于自己的數據面處理機制來轉發Service網絡流量,在沒有硬件加速的情況下,也面臨類似的性能瓶頸和資源消耗問題。

2. 方案介紹

2.1.整體架構

本方案基于DPU&SmartNIC實現了Kubernetes Service的解決方案,簡稱“馭云Service”。

馭云Service在馭云SDN的架構中實現,其中馭云SDN通過ovn/ovs機制將DPU&SmartNIC加入到同一個ovn集群,對網絡進行統一的虛擬化,整體物理架構圖如所示:

wKgaombVfKSADTRAAAEh7sOTYlY884.png

在Pod/裸機/VM接入DPU卡或SmartNIC卡后,用戶的請求由Service處理后送往對應的Pod/裸機/VM。

軟件整體架構如下:

wKgaombVfKmAWtCnAAG9vIVUhzY541.png

如圖所示,馭云Service基于馭云SDN,上圖各個組件中均會參與處理Service的邏輯,下面分別進行介紹:

ycloud-controller,是SDN系統的控制平面,處理Service的主要邏輯,將用戶創建的Service數據通過ovn轉換成實際的網絡拓撲。

yusurService-controller,處理用戶創建的YusurService資源,翻譯成內置Service資源給ycloud-controller使用。

ycloud-cni,該組件作為一個DaemonSet運行在每個節點上,是SDN的CNI接口,同時也會負責各個節點上Service的一些處理邏輯。

注:馭云SDN參見《基于DPU&SmartNIC的云原生SDN解決方案》

2.2.方案描述

在馭云SDN的概念中,所有后端資源,無論是Pod、VM還是裸金屬服務器,都屬于某一個VPC(虛擬私有云)。VPC實現了邏輯隔離的網絡空間,這意味著不同VPC內的網絡流量不會相互干擾,這提供了重要的安全邊界,同時也便于多租戶環境中的資源管理和隔離。然而,這種隔離也帶來了一個挑戰:如何允許不同VPC之間或者外部網絡訪問這些VPC內的資源。

Service需要解決的就是從不同地方經過Service訪問到這些VPC內的資源,并且根據策略進行請求的負載均衡。在馭云Service中,具體包含以下場景:

集群內部互通(ClusterIP類型Service)

場景①:客戶端在集群VPC內,訪問同VPC下的后端服務:

在這種情況下,客戶端可以直接通過Service的ClusterIP訪問后端服務。ClusterIP是一種虛擬IP地址,由Kubernetes為Service分配,只在集群內部可見。流量在VPC內直接轉發,無需經過額外的網關或負載均衡器。

場景②:客戶端在集群節點上,訪問默認VPC下的一組后端服務:

當客戶端運行在集群節點上時,它同樣可以通過ClusterIP訪問服務。Kubernetes的網絡策略確保流量在節點和后端服務之間正確路由。這種訪問方式同樣限于集群內部,不需要EIP。

集群外部訪問集群內(LoadBalancer類型Service)

場景③:客戶端在集群外部,通過EIP訪問一個VPC下的一組后端服務:

在此場景下,客戶端通過云外訪問集群內的服務。LoadBalancer類型Service會分配一個EIP,此時外部流量通過EIP被路由到集群內部的Service。

場景④:客戶端在集群外部,通過EIP訪問多個VPC下的一組后端服務:

當客戶端需要訪問跨多個VPC的服務時,情況變得復雜。在這種情況下,當外部流量通過EIP進入集群內Service時,Servcie會同時充當網關,將流量正確地路由到目標VPC。

本方案主要從控制面和數據面2各方面進行介紹。

2.2.1. 控制面

在控制層,我們對原生Service進行了封裝,在Kubernetes基礎上擴展了對Service的管理能力,整體控制面結構如下圖所示:

wKgZombVfOqAFeKBAAGutFCsjYY017.png

Service和Endpoint是Kubernetes內置資源。資源Service定義了構造一個Service的基本信息。

由于內置資源無法滿足我們需要功能,包括網絡訪問場景,和多種后端,于是馭云Service增加了YusurService與NetworkProbe兩種自定義資源定義(CRDs):

YusurService: 一種擴展的Service概念,允許定義更廣泛的后端資源,包括Pod、VM、BM(裸金屬服務器)、VNicIP(虛擬網絡接口IP)。通過使用選擇器(selectors),可以靈活地匹配不同類型的后端資源,而不僅僅是Pod。支持定義多種網絡場景,靈活的指定eip和clusterIP等。

NetworkProbe: 用于健康檢查的新CRD,為每個后端資源生成相應的探針,實時監控其健康狀態。這可以確保負載均衡器只將請求轉發給健康的實例。

用戶只需要和YusurService進行交互,yusurService-controller會根據YusurService的信息創建Networkprobe,Endpoint和Service這3種資源。

Service包含網絡配置的大多基本信息,Endpoint資源包含本次配置的所有后端;Networkprobe返回后端健康檢查結果,yusurService-controller會根據Networkprobe的返回結果調整Endpoint所包含的健康后端。

yscloud-controller則會根據Endpoint和Service的信息通過ovn繪制出整個網絡拓撲,打通網絡通路。

通過這樣的架構,系統不僅提供了高級別的抽象來簡化Service管理和后端資源的健康監控,還實現了跨VPC的負載均衡,增強了Kubernetes集群的網絡功能。

2.2.2. 數據面

Service的數據面依賴OVN和OpenVswitch,根據不同的訪問場景,在不同的地方配置Load_Balancer,Load_Balancer是OVN的邏輯概念,可以應用在OVN的邏輯交換機或者邏輯路由器上面,它將在對應的地方上配置DNAT的規則,將訪問VIP的報文轉到合適的后端上去。

下文分別針對控制面中所描述的4種Service使用場景進行說明。

2.2.2.1 同vpc下訪問資源

wKgZombVfPaAHJ-0AAG1H1i3NBQ835.png

當創建了Service之后,LoadBalancer的網絡策略會確保應用在vpc1內的所有Subnet上。當subnet3上的client訪問10.0.0.100時,其請求將首先被subnet3上的LoadBalancer接收。LoadBalancer會基于其算法(例如輪詢、最少連接數等)選擇一個后端Pod,并將數據包的目標地址轉換為所選Pod的實際IP地址。數據包隨后會通過vpc1被轉發到選定的Pod所在的Subnet,例如subnet1,最后轉發至Pod1。

2.2.2.2.從集群節點上訪問vpc內資源

wKgZombVfP6AVgQoAAHKiU4ZLGU015.png

當集群節點上的client訪問10.0.0.100時,報文經過node-interface進入subnet0,經過LoadBalancer將數據包的目標地址轉換為所選Pod的實際IP地址后,通過ovn-cluster到對應subnet,完成一次轉發。

2.2.2.3.從集群外部訪問同一個vpc內資源

wKgZombVfQWAEKmAAAFMXi7JMak347.png

當創建了Service之后,LoadBalancer的網絡策略會應用在vpc1上,當client訪問200.0.0.100時,其請求將首先被這個EIP子網所屬的eipGateway接收。eipGateway會將報文路由到Servic所屬的VPC,vpc1內,此時LoadBalancer規則會基于其算法(例如輪詢、最少連接數等)選擇一個后端Pod,并將數據包的目標地址轉換為所選Pod的實際IP地址。數據包隨后會通過vpc1被轉發到選定的Pod,完成一次轉發。

2.2.2.4.從集群外部訪問多個vpc內資源

wKgaombVfQ6ANckRAAGaxvDN27A032.png

當創建了Service之后,控制器會創建一個service-gateway的邏輯路由器,LoadBalancer的網絡策略會應用在該路由器上,當client訪問200.0.0.100時,其請求將首先被這個eip子網所屬的eipGateway接收。eipGateway會將報文路由到service-gateway上,此時LoadBalancer規則會基于其算法(例如輪詢、最少連接數等)選擇一個后端Pod,并將數據包的目標地址轉換為所選Pod的實際IP地址,源地址轉換為所選service-gateway的系統IP地址。數據包隨后會被轉發到選定的Pod的vpc上,然后vpc將數據包送到Pod,完成一次轉發。

3. 方案測試結果

3.1.創建Service

創建一個帶有特定選擇器和端口映射的Service YAML文件ysvc1.yaml,如下:

apiVersion: iaas.yusur.io/v1
kind: YusurService
metadata:
name: ysvc1
spec:
type: ClusterIP
scope: vpc
vpc: vpc1
ports:
- port: 5001
name: iperf
protocol: TCP
targetPort: 5001
selector:
svc: svc1-ep

使用kubectl apply -f ysvc1.yaml命令創建Service。

使用kubectl get ysvc ysvc1檢查Service,如下:

wKgaombVfTaAWAZeAAMrfFvhW0k948.png

訪問Service clusterIP,訪問成功。

wKgZombVfT6AcsVOAABq0G30D-Y388.png

圖中的netns為service后端同vpc下的一個pod,10.233.46.185為service的clusterIP,5001是service暴露的端口。

3.2.性能對比

3.2.1 Pod的帶寬

帶寬單位Gbits/s。

測試用例 馭云卸載方案 未卸載方案
1 物理節點之間基準測試 163 166
2 物理節點訪問后端在遠端的Service 152 130
3 Pod訪問后端在遠端的Service 151 138

從上面測試數據得出以下結論:

1. 卸載模式下,馭云訪問遠端Service能夠達到接近物理機的帶寬。

2. 卸載模式比非卸載在帶寬上性能提升了20%左右。

3.2.2 Pod的pps

pps單位為Mpps。

測試用例 馭云卸載方案 未卸載方案
1 物理節點之間基準測試 45 45
2 物理節點訪問后端在遠端的Service 25.5 12.1
3 Pod訪問后端在遠端的Service 24.5 12.2

從下面數據得出以下結論:

1. 卸載模式下,馭云訪問遠端Service能夠達到接近物理機的60%pps。

2. 卸載模式比非卸載在pps上性能提升了2倍以上。

3.2.3 Pod的延時

延時單位為us。

測試用例 馭云卸載方案 未卸載方案
1 物理節點之間基準測試 32 32
2 物理節點訪問后端在遠端的Service 33 48
3 Pod訪問后端在遠端的Service 33 44

從上面測試數據得出以下結論:

1. 卸載模式下,馭云訪問遠端Service能夠達到接近物理機的延遲。

2. 卸載模式比非卸載在延遲上降低了20%以上。

3.2.4 RPS

單位為Requests/s。

測試用例 馭云卸載方案 未卸載方案
1 物理節點之間基準測試 15999
2 Pod跨節點訪問Service 15139 11040

從上面測試數據得出以下結論:

1. 卸載模式下,馭云訪問遠端Service能夠達到接近物理機的rps。

2. 卸載模式比非卸載在rps上提升了40%左右。

3.2.5 每條request的CPU指令數以及CPI

每條request的CPU指令數,單位為instructions/request。

測試用例 馭云卸載方案 未卸載方案
Pod跨節點訪問Service 122,613 171,405

CPI,單位為cycles/instruction。

測試用例 馭云卸載方案 未卸載方案
Pod跨節點訪問Service 1.94 1.69

從上面測試數據得出以下結論:

1. 一個請求消耗的CPU指令數量,卸載模式比非卸載模式降低30%左右。

2. 在CPI方面,卸載模式比非卸載模式增大了15%左右。

3. 綜合消耗的CPU指令數量來看,對CPU的消耗減少了25%左右。

4. 優勢總結

基于DPU和SmartNIC的K8s Service解決方案展現出顯著的優勢,具體總結如下:

① 支持復雜網絡拓撲與高級功能

在復雜的網絡拓撲下實現K8s Service,支持VPC網絡隔離和EIP等高級網絡功能,大大增強了Kubernetes集群在IaaS環境中的網絡靈活性和安全性,滿足復雜場景下的網絡需求。

② 顯著提升K8s Service性能

根據測試數據,本方案在帶寬上性能提升了20%左右,pps上性能提升了2倍以上,延遲降低了20%以上。DPU和SmartNIC內置了強大的網絡處理引擎,能夠直接在硬件上完成報文的解析、轉發和路由決策等任務,這種硬件加速機制使得在高負載跨節點轉發時,仍能保持低延遲和高吞吐量,顯著提升了Kubernetes Service的性能。

③ 降低資源消耗與優化系統性能

根據測試數據,本方案對CPU的消耗減少了25%左右。由于DPU和SmartNIC承擔了大部分的網絡處理工作,CPU從繁重的網絡轉發任務中解放出來,可以專注于執行其他更關鍵的計算任務,這不僅降低了CPU的資源消耗,還提升了整體系統的穩定性和性能。

綜上所述,基于DPU和SmartNIC的K8s Service解決方案在應對復雜網絡拓撲、性能瓶頸和資源消耗等方面具有明顯的優勢,能夠顯著提升Kubernetes集群在復雜IaaS環境中的網絡性能和整體穩定性。

本方案來自于中科馭數軟件研發團隊,團隊核心由一群在云計算、數據中心架構、高性能計算領域深耕多年的業界資深架構師和技術專家組成,不僅擁有豐富的實戰經驗,還對行業趨勢具備敏銳的洞察力,該團隊致力于探索、設計、開發、推廣可落地的高性能云計算解決方案,幫助最終客戶加速數字化轉型,提升業務效能,同時降低運營成本。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 云計算
    +關注

    關注

    39

    文章

    7856

    瀏覽量

    137850
  • DPU
    DPU
    +關注

    關注

    0

    文章

    368

    瀏覽量

    24257
  • 云原生
    +關注

    關注

    0

    文章

    252

    瀏覽量

    7983
  • SmartNIC
    +關注

    關注

    0

    文章

    19

    瀏覽量

    3221
收藏 人收藏

    評論

    相關推薦

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對比

    摘要: 今天,日志服務再次升級Kubernetes(k8s)的日志解決方案。1分鐘內即可完成整個集群部署,支持動態擴容,提供采集宿主機日志、容器日志、容器stdout等所有數據源的一站式采集。點此
    發表于 02-28 12:49

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對比

    摘要: 今天,日志服務再次升級Kubernetes(k8s)的日志解決方案。1分鐘內即可完成整個集群部署,支持動態擴容,提供采集宿主機日志、容器日志、容器stdout等所有數據源的一站式采集。點此
    發表于 02-28 12:50

    OpenStack與K8s結合的兩種方案的詳細介紹和比較

    OpenStack與K8S結合主要有兩種方案。一是K8S部署在OpenStack平臺之上,二是K8S和OpenStack組件集成。
    的頭像 發表于 10-14 09:38 ?2.7w次閱讀

    評估K8s可用的最常見的存儲解決方案

    主要是評估K8s可用的最常見的存儲解決方案,并進行基本性能測試。 目前CNCF的存儲格局和解決方案已經更新,它已從2019年的30個解決方案增長到目前的45個
    的頭像 發表于 01-03 10:37 ?1.8w次閱讀
    評估<b class='flag-5'>K8s</b>可用的最常見的存儲<b class='flag-5'>解決方案</b>

    Docker不香嗎為什么還要用K8s

    Docker 雖好用,但面對強大的集群,成千上萬的容器,突然感覺不香了。 這時候就需要我們的主角 Kubernetes 上場了,先來了解一下 K8s 的基本概念,后面再介紹實踐,由淺入深步步為營
    的頭像 發表于 06-02 11:56 ?3493次閱讀

    簡單說明k8s和Docker之間的關系

    這篇文章主要介紹了k8s和Docker關系簡單說明,本文利用圖文講解的很透徹,有需要的同學可以研究下 最近項目用到kubernetes(以下簡稱k8sks之間有
    的頭像 發表于 06-24 15:48 ?3467次閱讀

    K8S集群服務訪問失敗怎么辦 K8S故障處理集錦

    問題1:K8S集群服務訪問失敗? ? ? 原因分析:證書不能被識別,其原因為:自定義證書,過期等。 解決方法:更新證書即可。 問題2:K8S集群服務訪問失敗? curl: (7) Failed
    的頭像 發表于 09-01 11:11 ?1.6w次閱讀
    <b class='flag-5'>K8S</b>集群服務訪問失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    K8S(kubernetes)學習指南

    K8S(kubernetes)學習指南
    發表于 06-29 14:14 ?0次下載

    mysql部署在k8s上的實現方案

    的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。這里主要講 mysql 部署在 k8s 上,mysql 部署在 k8s 上的優勢主要有以下幾點。
    的頭像 發表于 09-26 10:39 ?2553次閱讀

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes簡稱K8s,是一個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful
    發表于 07-19 13:14 ?1153次閱讀

    什么是K3sK8sK3sK8s有什么區別?

    Kubernetes,通常縮寫為 K8s,是領先的容器編排工具。該開源項目最初由 Google 開發,幫助塑造了現代編排的定義。該系統包括了部署和運行容器化系統所需的一切。
    的頭像 發表于 08-03 10:53 ?7704次閱讀

    k8s生態鏈包含哪些技術

    1. Apache APISIX Ingress 定義 ? 在 K8s 生態中,Ingress 作為表示 K8s 流量入口的一種資源,想要讓其生效,就需要有一個 Ingress Controller
    的頭像 發表于 08-07 10:56 ?1296次閱讀
    <b class='flag-5'>k8s</b>生態鏈包含哪些技術

    常用的k8s容器網絡模式有哪些?

    常用的k8s容器網絡模式包括Bridge模式、Host模式、Overlay模式、Flannel模式、CNI(ContainerNetworkInterface)模式。K8s的容器網絡模式多種多樣
    的頭像 發表于 09-19 11:29 ?298次閱讀

    k8s云原生開發要求

    Kubernetes(K8s)云原生開發對硬件有一定要求。CPU方面,建議至少配備2個邏輯核心,高性能CPU更佳。內存至少4GB,但8GB或更高更推薦。存儲需至少20-30GB可用空間,SSD提升
    的頭像 發表于 10-24 10:03 ?276次閱讀
    <b class='flag-5'>k8s</b>云原生開發要求

    k8s和docker區別對比,哪個更強?

    Docker和Kubernetes(K8s)是容器化技術的兩大流行工具。Docker關注構建和打包容器,適用于本地開發和單主機管理;而K8s則提供容器編排和管理平臺,適用于多主機或云環境,具備自動化
    的頭像 發表于 12-11 13:55 ?180次閱讀
    百家乐官网视频下载| 太阳城网上娱乐城| 發中發百家乐官网的玩法技巧和规则 | 百家乐官网实战案例| 迪威百家乐官网娱乐| 百家乐官网三路秘诀| 百家乐官网楼梯缆大全| 百家乐官网最佳打| 尊龙百家乐官网娱乐场开户注册| 老钱庄百家乐官网的玩法技巧和规则 | 百家乐澳门百家乐澳门赌场| 蓝盾百家乐洗码| 百家乐网络游戏信誉怎么样| 百家乐一直下注庄家| 网上百家乐看牌器| 百家乐香港六合彩| 百家乐冼牌机| 大发888免费下载| 百家乐官网代打公司| 百家乐官网翻天youtube| 打百家乐官网纯打庄的方法| 百家乐官网赌博技巧大全| 海王星百家乐官网技巧| 百家乐赌王有哪些| 百家乐和怎么算输赢| 线上龙虎| 澳门百家乐官网游戏说明| 百家乐官网麻将牌| 戒掉百家乐的玩法技巧和规则| 现金网开户| 乐百家乐官网彩娱乐城| 金域百家乐官网的玩法技巧和规则 | 哪个百家乐官网网站信誉好| 百家乐技巧之写路| 大发888奖金| 在线百家乐官网有些一| 三国百家乐官网的玩法技巧和规则| 做生意店铺缺西北角| 哪个百家乐投注平台信誉好| 大发888游戏平台 df888ylcxz46| 鸿运国际|