安装kubernetes前需要首先安装并配置好ETCD和Flannel环境。在Kubernetes的每一个Master和Node中都需要正常运行。在所有节点的ETCD运行正常以后,可以按照以下注意事项来进行Flannel的安装配置。与ETCD安装方式一样,可以通过GIT下载拷贝,也可以直接YUM安装,配置事项是相同的。这里以YUM安装为例。
1)安装Flannel
yum install -y flannel
2 ) 修改flannel的配置文件 /etc/sysconfig/flanneld
把etcd的服务地址和端口,flannel配置子网的信息,以及日志路径等添加到配置文件中。
因为每台机器上,都有etcd在运行,因此etcd的服务地址和端口,填写本机的即可。etcd会自动同步到etcd集群中的其它节点上。
修改完成后,文件内容:
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD="http://127.0.0.1:2379"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
# FLANNEL_ETCD_KEY="/atomic.io/network"
FLANNEL_ETCD_KEY="/k8s/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-endpoints=http://127.0.0.1:2379"
3 ) 然后执行:
etcdctl mkdir /k8s/network
4 ) 上述命令在etcd上创建一个目录,再执行:
etcdctl set /k8s/network/config '{"Network":"172.200.0.0/16"}'
该命令含义是,期望docker运行的container实例的地址,都在 172.200.0.0/16网段中
flanneld会读取/k8s/network目录中config值,然后接管docker的地址分配,并把docker和宿主机器之间的网络桥接起来。
5 ) flannel的服务启动配置不用做修改
systemctl enable flanneld.service
systemctl stop docker # 暂时先关闭docker服务,启动flanneld的时候,会自动拉起docker服务
systemctl start flanneld.service
后续确保系统启动时以脚本或者第三个service的方式启动即可。因为flannel需要早于docker启动服务。暂时以脚本方式如下:
#! /bin/sh
# firstly, start etcd
systemctl restart etcd
# secondly, start flanneld
systemctl restart flanneld
# then, start docker
systemctl restart docker
6) 这时可以查看docker0和flannel0的网络设备,确保每个Node上的Docker0和flannel0在同一段内,并且不同节点的网段都被划分在172.200.0.0/16 的不同段内。如Master是172.200.79.0/16,Node1是172.200.80.0/16,Node2是172.200.11.0/16。
以下是Master(192.168.111.90)的IP信息,可以看出docker的ip被flannel管理成功了。
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:90:de:df brd ff:ff:ff:ff:ff:ff
inet 192.168.111.90/24 brd 192.168.111.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe90:dedf/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:60:93:34:b0 brd ff:ff:ff:ff:ff:ff
inet <span style="color:#FF0000;">172.200.79.1</span>/24 scope global docker0
valid_lft forever preferred_lft forever
5: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN qlen 500
link/none
inet <span style="color:#FF0000;">172.200.79.0</span>/16 scope global flannel0
valid_lft forever preferred_lft forever
[root@localhost ~]#
如下是Node1(192.168.111.93)的IP信息,可以看出docker的ip被flannel管理成功了。
[root@localhost bin]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:2c:e0:3f brd ff:ff:ff:ff:ff:ff
inet 192.168.111.93/24 brd 192.168.111.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet 192.168.111.90/24 brd 192.168.111.255 scope global secondary enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe2c:e03f/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:30:fa:70:d5 brd ff:ff:ff:ff:ff:ff
inet 172.200.80.1/24 scope global docker0
valid_lft forever preferred_lft forever
7: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN qlen 500
link/none
inet 172.200.80.0/16 scope global flannel0
valid_lft forever preferred_lft forever
[root@localhost bin]#
如下是Node2(192.168.111.94)的IP信息,可以看出docker的ip被flannel管理成功了。
[root@localhost home]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:79:d3:e1 brd ff:ff:ff:ff:ff:ff
inet 192.168.111.94/24 brd 192.168.111.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe79:d3e1/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:e7:33:c4:e9 brd ff:ff:ff:ff:ff:ff
inet <span style="color:#FF0000;">172.200.11.1</span>/24 scope global docker0
valid_lft forever preferred_lft forever
6: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN qlen 500
link/none
inet 172.200.11.0/16 scope global flannel0
valid_lft forever preferred_lft forever
[root@localhost home]#