微服务自动化.使用Flannel跨主机集群

目录

一.Flannel概念

举例1: 

举例2:  

二.环境搭建

三.ETCD版本问题

1.编辑配置文件

2.v2和v3的区别

1.v2的使用方法

2.v3的使用方法

四.ETCD中保存网络信息

五.flannel安装与配置

1.上传flannel安装包

2.创建flannel安装目录

3.解压到安装目录

​编辑

4.查看解压后文件

5.为flannel创建一个systemd服务,用于后台启动

(1).创建服务

(2).更新刚刚配置的文件和重启flanneld

(3).查看flanneld的状态

6.验证flannel网络

六.docker配置

1.查看flannel分配的网络参数

 2.创建Docker运行参数

3.修改Docker启动参数

4.重新加载systemd配置,并重启Docker,然后查看状态

 5.查看是否应用成功

七.测试flannel

1.创建一个容器

 2.在容器依次查看集群内容器的flannel.1网络IP

已经完成了跨主机通信了!!!

好啦 文章内容到这里就结束了  你学到了吗  

觉得有用的记得关注点赞加收藏哦  我的etcd专栏还有其它关于etcd的技术点哦~

​编辑​编辑​编辑


一.Flannel概念

📃Flannel实质上是一种覆盖网络(overlay network),即表示运行在一个网上的网(应用层网络),并不依靠ip地址来传递消息,
而是采用一种映射机制,ip地址和identifiers做映射来资源定位。
也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,
目前已经支持UDPVxLANAWS VPCGCE路由等数据转发方式

📜Flannel实现的容器的跨主机通信通过如下过程实现:

  • 每个主机上安装并运行etcdflannel
  • etcd中规划配置所有主机的docker0子网范围;
  • 每个主机上的flannel根据etcd中的配置,为本主机的docker0分配子网,保证所有主机上的docker0网段不重复,并将结果(即本主机上的docker0子网信息和本主机IP的对应关系)存入
  • etcd库中,这样etcd库中就保存了所有主机上的docker子网信息和本主机IP的对应关系;
  • 当需要与其他主机上的容器进行通信时,查找etcd数据库,找到目的容器的子网所对应的outip(目的宿主机的IP)
  • 将原始数据包封装在VXLANUDP数据包中,IP层以outip为目的IP进行封装;
  • 由于目的IP是宿主机IP,因此路由是可达的;
  • VXLANUDP数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器。
📃Docker默认的网络环境下,单台主机上的Docker容器可以通过docker0网桥直接通信,而不同主机上的Docker容器之间只能通过在主机上做端口映射进行通信。
这种端口映射方式对很多集群应用来说极不方便。
如果能让Docker容器之间直接使用自己的IP地址进行通信,会解决很多问题。
按实现原理可分别直接路由方式、桥接方式(pipework)Overlay隧道方式(flannelovs+gre)等。  

举例1: 

直接路由

📃这种方式con1容器pingcon2的主机是可以ping通的,因为con1的主机和con2的主机IP在同一个网段下,

那么con1容器想要和con2进行ping是不行的,因为网段不一样,

我们使用Flannel就可以解决这样的问题

举例2:  

📃这种方式下因为IP是一样的就不好访问,要么用主机的公网去访问另一台主机然后这台主机做端口映射,要么用他们的私网来进行访问,这两种都可以,但是如果我们使用了Flannel 就方便多了,如下图:

📃要是用Flannel首先两台主机的网段不能一样,当主机乙启动时会给docker0分配一个网段,我们把这个网段放到etcd里面去,当主机甲启动的时候也会分配一个网段,但是在分配时前会去etcd里面查看一下,避免出现一样的网段, 那么所建来的容器IP就不一样了,可以发现多了一条虚线,原本容器A要访问容器C,经过了docker0就要去公网或者私网了,但是现在不用,容器A要访问容器C,经过了docker0之后会把请求转到Flanne,Flanne会去看一下etcd,然后根据网段找到了主机乙,把信息给主机乙,看下图:

 看红线

 

二.环境搭建

主机名称主机ip
环境要求
zhang192.168.20.129
etcd,docker,flannel
zhang的克隆192.168.20.131 
etcd,docker,flannel

 

