天天看點

阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡

阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡

背景

随着各種類型的應用的容器化,除了無狀态的微服務應用,越來越多像資料庫、機器學習等對網絡性能和延時非常敏感的應用也逐漸跑在了Kubernetes上。對于這種網絡性能和延時特别敏感的應用,阿裡雲Kubernetes叢集的網絡方案Terway在之前提供了Pod獨占ENI(彈性網卡)的網絡模式,讓Pod可以擁有和ECS完全一樣的一張彈性網卡,性能相對ECS完全沒有損失。但ECS可以綁定的彈性網卡數量有限,使用獨占ENI(彈性網卡)的模式的機器隻能運作個位數的Pod數,應用沒辦法部署太密集。 是以Terway在ENI多IP的模式中推出了基于IPVlan的Pod網絡,每個ENI可以供多達10個Pod共享,并且IPVlan的核心技術也能将損耗降到最低,在實際測試中網絡延時可以媲美獨占ENI模式。

原理概要

IPVlan是一種Linux核心的網絡虛拟化技術,從Linux 3.19版本開始支援,通過IPVlan可以将一個網絡接口建立出多個子虛拟接口。這些子虛拟接口可以設定不同的IP位址,父網卡會根據包中的IP位址決定把包轉發到哪個子虛拟網卡。這些子虛拟網卡可以供k8s的每個Pod使用,進而讓多個Pod可以共用一張彈性網卡。而對于Aliyun的ENI(彈性網卡),支援在網卡上額外再配置設定10-20個輔助VPC IP,可以動态配置設定輔助IP用于IPVlan子虛拟網卡配置。

阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡

适用場景和要求

由于IPVlan是比較新的核心版本才支援的虛拟化技術,是以有一定的要求和試用場景:

适用場景:

  • Pod和Pod直接通信的需求更多時,由于IPVlan通路k8s service需要額外走SNAT,是以pod通路Service的場景性能差一些(具體可參考 https://kernel.taobao.org/2019/11/ipvlan-for-kubernete-net/ )
  • 對網絡延時敏感的應用,比如遊戲、資料庫、機器學習等
  • 獨占ENI的模式沒辦法滿足規模需求時
  • IPVlan模式目前還不支援Kubernetes NetworkPolicy

要求:

  • 阿裡雲Kubernetes叢集Terway網絡ENI多IP模式,并且Terway元件更新到最新版本
  • 節點使用Aliyun Linux2的作業系統(核心版本4.19,滿足IPVlan模式需求)

使用方法

1. 建立阿裡雲Kubernetes叢集

  • 選擇作業系統為AliyunLinux2
阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡
  • 選擇Terway網絡插件
阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡

2. 修改Terway轉發模式為IPVlan

  • 建立好叢集後,通過kubectl連接配接到該叢集,然後修改Terway的configmap:
kubectl edit cm eni-config -n kube-system           
  • 增加轉發模式配置:
阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡
  • 修改kube-proxy中叢集網段到169.254.1.1/32來強制SNAT Service的流量
kubectl edit cm -n kube-system kube-proxy-worker
(如果有master節點的話)kubectl edit cm -n kube-system kube-proxy-master           

修改其中

clusterCIDR

從Pod網段到

169.254.1.1/32

  • 重新開機叢集的每個節點

3. 驗證重新開機節點能正常啟動Pod

性能對比

時延

時延采用ping,netperf做了測試。ping測試了普通模式和洪泛模式,netperf測試了tcp_rr, udp_rr兩種模式。結果如下:

阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡

其中IPVlan, ENI模式較為接近。政策路由普通ping模式下約有20ns增加,洪泛ping模式7ns增加;udp_rr下降約8%、tcp_rr下降約10%。

帶寬

帶寬測試采用netperf測試了tcp_stream和不同包長下的udp_stream, 結果如下:

阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡阿裡雲Kubernetes叢集使用IPVlan加速Pod網絡

其中udp stream模式下ENI,IPVlan較為接近約0.02%以下,政策路由約7%左右。吞吐IPVlan比ENI約有25%下降,政策路由相比ENI約有50%下降。 tcp stream模式下由于gso, gro的加速,吞吐較為接近。

參考文檔:

阿裡雲系統組技術部落格--Kubernetes網絡的IPVlan方案 

 (感謝阿裡雲系統組貢獻了Kubernetes IPVlan的網絡模式)