您的位置:首页 > 运维架构 > Docker

Docker之Flannel管理网络-yellowcong

2017-10-21 14:58 656 查看
Docker中管理网络的工具的确挺多的,但是比如Weave的性能相对 较差,而且有虚拟机断网的bug. pipework 的ip没次重启就需要重新的配置,这也是挺麻烦的一件事,所以Flannel还是比较推荐使用的。

网络拓扑图可以看出 ,数据发送到了物理节点后,走的是Flannel,然后分发到自己节点里面的docker容器里面,他们是通过维护一张表,来保证ip的唯一,通过将ip的信息存在etcd上



1、安装etcd

1.1安装etcd

我这个地方的安装方式是单节点安装

#安装etcd
yum install etcd

#启动服务
service etcd start

#获取节点数据,看本生好不好用,然后再进行下一步,配置ETCD的操作(很重要,不进行这步,容易发生错误,不知道是那个地方的问题)
etcdctl get /


1.2 配置ETCD

我这个地方是单节点的,也没啥配置操作, 需要配置节点,需要修改为自己当前的ip,这样其他主机的服务器就能访问到了。不然访问不到,初始化失败。配置了监听的节点(ETCD_LISTEN_CLIENT_URLS)没有加上
http://127.0.0.1:2379
,直接使用命令,需要加上路径
etcdctl --endpoints  http://192.168.66.110:2379[/code],不然就会报错 
配置下面类容

#配置文件夹 ,配置etcd集群操作 ,可以修改端口,但是我们没有啥必要去修改他
vim /etc/etcd/etcd.conf

# [member]
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.66.110:2380,http://127.0.0.1:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.66.110:2379,http://127.0.0.1:2379"

#[cluster]
ETCD_INITIAL_CLUSTER="default=http://192.167.66.110:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.66.110:2379"


ETCD监听的服务端口默认是2379 、2380,需要 记得开启防火墙



测试ETCD好不好用

如果ectd配置的但节点的,

#创建文件夹
etcdctl mkdir /test

#查看文件夹的信息
etcdctl ls /

#查看本节点的 目录下的所有类容
etcdctl --endpoints  http://192.168.66.110:2379 ls /

#创建节点
etcdctl --endpoints  http://192.168.66.110:2379 mkdir /web

#设定节点数据
etcdctl --endpoints  http://192.168.66.110:2379 set /web/web001 "test"

#获取节点数据
etcdctl --endpoints  http://192.168.66.110:2379 get /web001




1.3 设定网段

确定etcd可以使用之后,我们需要设置分配给docker网络的网段

#在etcd中添加一条数据
etcdctl  mk /atomic.io/network/config '{"Network":"172.17.0.0/16", "SubnetMin": "172.17.1.0", "SubnetMax": "172.17.254.0"}'




1.4开启端口

#编辑iptables
vim /etc/sysconfig/iptables

#添加规则链条
-A INPUT -p tcp -m tcp --dport 2379 -m state --state NEW,ESTABLISHED -j ACCEPT

-A INPUT -p tcp -m tcp --dport 2380 -m state --state NEW,ESTABLISHED -j ACCEPT

#重启防火墙
service iptables restart


2、安装flannel

2.1安装flannel

yum install flannel


2.2配置flanneld的etcd服务器

#编辑配置文件
vim /etc/sysconfig/flanneld

#配置属性 ,http://192.168.66.110:2379 是本机的etcd服务,也可以别的地方的,都行
FLANNEL_ETCD_ENDPOINTS="http://192.168.66.110:2379"

#注意这个必须和上面Etcd配置的要一样,不然flannel启动不了
FLANNEL_ETCD_PREFIX="/atomic.io/network"

#需要配置成自己的网卡, 不然容器找不到网络的问题
#logtostderr 日志不打印到控制台
#log_dir 日志文件地址
#etcd-endpoints ETCD访问的地址
#iface 使用的网卡,必须是自己存在的,不然docker没地址 ,而且服务启动不起来

FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-prefix=/atomic.io/network  --etcd-endpoints=http://192.168.66.110:2379 --iface=eth0"




多个ETCD节点,配置例子

FLANNEL_ETCD_ENDPOINTS="http://10.132.47.70:2379,http://10.132.47.71:2379,http://10.132.47.72:2379"

FLANNEL_ETCD_PREFIX=“/flannel/network"

FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-endpoints=http://10.132.47.70:2379,http://10.132.47.71:2379,http://10.132.47.72:2379 --iface=eno16780032"


2.3启动Flannel

#修改配置文件后,需要重新加载
systemctl daemon-reload

#开启flanneld 服务
service flanneld start

