1. 安装前的准备
etcd 3.2.9
Docker 17.12.0-ce
三台机器10.100.97.236, 10.100.97.92, 10.100.97.81
etcd不同版本之间的差别还是挺大的,使用V3版本跟Flannel整合起来会有坑,下文详解。
2. 安装
sudo yum install -y flannel
安装后,版本是0.7.1
3. 在etcd中设置变量
1 etcdctl put /coreos.com/network/config '{ "Network": "172.17.0.0/16" }' 2 curl -X PUT http://127.0.0.1:2379/v2/keys/coreos.com/network/config -d value='{ "Network": "172.17.0.0/16" }'
有两种方法可以设置,但是flannel 0.7.1版默认使用的是etcd V2的http接口,所以如果etcd是V3版本而且用第一种方法设置那么会导致fannel读取不到配置,运行flannel会报错failed to retrieve network config: 100: Key not found (/coreos.com);如果ectd是V2版本,那么两种方法设置都可以。
同时,如果出现类似的报错,可以使用下面的命令测试
curl http://172.0.0.1:2379/v2/keys/coreos.com/network/config
4. 放开8285 udp端口
sudo firewall-cmd --zone=public --add-port=8285/udp --permanent sudo firewall-cmd --reload sudo firewall-cmd --list-ports
5. 创建日志目录
sudo mkdir -p /var/log/flannel
6. 修改flanneld配置
sudo vim /etc/sysconfig/flanneld
修改为
FLANNEL_ETCD_ENDPOINTS="http://10.100.97.236:2379,http://10.100.97.92:2379,http://10.100.97.81:2379" FLANNEL_ETCD_PREFIX="/coreos.com/network" FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/flannel/ --iface=你的网卡名字"
7. 启动
sudo systemctl daemon-reload sudo systemctl start flanneld sudo systemctl status flanneld sudo systemctl enable flanneld
8. 配置Docker
Flanneld服务需要先于Docker启动,此时应该停掉Docker,待配置完之后重启。
配置好Flanneld之后它会从etcd中获取network的配置信息,然后划分subnet并在etcd中进行注册,然后将子网信息记录到/run/flannel/subnet.env
中,最后将subnet.env转写成一个docker的环境变量文件/run/flannel/docker。
可以通过以下命令查看相关文件信息:
cat /run/flannel/subnet.env cat /run/flannel/docker
此外,Flanneld还会自动修改Docker的配置
systemctl show docker
我们需要修改/usr/lib/systemd/system/docker.service,并应用/run/flannel/docker当中的DOCKER_NETWORK_OPTIONS配置:
sudo vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock $DOCKER_NETWORK_OPTIONS
重启Docker:
sudo systemctl daemon-reload sudo systemctl restart docker sudo systemctl status docker
9. 测试安装结果
ip addr show
查看docker的地址段是否在etcd中存储的地址段中。