1.1 安装
[root@localhost ~]# yum install -y etcd #安装etcd
1.2 修改etcd.conf文件
[root@localhost ~]# cd /etc/etcd/
[root@localhost etcd]# cp -p etcd.conf etcd.conf.bak #备份配置文件,回退使用。
[root@localhost etcd]# vim etcd.conf
将以下几项:
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
修改为:
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://172.16.41.251:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.41.251:2379"
[root@localhost ~]# grep ^[A-Z] /etc/etcd/etcd.conf #查看文件内容
--name :方便理解的节点名称,默认为 default ,在集群中应该保持唯一,可以使用 hostname。
--data-dir :服务运行数据保存的路径,默认为 ${name}.etcd。
--listen-client-urls :对外提供服务的地址:比如 http://ip:2379,http://127.0.0.1:2379 ,客户端会连接到这里和 etcd 交互。
--advertise-client-urls :对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点。
1.3 新建etcd.sh文件并添加相应内容
在根目录创建etcd.sh文件
[root@localhost ~# vim etcd.sh
在etcd.sh文件中添加以下内容:
{"Network":"10.2.0.0/16","SubnetLen":24,"Backend":{"Type":"vxlan"}}
Network:定义host主机的IP地址池为10.2.0.0/16,注:由于etcd并不是动态保存host上flannel网络的,比如:当有节点被删除后,etcd中的关于这个节点的subnet网络并不会被删除,所以使用10.X.X.X的网络,保证有足够的网络可用
SubnetLen:指定每个主机分配的subnet大小为24位,即10.2.x.0/24
Backend为vxlan,即主机之间通过vxlan通信,backend分为vxlan和host-gw这两种方式
1.4 新建network/config文件及添加内容
[root@localhost ~]# cd /usr/local/bin/
[root@localhost bin]# mkdir network
[root@localhost network]# etcdctl --endpoints=http://172.16.41.251:2379 set /usr/local/bin/network/config </root/etcd.sh #将etcd.sh的文件内容输入config中
[root@localhost network]# etcdctl --endpoints=http://172.16.41.251:2379 get /usr/local/bin/network/config
--endpoints=http://192.168.7.222:2379 指定etcd的url
/usr/local/bin/network/config 保存key的地方,flanneld会读取这个配置,保证自己能获取到subnet,这个key可以任意指定,当host主机分配到subnet后,key会修改docker的启动参数
[root@localhost network]# systemctl restart etcd #重启etcd服务
etcd服务配置完成!!!!!
2、flannel安装与配置
[root@localhost ~]# yum install -y flannel #安装flannel
[root@localhost ~]# cd /etc/sysconfig/
[root@localhost sysconfig]# cp -p flanneld flanneld.bak #备份flanneld文件
[root@localhost sysconfig]# vim flanneld
修改以下内容:
FLANNEL_ETCD_ENDPOINTS="http://172.16.41.251:2379" #连接etcd的地址
FLANNEL_ETCD_PREFIX="/usr/local/bin/network" #etcd的key的地址
[root@localhost sysconfig]# systemctl start flanneld
[root@localhost etc]# ifconfig flannel.1 #查看flannel.1网络
在两台flannel主机上都安装启动完flannel,就可以看见每个主机上起了一个flannel.1的网络
两台flannel主机都会出现一个flannel.1的路由,路由都是10.2.0.0的
[root@localhost etc]# route
[root@localhost system]# mkdir docker.service.d
[root@localhost system]# cd docker.service.d/
[root@localhost docker.service.d]# vim 10-machine.conf
添加以下内容:
Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver devicemapper --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pe --tlskey /etc/docker/server-key.pem --label provider=generic --bip=10.2.31.1/24 --mtu=1450
Environment=
注:--bip为flannel.1的分配段地址
这个参数要与/run/flannel/subnet.env中保持一致
[root@localhost sysconfig]# cat /run/flannel/subnet.env
修改/usr/lib/systemd/system/docker.service文件,添加以下内容:
在ExecStart=/usr/bin/dockerd后添加$DOCKER_NETWORK_OPTIONS
和
EnvironmentFile=/run/flannel/docker
如果不添加这两条会出现,docker启动后查看下启动的docker0不是被flannel托管了
注:另一台同样的操作。
重启docker
[root@localhost sysconfig]# systemctl daemon-reload
[root@localhost sysconfig]# systemctl restart docker
[root@localhost etc]# ifconfig
[root@localhost docker.service.d]# docker run -dit --name b1 busybox
[root@localhost docker.service.d]# docker exec b1 ifconfig
[root@localhost sysconfig]# docker run -dit --name b2 busybox
[root@localhost sysconfig]# docker exec b2 ifconfig
ping测试
[root@localhost docker.service.d]# docker exec b1 ping -c 2 10.2.67.2
[root@localhost sysconfig]# docker exec b2 ping -c 2 10.2.31.2
第三方flannel实现docker多网段通信测试成功!!!
docker之docker容器flannel模式多网段跨主机通信
原文:https://blog.51cto.com/3001441/2467337