calico ipip&bgp性能测试

测试说明

网络一般情况下主要参考延迟、网络带宽,所以本次测试也主要测试calico不同的网络协议下,带宽和延迟的差异

测试分两阶段进行,分别测试"主机到pod"、"pod到pod"两种网络模型

测试工具选型

延迟与带宽测试:使用qperf进行测试,基于centos:7镜像重新构建qperf测试工具,在集群内部使用deployment部署多副本,使pod分别在多个node上分别,以便于测试

nginx测试方案

模式 网络模式 nginx文件大小 响应时间(99 max) 流量 并发量
host to pod bgp 10K 1.026ms, 39.649ms 10K 10000
host to pod bgp 100M 534.611μs, 1.514ms 100M 100
host to pod ipip 10K 1.048ms, 28.248ms 10K 10000
host to pod ipip 100M 592.597μs, 1.858ms 100M 100
pod to pod bgp 10K 1.037ms, 43.26ms 10K 10000
pod to pod bgp 100M 546.812μs, 5.712ms 100M 100
pod to pod ipip 10K 1.585ms, 108.748m 10K 10000
pod to pod ipip 100M 573.216μs, 9.602ms 100M 100

测试命令:

 /usr/local/vegeta
#vegeta命令,rate表示每秒条数;duration持续时间,0不限时,10m表示运行10分钟

echo "GET http://10.9.9.69/XXXX/static/test" | ./vegeta attack -rate=3125 -duration=10m | tee results.bin | ./vegeta report

#查看报告
./vegeta report  --inputs=results.bin

kubectl run nginx-test --image=nginx:test --replicas=3 -- nginx -g 'daemon off;'

docker run --rm -i peterevans/vegeta sh -c "echo 'GET https://10.XXX.XXX.230/10k.html' | vegeta attack -rate=10000 -duration=120s | tee results.bin | vegeta report"

kubectl run vegeta --rm --attach --restart=Never --image-pull-policy=IfNotPresent --image="peterevans/vegeta" -- sh -c  "echo 'GET https://10.XXX.XXX.230/10k.html' | vegeta attack -rate=10000/s -duration=120s | tee results.bin | vegeta report"

目前我们calico IPIP模式的MTU是1440字节,BGP模式的MTU是1500字节,MTU即最小传输单元,如果一个数据包的流量大于MTU值的话,需要进行切片分包,分别路由到目的IP,衡量IPIP模式与BGP模式的一个重要指标,即单个MTU传输到目的IP解封装的过程耗时。

因IPIP模式需要对数据包在源节点上进行加封装和解封装,理论上在数据传输熟虑和资源消耗,BGP模式都要优于IPIP模式,同样的数据量的等量条件下,BGP的数据包延迟及最大传输速率都明显优于IPIP,数据的优势在数据流大小为1K的时候对比更明显,因为1K约等于1个MTU,更能直观的反映出测试指标。

通过以上测试和官网资料,可以得出以下结论:

1.calico BGP模式相对于IPIP模式,约有5%网络传输速率的提升。

2.calico BGP模式相对于IPIP模式,约有10%-30%延迟的减少。

3.calico IPIP模式支持跨网段访问,BGP模式不支持跨网段访问。

4. 在nginx测试中,pod之间的小包延迟降低约33%

5. 在nginx测试中,pod之间的大包延迟降低约40%

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!