Flannel配置以及部署

上一篇,提及到要保证kubedns、tomcat、mysql调度到同一个node节点上,这是为什么呢?这个就涉及到了docker网络,如下图:

 

Flannel配置以及部署_第1张图片

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","VNI":3}}'

参数

说明

Network

设置容器ip网段,docker0默认是172.17.0.0/16

SubnetMin

起始网段,可不写

SubnetMax

终止网段,可不写

Backend

数据字段

type 不写默认为udp方式,此处指定为vxlan方式
VNI 指定vlan id 默认是1

通过这个配置后,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

[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配置以及部署_第2张图片

至此,flannel的配置介绍完了。

 

你可能感兴趣的:(网络,开源软件,Docker&K8S&虚拟化)