DOCKER容器跨宿主机通信方法(4):Flannel-Vxlan

Vxlan模式

flannel的vxlan模式,数据包是通过kernal来转发的,而当使用udp模式时候是flannel自己转发。UDP模式下性能要差很多,性能差别可参考一些测试:

UDP模式:

60秒单线程测试

iperf3 -c x.x.x.x -t 60
结果:
[ 4] 0.00-60.00 sec 3.33 GBytes 477 Mbits/sec 15716 sender
[ 4] 0.00-60.00 sec 3.33 GBytes 476 Mbits/sec receiver

开启30个线程传输

iperf3 -c x.x.x.x -t 60 -P 30
结果:
[SUM] 0.00-60.00 sec 3.08 GBytes 441 Mbits/sec 205692 sender
[SUM] 0.00-60.00 sec 3.06 GBytes 438 Mbits/sec receiver
多线程并没有带宽的提升反而由于多线程调度影响,降低带宽。在万兆网的环境下UDP的性能损耗还是挺大的。

Vxlan模式:

60秒单线程测试

iperf3 -c x.x.x.x -t 60
结果:
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-60.00 sec 10.1 GBytes 1.44 Gbits/sec 6957 sender
[ 4] 0.00-60.00 sec 10.1 GBytes 1.44 Gbits/sec receiver

开启30个线程传输

iperf3 -c x.x.x.x -t 60 -P 30
结果:
[SUM] 0.00-60.00 sec 10.1 GBytes 1.45 Gbits/sec 90559 sender
[SUM] 0.00-60.00 sec 10.1 GBytes 1.44 Gbits/sec receiver
在vxlan下多线程也没有性能提升。

从上述两组数据可以明显看出flannel在vxlan下性能要明显高于udp。

阅读更多

DOCKER容器跨宿主机通信方法(4):Flannel-UDP

Flannel简介

Flannel是一个开源的用于管理和组织跨主机间容器网络的一套工具,其原理是通过在所有宿主机上建立一个flannel0网卡,将所有宿主机设置为同一个大的网段,并改写每个docker0的桥IP(通过改写docker daemon启动命令)为其一个子网IP,从而实现,整体网络在一个大的网段,各个docker0分配不同的子网网段。各个docker0网络内的容器数据包最终通过flanneld进程来将数据包进行封装,通过UDP包外层封装(缺省),或者vxlan隧道,实现跨主机容器通信(主机底层物理网络只要路由可达就行),另外flannel还支持host-gw,aws,gec等网络,本实验使用缺省udp封装。

安装前提条件

系统先需正确安装etcd服务,本实验已安装好etcd三节点集群
系统先需正确安装docker服务

Flannel安装

阅读更多

DOCKER容器跨宿主机通信方法-(3):Openvswitch

Openvswitch overlay网络:

配置前网络状况

主机1:

主机2:

主机1设置:

阅读更多

docker容器跨宿主机通信方法(1)

Host网络方式:

容器run的时候启用–network来指明host网络类型,使得容器复用host的网络空间。容器将得到和宿主机一样的网络接口及IP。这样的缺点是容器在网络上没有隔离,而且多个容器存在抢占同一端口的可能性,限制性比较大。

桥接外部网络方式:

容器桥接到一个自定义网桥(非docker产生的网桥,而是linux中独立创建的网桥),并将该自定义网桥与宿主机物理接口进行桥接,这样将容器直接透传到外部物理网络里来,使得各个容器就像直接活在外部网络中的一个主机一样。可以通过pipework这个工具来自动化执行上述这个过程

阅读更多

docker link and docker network

在同一台宿主机器上,docker彼此之间默认可以直接通过IP地址通信(假如启动docker dameon时候icc=true),但是每个容器的ip地址并不固定,如果单纯依赖IP地址通信局限性会很大,在传统的docker网络下可以考虑使用link特性来让各个容器之间进行业务通信。

link容器的做法是在启动一个容器时候,使用–link参数来连接一个需要被访问的容器,无论是否启用icc=true,使用link后都可以通信:

执行后,docker实际上做了:

阅读更多

使用ip netns命令显示docker namespace 的方法

运行以上脚本即可:

 

Docker学习备忘2

拉取busybox镜像,并运行一个容器实例(挂载一个自命名的volume进去)

观察此时/var/lib/docker下结构:

[root@docker1 docker]# tree -L 4

阅读更多

Docker学习备忘1

Centos7

[root@docker1 etc]# more system-release
CentOS Linux release 7.3.1611 (Core)
[root@docker1 etc]# uname -a
Linux docker1.f5lab.com 3.10.0-514.16.1.el7.x86_64 #1 SMP Wed Apr 12 15:04:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

[root@docker1 etc]# docker info
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
Server Version: 17.05.0-ce
Storage Driver: overlay
Backing Filesystem: xfs
Supports d_type: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9048e5e50717ea4497b757314bad98ea3763c145
runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-514.16.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.844GiB
Name: docker1.f5lab.com
ID: 7DCC:YGQU:S2YZ:FYSL:4HMD:4GSC:5UCN:KIPQ:32QM:3TVC:YDJU:OUL6
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

WARNING: overlay: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior.
Reformat the filesystem with ftype=1 to enable d_type support.
Running without d_type support will not be supported in future releases.

刚启动docker后,/var/lib/docker下状态:

阅读更多