使用 LACP 綁定的 Kubernetes pod 之間的最大吞吐量
我們目前有一個 kubernetes 集群(使用 calico),其中所有工作節點都通過 lacp 綁定連接在一起(2x10GB 連結,LACP 模式 4 - 802.3ad)。
但是,我們設法在 2 個 pod 之間獲得的最大吞吐量是 10 GB/s。根據一些文件,我們應該能夠達到 20 GB/s。根據wikipedia,這似乎是一種正常行為:
這將分別為每個目標 MAC 地址、IP 地址或 IP 地址和埠組合選擇相同的 NIC 從站
這導致理解只有一個連結用於給定的目標 IP + 埠組合。
我的問題如下:我們是否應該能夠在 pod 之間達到 20 GB/s 的吞吐量?或者我們卡在 10 GB/s 是正常的嗎?
這不是 Kubernetes 特有的,這是 LACP 的正常行為。它並沒有提供真正的吞吐量增加,而是將其行為更好地描述為“連接的確定性分佈”(不是單個數據包)和容錯。
它從數據包中提取一些標頭欄位(由模式確定)並對它們進行雜湊處理。例如,散列模式“layer3+4”獲取 OSI 第 3 層和第 4 層資訊,例如 IP 和埠。散列直接確定從哪個 LACP 分支輸出此數據包。無論您選擇哪種散列模式,屬於同一連接的所有數據包都將散列到同一支路,因此任何單個連接都不能超過單支路吞吐量。
當另一個連接出現時,如果幸運的話,它可以使用另一個 LACP 支路。在這種情況下,兩個連接將分佈在分支之間,您將在主機之間獲得兩倍的總吞吐量。這不能保證:可能會發生它們都通過同一條腿路由。但是,當你有很多連接時(通常是當我們考慮收斂集群時),平均來說兩條腿都會被利用。
如果您願意,我可以將其與 Kubernetes 進行比較。如果您添加節點(並相應地擴展部署),您可以增加集群可以服務的客戶端數量。但是您無法通過這種擴展(如果集群沒有過載)來改善特定請求的響應延遲(服務時間)。