盒子
盒子
文章目录
  1. BRIDGE
  2. Docker overlay

Docker几种网络方案性能测试

Docker由于发展迅速,初期对网络有太多的关注。 1.9以前网络的方式只有bridgehostnone三种模式。

bridge模式就是在主机上创建一个虚拟网桥,然后同一个主机上的容器都挂在上桥上,同一个主机上的容器可以直接通信,但是跨主机只能通过和主机映射端口的方式通信。这样扩展性比较差,同时也主机的端口也是一种消耗。

host则是让容器和主机共用网络空间,none则是不分配。

本次来测试两个容器在夸主机情况下的网络性能,使用的测试工具为qperf。因此要测试容器的网络性能,使用已经包含qperf的镜像arjanschaaf/centos-qperf。两台机器系统都是Ubuntu16.04,安装的docker版本是1.12.6,IP分别是:

1
2
172.18.240.119
172.18.115.116

BRIDGE

bridge在夸主机时,两个容器可通过端口映射加主机IP的方式通信。在116上运行qperf的服务端:

1
# docker run -dti --name qperf-server -p 4000:4000 -p 4001:4001 arjanschaaf/centos-qperf -lp 4000

接着在119上运行客户端等待测试结果,最终返回的测试结果为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# docker run -ti --rm arjanschaaf/centos-qperf 172.18.115.116 -lp 4000 -ip 4001 tcp_bw tcp_lat conf
tcp_bw:
bw = 152 MB/sec
tcp_lat:
latency = 396 us
conf:
loc_node = d13949a45330
loc_cpu = Intel Xeon E5-2682 v4 @ 2.50GHz
loc_os = Linux 4.4.0-82-generic
loc_qperf = 0.4.9
rem_node = 5eb5c49a1903
rem_cpu = Intel Xeon E5-2680 v3 @ 2.50GHz
rem_os = Linux 4.4.0-82-generic
rem_qperf = 0.4.9

Docker overlay

此种方式需要Docker 1.9版本以上,并且因为基于VXLAN,因此也需要内核支持。参考之前的文章配置Docker overlay。这里创建的网络叫multi-host

同样在116上运行qperf的服务端,现在的网络已经支持跨主机通信,因此运行容器时指定这个网络不再需要映射端口:

1
docker run -dti --name qperf-server --net multi-host arjanschaaf/centos-qperf -lp 4000

119通过docker network inspect multi-host 便能查看到116上运行的qperf-server所分配的IP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# docker network inspect multi-host
[
{
"Name": "multi-host",
...
"Containers": {
...
"ep-55eb2b063a416ef09f41b58a8b69d9724a3e7d108907847a18d0e76f1d890a9b": {
"Name": "qperf-server",
"EndpointID": "55eb2b063a416ef09f41b58a8b69d9724a3e7d108907847a18d0e76f1d890a9b",
"MacAddress": "02:42:0a:0a:0a:03",
"IPv4Address": "10.10.10.3/24",
"IPv6Address": ""
}
},
...
}
]

现在可以看到qperf-server分配到的IP是10.10.10.3,在119同样指定此网络运行客户端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# docker run -ti --rm --net multi-host arjanschaaf/centos-qperf 10.10.10.3 -lp 4000 -ip 4001 tcp_bw tcp_lat conf
tcp_bw:
bw = 146 MB/sec
tcp_lat:
latency = 417 us
conf:
loc_node = 4a50f11e4cff
loc_cpu = Intel Xeon E5-2682 v4 @ 2.50GHz
loc_os = Linux 4.4.0-82-generic
loc_qperf = 0.4.9
rem_node = 30b8c63c1efa
rem_cpu = Intel Xeon E5-2680 v3 @ 2.50GHz
rem_os = Linux 4.4.0-82-generic
rem_qperf = 0.4.9

未完待续…

支持一下
扫一扫,支持forsigner