結論:
image.png
點評: 帶寬: calico+ipip > flannel+vxlan > cilium+vlan 速度: calico+ipip > flannel+vxlan > cilium+vlan 穩定性:cilium+vlan > calico+ipip > flannel+vxlan
calico 作為老牌網絡解決方案,可圈可點,已被 github 等公司用於生產。 flannel 配置簡單,性能弱低於 calico,redis 測試中稍占上風。大併發下穩定性稍低。 cilium 在大併發環境下,穩定性更好,期待後續版本性能有所提升。在 http 8k qps 的情況下,請求 100% 成功了,而calico和flannel 都有一定比例的失敗。 (說明:本來還準備比較一下 kube-router ,不過網絡沒有調通,暫時無法測試。)
一個問題: flannel 的 host-gw 模式、flannel+vxlan+DirectRouting 模式、calico 關閉 ipip 模式、kube-router 這些部署情況下,跨主機的容器不通,感覺原因應該是同一個問題。 主機A ping 主機B 上的容器,容器有回包,但是隻到了主機B,之後就被丟棄了。 歡迎探討,一起研究。 待問題解決後,再把這些模式測試對比。
測試環境: 硬件:三臺物理機,千兆網卡,單網卡,處於同一網段(在同一個二層網絡中) OS:Ubuntu 18.04,內核 4.15 k8s: 1.10.0 kube-proxy: ipvs 模式 flannel : 0.10 版本, vxlan模式(默認設置) calico: 3.1 版本,ipip 模式(默認設置) cilium: 1.0 版本,vxlan 模式(默認設置)
測試方法:
<code>kubectl run vegeta --image=oba11/vegeta --replicas=3 sleep 3000kubectl run redis --image=redis:alpine --replicas=3 kubectl run nginx --image=nginx:alpine --replicas=5kubectl run iperf3 --image=networkstatic/iperf3 --replicas=3 -- iperf3 -shost=POD_IP_ADDRESSiperf3 -c $hostecho "GET http://$host/" | vegeta attack -duration=10s -rate=8000 | tee results.bin | vegeta reportecho "GET http://$host/" | vegeta attack -duration=10s -rate=5000 | tee results.bin | vegeta reportredis-benchmark -h $host -q -t SET,GET,LPUSH -c 5000 -n 100000 -r 100000 -d 256/<code>
閱讀更多 飛翔的企鵝2020 的文章