1.docker安装与配置(参考我的etcd专栏:http://t.csdn.cn/k79pc)
2.etcd安装与集群搭建 (参考我的etcd专栏:http://t.csdn.cn/73BIE)

三.ETCD版本问题

📃ETCD3.4版本中,ETCDCTL_API=3etcd --enable-v2=false成为了默认配置

flannel操作etcd使用的是v2API,kubernetes操作etcd使用的v3的API

为了兼容flannel,将默认开启v2版本,故配置文件中还要设置:

两台主机都要执行以下内容!!!

1.编辑配置文件

vi /etc/profile

按 i 进入编辑模式,滑到最下面把以下内容复制进去:

export ETCDCTL_API= 2 # 指定 etcdctl 命令的版本为 v2

 按 esc 键输入 :wq 保存并退出

使用以下命令更新一下刚刚配置的文件 

source /etc/profile

注:etcdctl2和etcdctl3是不兼容的,两者的api参数也不一样,最关键的是“v2/v3的数据是不互通的”

2.v2和v3的区别

1.v2的使用方法

ETCDCTL_API=2 etcdctl set key value
ETCDCTL_API=2 etcdctl ls /
ETCDCTL_API=2 etcdctl del / --prefix

2.v3的使用方法

ETCDCTL_API=3 etcdctl put key value
ETCDCTL_API=3 etcdctl get /
ETCDCTL_API=3 etcdctl del / --prefix

 区别就是放值的参数不一样

四.ETCD中保存网络信息

两台主机都要执行以下内容!!!

使用v2版的set(而非put)命令向ETCD中保存flannel覆盖网络信息
ETCDCTL_API=2 etcdctl \
--endpoints "http://192.168.20.129:2379,http://192.168.20.131:2379" \
set /coreos.com/network/config \
'{"NetWork":"10.0.0.0/16","SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0","Backend": {"Type": "vxlan"}}'
  • Network: 用于指定Flannel地址池, 整个overlay(覆盖)网络为10.0.0.0/16网段.
  • SubnetLen: 用于指定分配给单个宿主机的docker0ip段的子网掩码的长度,默认值也是24
  • SubnetMin: 用于指定最小能够分配的ip
  • SudbnetMax: 用于指定最大能够分配的ip,在上面的示例中,表示每个宿主机可以分配一个24位掩码长度的子网,可以分配的子网从10.0.1.0/2410.0.20.0/24,也就意味着在这个网
  • 段中,最多只能有20台宿主机
  • Backend: 用于指定数据包以什么方式转发,默认为udp模式, 这里使用的是vxlan模式.因为为vxlan比起预设的udp性能相对好一些

flannel访问etcd时使用的key默认为:/coreos.com/network,可修改,但必须重新配置flanneld.conf的参数etcd-prefix,例如-etcd-prefix=/BUG.com/network

五.flannel安装与配置

两台主机都要执行以下内容!!!

cd /home  //home专门给来放软件的

1.上传flannel安装包

我用的连接工具 可以直接复制进去 , 你们可以用rz上传,显示没有rz命令可以去网上找选择方法

2.创建flannel安装目录

mkdir -p /opt/flannel

3.解压到安装目录

tar xzf flannel-v0.11.0-linux-amd64.tar.gz -C /opt/flannel

4.查看解压后文件

 cd /opt/flannel && ls

flanneld为主要的执行文件
sh脚本用于生成Docker启动参数

5.flannel创建一个systemd服务,用于后台启动

(1).创建服务

vim /etc/systemd/system/flanneld.service

按 i 进入编辑模式把以下内容复制进去:

[Unit]
Description=Flanneld
After=network.target
After=network-online.target
Wants=network-online.target
## flannel服务需要先于Docker启动,后于etcd启动
After=etcd.service
Before=docker.service


[Service]
User=root
## ExecStart即flanneld启动程序位置
## --etcd-endpoints参数为ectd集群客户端地址
## --iface参数为要绑定的网卡的IP地址,或是网卡名(ifconfig查看获得)请根据实际情况修改
ExecStart=/opt/flannel/flanneld --etcd-endpoints=http://192.168.20.129:2379,http://192.168.20.131:2379 --etcd-prefix=/coreos.com/network --iface=ens33 --ip-masq
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target

按esc键输入 :wq  保存并退出

(2).更新刚刚配置的文件和重启flanneld

systemctl daemon-reload && systemctl restart flanneld

(3).查看flanneld的状态

systemctl status flanneld

6.验证flannel网络

 ifconfig

如果看到flannel.1网卡的地址和etcd中存储的地址一样,这样flannel网络配置完成

六.docker配置

两台主机都要执行以下内容!!!

必须先启动flanneld在启动docker不然不会使用到flanneld

让docker使用flanneld

在各个节点安装好Docker,然后更改Docker的启动参数,使其能够使用flannel进行IP分配,以及网络通讯

1.查看flannel分配的网络参数

(在Flannel运行之后,会生成一个环境变量文件,包含了当前主机要使用flannel通讯的相关参数)

cat /run/flannel/subnet.env

 2.创建Docker运行参数

(使用flannel提供的脚本将subnet.env转写成Docker启动参数)

/opt/flannel/mk-docker-opts.sh -d /run/flannel/docker_opts.env -c

3.修改Docker启动参数

vim /lib/systemd/system/docker.service

 下面是docker.service要修改的地方

[Service]节点中
1.指定启动参数所在的文件位置(这个配置是新增的 按 i 进入编辑模式把以下内容复制到service节点中:
EnvironmentFile=/run/flannel/docker_opts.env

2.在原有ExecStart后面添加$DOCKER_OPTS
修改前 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
修改后 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS

4.重新加载systemd配置,并重启Docker,然后查看状态

systemctl daemon-reload && systemctl restart docker && systemctl status docker

 5.查看是否应用成功

ifconfig
docker0原本的IP是172.0..0.1,现在是10.0.11.1就表示docker0在跟着flanneld在变了

七.测试flannel

1.创建一个容器

docker run -it --name centos centos

 2.在容器依次查看集群内容器的flannel.1网络IP

cat / etc / hosts
ctrl +p +ctr+q 退出容器
使用以下命令查看容器IP
docker inspect bridge

 

 获得IP之后在另一台主机的容器去ping一下

后面的ms就便票是可以ping通,两个容器之间已经完成了互连,

已经完成了跨主机通信了!!!


好啦 文章内容到这里就结束了  你学到了吗  

觉得有用的记得关注点赞加收藏哦  我的etcd专栏还有其它关于etcd的技术点哦~

我敲BUG的etcd专栏:http://t.csdn.cn/OEEW8

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值