#重启服务
service flanneld restart

#状态查看
service flanneld status

#日志查看
flanneld -alsologtostderr


2.4配置信息查看

我们查看网桥,看到了flannel0,而且ip的地址端是我们自己指定的
172.17.0.0/16
,而且还生成了配置文件
/run/flannel/subnet.env
/run/flannel/docker
存储了这个服务器端信息。



cat /run/flannel/subnet.env
配置信息里面,看到了我们的网段配置。注意其中的“–bip=172.17.8.1/24”这个参数,它限制了所在节点容器获得的IP范围。这个IP范围是由Flannel自动分配的,由Flannel通过保存在Etcd服务中的记录确保它们不会重复



cat /run/flannel/docker
配置看到,配置的网段已经生成在这个地方了



2.5Flannel错误日志查看

flanneld -alsologtostderr


1.错误 :failed to retrieve network config: client: etcd cluster is unavailable or misconfigured; error #0: dial tcp 127.0.0.1:2379: getsockopt: connection refused

这个问题的原因是,ETCD配置文件有问题,还有本地没有这个服务导致

2.错误:E1022 11:15:47.547338 5984 network.go:102] failed to retrieve network config: 100: Key not found (/atomic.io) [34]

这个是节点的配置不对,需要在配置文件 /etc/sysconfig/flanneld,加上FLANNEL_OPTIONS=‘–etcd-prefix=/atomic.io/network ’解决

3.错误(没能解决):端口占用 failed to register network: failed to start listening on UDP socket: listen udp4 192.168.66.110:8285: bind: address already in use

监听的时候说绑定地址失败了,我就尴尬了,明明是你自己占用了,还说别人。

#查看端口占用,发现是自己的服务啊。。
netstat -tunlp|grep 8285

#杀死端口
kill pid

#重启flannel服务
service flanneld start


Flannel默认采用vxlan作为backend,使用kernel vxlan默认的udp 8742端口。Flannel还支持udp的backend,使用udp 8285端口。



flanneld占用了端口



3、配置开机启动

由于必须先启动Flannel,所以不能通过
chkconfig xx on
的方式来设定开机启动,所以需要通过修改
vim /etc/rc.local
配置文件来做到。不然每次重启服务器,有可能Flannel获取不到ETCD的问题。

#修改rc.local
vim /etc/rc.local

#Docker FLANNEL
su - root -c 'service etcd start' #先ETCD
su - root -c 'service flanneld restart' #后flannel
su - root -c 'service docker restart'


4、配置Docker

#不重新加载配置,有可能docker先启动,这样就不生效了
systemctl daemon-reload

#重启docker
systemctl restart docker


我们会看到docker的ip已经修改成我们Flannel配置的IP了



启动后查看下启动的docker是不是被flannel托管了:

如果有–bip=172.17.45.1/24(xxxx) ,说明Flannel管理了Docker

ps aux | grep docker


可以看到docker启动后被加上了flanneld的相关配置项了(bip, ip-masq 和 mtu)



问题集合

1、配置完Flannel后,启动失败

FLANNEL_ETCD_PREFIX很可能是/atomic.io/network,将其改为/coreos.com/network,或者也可以通过-etcd-prefix指定。



修改配置文件(推荐)

vi /etc/sysconfig/flanneld

# Flanneld configuration options

# etcd url location.  Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.66.110:2379"

# etcd config key.  This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/atomic.io/network"
#FLANNEL_ETCD_PREFIX="/coreos.com/network"

# Any additional options that you want to pass

FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-prefix=/atomic.io/network  --etcd-endpoints=http://192.168.66.110:2379 --iface=eth0"




2、其他主机连接不上Extd服务

其他节点配置也对,但是就是连接不上,产生 问题的原因是ETCD服务没有启动和配置正确锁导致的,必须要确定ETCD服务先启动,然后再启动Flannel



3.ETCDCTL命令直接使用不了



这个问题原因是,监听的路径是当前ip,所以在使用的时候,需要 加上 –endpoints 参数,来说明监听的网络地址

etcdctl --endpoints  http://192.168.66.110:2379 ls /


网卡不是eth0导致容器没有ip

特别注意,这里因为我是使用的虚拟机,通过ifconfig可以看到有etc0和eth1两个网卡,这里我们要选择ip是192.168.0.xx的那个,我这里node1的ip是192.168.0.11,eth1网卡的ip是192.168.0.11,所以需要将修改成FLANNEL_OPTIONS=”-iface eth1”,要去掉注释,默认这句是注释的,并指向eth0。

容器不能获得独立的ip地址基本上是这个原因。

FLANNEL_OPTIONS="-iface eth0"


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: