本测试主要在阿里云上进行,测试在公有云环境下使用 Kube-OVN 容器网络的性能表现,测试指标为 host 网络模式和 Kube-OVN 网络模式网络吞吐量的比较。
测试环境
机器环境:华北五区(呼和浩特)可用区 A,ecs.c5.2xlarge (8 vCPU,16GiB I/O优化,专有网络)* 3
OS:CentOS 7.5.1804, Kernel 3.10.0-957.27.2.el7.x86_64
Kubernetes:1.13.4, 3 个节点,master 上可运行工作负载,300 个背景Pod,每个节点 100 个 Pod,背景 Pod 无网络流量
Kube-OVN: v0.7.0
测试工具:iperf3
测试方法
- 运行 300 个背景 Pod 分散到 3 个节点上
- 分别以host模式运行 iperf3 镜像的 daemonset
- 在其中一台机器上进入容器开启 iperf3 server 模式
iperf3 -s
- 在另一台机器进入容器以 client 模式运行 iperf3 并测试 tcp 结果
iperf3 -c <server host> -t 30 -l <package size>
- 调整 -l 参数测试 tcp 结果
- 使用 kube-ovn 模式运行 iperf3 镜像的 daemonset,并重复 4~5, 记录结果
测试结果
我们以 host 网络作为测试基准,比较 Kube-OVN 在网络吞吐量上的损耗。
TCP
包大小 | Kube-OVN网络 | Host网络 | 带宽比 |
---|---|---|---|
128KB | 2.42Gbit/s | 2.52Gbit/s | 96% |
64KB | 2.42Gbit/s | 2.52Gbit/s | 96% |
16KB | 2.42Gbit/s | 2.52Gbit/s | 96% |
4KB | 2.42Gbit/s | 2.52Gbit/s | 96% |
2KB | 2.39Gbit/s | 2.51Gbit/s | 95% |
1KB | 1.57Gbit/s | 2.40Gbit/s | 57% |
500B | 923Mbit/s | 1.32Gbit/s | 70% |
250B | 534Mbit/s | 677Mbit/s | 79% |
可以看到在数据包大小为 2K 以上时,Kube-OVN 的吞吐量损耗相比主机稳定在 4%,当数据包小于 2K 时损耗增加,1K左右数据包损耗最为明显。更小的数据包主机网络处理同样出现性能瓶颈,损耗比率又再次降低。