整个测试分别测试了 calico flannel 和 weave 三种网络,分别测试了连通性,同 host 的两个容器之间和跨 host 的网络性能和抖动
- 两台 vbox 虚拟机 ubuntu 16.04 LTS with Docker version 1.11.2, build b9f10c9
- Linux 4.4.0-22-generic
- 一个二层网络内
- 测试过程比较简单:
- 搭建网络环境
- 通过 ping 测试连通性
- 通过 iperf 测试网络性能,分别选取同一个宿主机上的两个容器和跨宿主机的两个容器
- tcp 模式测试网络带宽
- udp 模式测试丢包和延时,使用的是 100Mbps 的发送速率
###Calico
- connectivity ok
- performance
Env |
Bandwidth |
Lantency |
Packet loss (under 100Mbps) |
same host |
21.4 Gbits/sec |
0.010 ms |
None |
cross host |
1.54 Gbits/sec |
0.043 ms |
None |
- pros
- 性能最好
- 容易做访问控制,网络设置当中有 profile 概念,在同一个 profile 当中的节点网络互通
- cons
- 需要通过控制接口将容器添加到 calico 的库中,分配 ip 和配置 profile,才能打通网络
- 依赖 BGP 路由协议,在集群规模很大的情况下,学习路由可能会有较大开销,但这个现在没有理论依据?
- 需要自己管理 ip (calico 实现了 CNI 接口并且有提供 ipam,所以这个问题似乎不大)
- connectivity ok
- performance
Env |
Bandwidth |
Lantency |
Packet loss (under 100Mbps) |
same host |
19.8 Gbits/sec |
0.010 ms |
None |
cross host |
1.45 Gbits/sec |
0.049 ms |
None |
- pros
- 不需要侵入 docker 启动方式
- ip 自动分配
- cons
- 性能没有 calico 好,但还算不错
- 需要侵入 docker daemon 的启动参数,也是我们现在使用当中隐含的一个 bug(机器重启后 flanneld 重启,导致随机选取的新子网和以前配置在 DOCKER_OPT 当中的参数不一样,从而使得整个 node 网络不可用)
- connectivity ok
- performance
Env |
Bandwidth |
Lantency |
Packet loss (under 100Mbps) |
same host |
21.3 Gbits/sec |
0.010 ms |
None |
cross host |
991 Mbits/sec |
0.141 ms |
None |
- pros
- cons
- 性能比 flannel 还差一些
- 需要用包装过的接口启动容器