kubernetes 集群中Flannel的使用说明
童飞 360云计算
女主宣言
docker作为容器云的中非常具有代表性的产品,近年来收到非常广泛的关注,而如何对docker这样的容器云进行管理也是一件非常头疼的事情,本文主要通过对k8s集群管理中flannel组件的分析讨论,来为大家了解docker集群管理提供一点帮助。
PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!
k8s集群安装配置etcd的时会为安装的k8s集群配置一个网段,这个网段是整个集群中容器可以使用的ip地址段,譬如我们在安装完成etcd的时候执行etcdctl set 设置一个key-value的键值对指定这个集群的网段范围,但是如何确保每个minion节点中容器的ip地址是唯一的,就需要flannel来帮忙了,flannel基于集群的这个网段来为每个minion节点做二次子网的划分。接下来我们为大家分析flannel和etcd是如何协同搭配完成这一工作的。
在安装配置k8s集群时候需要为每一个minion节点安装flannel,我们主要从配置文件入手来分析flannel是怎样工作来完成对集群子网的二次划分。
flannel配置文件flanneld如下:
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD="http://192.168.163.152:2379"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_KEY="/coreos.com/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
在配置文件中我们看到指定了两个参数一个是FLANNEL_ETCD这个值指定的是我们安装etcd服务端的地址和端口,可以通过netstat 命令看下minion端的连接状态,可以看到minion端与etcd服务端etcd的端口相连接,这个设置是让minion节点的flannel能够与服务端的etcd保持通信:
minion节点中flannel的链接状态
第二个值FLANNEL_ETCD_KEY是指定的一个key,我们在安装etcd服务端时执行了一条命令:
etcdctl -C 192.168.163.148:2379 set /coreos.com/network/config '{ "Network": "192.168.0.0/16" }'
这个值很重要,这个key对应的value就是我们每个minion机为docker设置的启动参数范围。先看一张图,这张图是minion机docker的启动参数
minion1 docker启动参数
minion2 docker启动参数
需要注意的是docker启动参数中的 --bip=192.168.102.1/24这个参数,flannel的作用就是修改了这个参数相当于为每一台minion主机的docker划分了子网。再通过ifconfig查看下可以看到图:
minion2 的网口信息
多了一个docker的虚拟网卡,所以我们在安装kubernetes时如果发现我们安装完docker后docker0网卡的网段不在FLANNEL_ETCD_KEY中那将会导致docker无法启动,在kubernetes node上执行kubectl get node将会显示node节点 not ready。
综上所述
flannel作为coreos提供给k8s的组件,在运行过程中通过与etcd进行通信获取整个集群网段信息并进行子网的二次分配,使得每个minion节点都能拥有一个唯一的子网网段,进而确保在整个k8s集群中运行的docker容器都能获得唯一的ip地址。