上一篇,提及到要保证kubedns、tomcat、mysql调度到同一个node节点上,这是为什么呢?这个就涉及到了docker网络,如下图:
Docker网络对于host主机来说是一个局域网(内部网络)外界无法直接访问到Docker网络,例如想访问PodA1,是不行。如上图所示,假如PodA1和PodB1进行通信,是没有办法直接通信的。那么如何让PodA1和PodB1通信呢?有很多种方式,比如说添加静态路由、设置vxlan等。今天介绍的Flannel主要作用就是为了实现PodA1,PodA2,PodB1,PodB2,之间能两两进行通信且ip不冲突。用到的主要技术就是VxLan。
一、环境
IP |
角色 |
备注 |
192.63.63.1 |
Master |
Master、Node都做 |
192.63.63.10 |
Node |
|
软件名称 |
版本号 |
etcd |
3.2.9 |
flannel |
0.10.0 |
docker |
17.03.2-ce |
二、环境部署
【etcd】
2.1 etcd修改
这次实验etcd虽然不是集群,但是为了flannel能够与etcd进行通信(因为flannel的数据要存到etcd中),需要修改etcd的默认配置。Etcd启动后监听了两个端口:
端口 |
说明 |
备注 |
2379 |
用于客户端连接。也就是说某个应用要把数据存储到etcd中则通过此端口 |
2.0版本之前此端口是4001,为了兼容以往程序此端口还在使用中。以后版本可能会被丢弃 |
2380 |
用于集群间同步数据。也就是说这个端口用与多个etcd间通信 |
2.0版本之前此端口是4002,为了兼容以往程序此端口还在使用中。以后版本可能会被丢弃 |
Etcd的默认监听ip是localhost也就是127.0.0.1,如果client(flannel)不和etcd在同一个台主机上则无法使用etcd的服务。需要将etcd监听ip地址修改主机的ip地址,即修改master节点ip,192.63.63.1。
将/etc/etcd/etcd.conf中ETCD_LISTEN_CLIENT_URLS修改为“http://192.63.63.1:2379,http://192.63.63.1:4001"。
由于etcd监听ip修改了,也需要修改kube-apiserver的配置文件(/etc/kubernetes/apiserver)。修改etcd-server的地址:KUBE_ETCD_SERVERS="--etcd-servers=http://192.63.63.1:2379"
重启etcd和kube-apiserver
2.2 创建网络配置
etcdctl --endpoint="http://192.63.63.1:2379" set /coreos.com/network/config \ '{ "Network": "172.17.0.0/16", "SubnetMin": "172.17.0.0", "SubnetMax": "172.17.10.0", "Backend": {"Type": "vxlan"}}'
参数 |
说明 |
Network |
设置容器ip网段,docker0默认是172.17.0.0/16 |
SubnetMin |
起始网段,可不写 |
SubnetMax |
终止网段,可不写 |
Backend |
采用vxlan技术 |
通过这个配置后,flannel在分配ip的时候就完全依赖这个配置项。
问题1:
在执行上面的命令行可能会出现这个错误:
Error: client: etcd cluster is unavailable or misconfigured; error #0: dial tcp [::1]:2379: getsockopt: connection refused ; error #1: dial tcp [::1]:4001: getsockopt: connection refused error #0: dial tcp [::1]:2379: getsockopt: connection refused error #1: dial tcp [::1]:4001: getsockopt: connection refused
解决方式:
将etcd中ETCD_ADVERTISE_CLIENT_URLS设置成与ETCD_LISTEN_CLIENT_URLS一样取值,如:"http://192.63.63.1:2379,http://192.63.63.1:4001"
【flannel】
2.3 flannel修改
特别说明一下,所有node节点均需要安装flannel。将下载好的flannel进行解压:
文件 |
说明 |
flanneld |
核心文件 |
mk-docker-opts.sh |
用于修改docker配置项 |
1)将文件拷贝到各自目录中
cp flanneld /usr/bin mkdir -p /usr/libexec/flannel/ cp mk-docker-opts.sh /usr/libexec/flannel/
2)添加到systemd服务中
创建配置/etc/flannel/flanneld.conf
# Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="-etcd-endpoints=http://192.63.63.1:2379" # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="-etcd-prefix=/coreos.com/network" # Any additional options that you want to pass #FLANNEL_OPTIONS=""
创建服务文件/usr/lib/systemd/system/flanneld.service
# Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="-etcd-endpoints=http://192.63.63.1:2379" # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="-etcd-prefix=/coreos.com/network" # Any additional options that you want to pass #FLANNEL_OPTIONS="" [root@node1 ~]# cat /usr/lib/systemd/system/flanneld.service [Unit] Description=Flanneld overlay address etcd agent After=network.target After=network-online.target Wants=network-online.target After=etcd.service Before=docker.service [Service] Type=notify EnvironmentFile=-/etc/flannel/flanneld.conf ExecStart=/usr/bin/flanneld $FLANNEL_ETCD_ENDPOINTS $FLANNEL_ETCD_PREFIX $FLANNEL_OPTIONS ExecStartPost=/usr/libexec/flannel/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker Restart=on-failure [Install] WantedBy=multi-user.target RequiredBy=docker.service
3)修改etcd.service文件
将/usr/lib/systemd/system/docker.service文件中ExecStart=/usr/bin/dockerd修改为下面两行:
EnvironmentFile=-/run/flannel/docker ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS
4)重启各个服务
mkdir -p /run/flannel/ systemctl daemon-reload systemctl start flanneld systemctl restart docker
启动k8s各个服务
三、验证flannel功能是正常
创建kubedns以及web应用。
至此,flannel的配置介绍完了。