結(jié)論:

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