环境
192.168.26.128 etcd flannel
192.168.26.130 flannel
一、192.168.26.128
1、安装 etcd
yum install -y etcd
# vim /etc/etcd/etcd.conf
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.26.128:2379"
2、启动
systemctl enable etcd
systemctl start etcd
3、安装 flannel
yum install flannel
# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.26.128:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
4、配置 docker 容器的 IP地址, Flannel 使用Etcd进行配置,来保证多个Flannel实例之间的配置一致性,所以需要在etcd上进行如下配置
etcdctl mk /atomic.io/network/config '{ "Network": "172.19.0.0/16" }'
5、启动 flannel
启动 flanneld 后,会有一张 flannel0 网卡产生:而且还生成了配置文件 /run/flannel/subnet.env,此网卡的地址就是使用 etcdctl mk 定义的网段地址。
这样则会生成/run/flannel/docker文件, 在这个文件中一般会给docker提供一个设定参数
DOCKER_NETWORK_OPTIONS,DOCKER_NETWORK_OPTIONS中会包含如下设定信息:
--bip
--ip-masq
--mtu
而在docker的systemd的service中,只需要将DOCKER_NETWORK_OPTIONS传递给dockerd即可。
systemctl enable flanneld
systemctl start flanneld
7、重启 docker 生效
systemctl restart docker
查看 flannel etcd 进程
[root@kvm128 ~]# ps -ef|grep flannel
root 7046 1 0 21:22 ? 00:00:00 /usr/bin/flanneld -etcd-endpoints=http://192.168.26.128:2379 -etcd-prefix=/atomic.io/network
root 8199 7325 0 21:58 pts/0 00:00:00 grep --color=auto flannel
[root@kvm128 ~]# ps -ef | grep etcd
etcd 6556 1 1 21:22 ? 00:00:24 /usr/bin/etcd --name=default --data-dir=/var/lib/etcd/default.etcd --listen-client-urls=http://0.0.0.0:2379
root 7046 1 0 21:22 ? 00:00:00 /usr/bin/flanneld -etcd-endpoints=http://192.168.26.128:2379 -etcd-prefix=/atomic.io/network
root 8201 7325 0 21:59 pts/0 00:00:00 grep --color=auto etcd
查看 网络
[root@kvm128 ~]# etcdctl ls /atomic.io/network/subnets
/atomic.io/network/subnets/172.19.10.0-24
二、192.168.26.130
1、安装 flannel
yum install flannel
2、配置
# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.26.128:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
3、启动 flannel
systemctl enable flanneld
systemctl start flanneld
4、重启 docker 生效
systemctl restart docker
三、docker 使用 flannel 网络,2台机器 都要操作
1、修改 docker 启动参数
vim /lib/systemd/system/docker.service
# 修改
EnvironmentFile=-/run/flannel/docker # 增加
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock # 增加 $DOCKER_OPTS
[root@kvm128 ~]# systemctl daemon-reload
[root@kvm128 ~]# systemctl restart docker
2、docker 与 flannel 在同一个网段表示成功
# ifconfig docker0 && ifconfig flannel0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1472
inet 172.19.1.1 netmask 255.255.255.0 broadcast 172.23.1.255
inet6 fe80::42:97ff:fe17:1faa prefixlen 64 scopeid 0x20<link>
ether 02:42:97:17:1f:aa txqueuelen 0 (Ethernet)
RX packets 10 bytes 616 (616.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 18 bytes 1412 (1.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472
inet 172.19.1.0 netmask 255.255.0.0 destination 172.23.1.0
inet6 fe80::9f1b:8717:3135:ca0a prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 18 bytes 1512 (1.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9 bytes 648 (648.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3、查看 docker 进程
[root@kvm128 ~]# ps -ef | grep docker
root 16678 1 0 21:00 ? 00:00:00 /usr/bin/dockerd --bip=172.19.1.1/24 --ip-masq=true --mtu=1472 -H fd:// --containerd=/run/containerd/containerd.sock
四、测试 2 台机器分别创建一个容器
docker run -it --name busybox -d busybox
docker exec -it busybox /bin/sh
# 192.168.26.130
[root@kvm130 ~]# docker exec -it busybox /bin/sh
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:13:57:02
inet addr:172.19.87.2 Bcast:172.19.87.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1472 Metric:1
RX packets:25 errors:0 dropped:0 overruns:0 frame:0
TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1970 (1.9 KiB) TX bytes:1638 (1.5 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
# 192.168.26.128
[root@kvm128 ~]# docker exec -it busybox /bin/sh
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:13:5E:02
inet addr:172.19.94.2 Bcast:172.19.94.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1472 Metric:1
RX packets:25 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1970 (1.9 KiB) TX bytes:658 (658.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
测试 docker 容器 是否互通
/ # ping 172.19.94.2
PING 172.19.94.2 (172.19.94.2): 56 data bytes
64 bytes from 172.19.94.2: seq=0 ttl=60 time=0.579 ms
64 bytes from 172.19.94.2: seq=1 ttl=60 time=1.001 ms
64 bytes from 172.19.94.2: seq=2 ttl=60 time=1.101 ms
^C
--- 172.19.94.2 ping statistics ---
13 packets transmitted, 13 packets received, 0% packet loss
round-trip min/avg/max = 0.579/1.083/1.460 ms
/ # ping 172.19.87.2
PING 172.19.87.2 (172.19.87.2): 56 data bytes
64 bytes from 172.19.87.2: seq=0 ttl=60 time=1.018 ms
64 bytes from 172.19.87.2: seq=1 ttl=60 time=1.126 ms
64 bytes from 172.19.87.2: seq=2 ttl=60 time=1.983 ms
64 bytes from 172.19.87.2: seq=3 ttl=60 time=2.035 ms
^C
--- 172.19.87.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 1.018/1.540/2.035 ms
# 如果不通,执行
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F