微服务之自动化-跨主机集群

环境

这次使用flannel要安装对应的配置环境

etcd-v3.4.3-linux-amd64.tar.gz

flannel-v0.11.0-linux-amd64.tar.gz

systemctl disable docker 取消开机自启动 

而且使用flannel 的时候,把docker 关了,因为flannel 要在docker之前启动

systemctl stop docker 或者 docker stop docker.socket 关闭docker 命令

想启动flannel 要先把etcd给启动了

开启流程是 开启etcd -> 开启flannel -> 开启docker

开启etcd

systemctl start etcd

开启flannel
systemctl start flanneld

创建 Docker 运行参数 ( 使用 flannel 提供的脚本将 subnet.env 转写成 Docker 启动参数 )
/opt/flannel/mk-docker-opts.sh -d /run/flannel/docker_opts.env -c

启动docker
systemctl start docker

Docker跨主机集群-flannel

Flannel 实质上是一种覆盖网络 (overlay network), 即表示运行在一个网上的网 ( 应用层网络 ), 并不依靠 ip 地址来传递消息 ,
而是采用一种映射机制 , ip 地址和 identifiers 做映射来资源定位。
也就是将 TCP 数据包装在另一种网络包里面进行路由转发和通信 ,
目前已经支持 UDP VxLAN AWS VPC GCE 路由等数据转发方式
Flannel 实现的容器的跨主机通信通过如下过程实现 :
  1. 每个主机上安装并运行etcdflannel
  2. etcd中规划配置所有主机的docker0子网范围;
  3. 每个主机上的flannel根据etcd中的配置,为本主机的docker0分配子网,保证所有主机上的docker0网段不重复,并将结果(即本主机上的docker0子网信息和本主机IP的对应关系)存入
  4. etcd库中,这样etcd库中就保存了所有主机上的docker子网信息和本主机IP的对应关系;
  5. 当需要与其他主机上的容器进行通信时,查找etcd数据库,找到目的容器的子网所对应的outip(目的宿主机的IP)
  6. 将原始数据包封装在VXLANUDP数据包中,IP层以outip为目的IP进行封装;
  7. 由于目的IP是宿主机IP,因此路由是可达的;
  8. VXLANUDP数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器。

Flannel特点

  1. 使集群中的不同Node主机创建的Docker容器都具有全集群唯一的虚拟IP地址。
  2. 建立一个覆盖网络(overlay network),通过这个覆盖网络,将数据包原封不动的传递到目标容器。覆盖网络是建立在另一个网络之上并由其基础设施支持的虚拟网络。覆盖网络通过将
  3. 一个分组封装在另一个分组内来将网络服务与底层基础设施分离。在将封装的数据包转发到端点后,将其解封装。
  4. 创建一个新的虚拟网卡flannel0接收docker网桥的数据,通过维护路由表,对接收到的数据进行封包和转发(vxlan)
  5. etcd保证了所有nodeflanned所看到的配置是一致的。同时每个node上的flanned监听etcd上的数据变化,实时感知集群中node的变化。

ETCD版本问题

ETCD3.4 版本中 ,ETCDCTL_API=3 etcd --enable-v2=false 成为了默认配置
flannel 操作 etcd 使用的是 v2 API, kubernetes 操作 etcd 使用的 v3 API
为了兼容 flannel, 将默认开启 v2 版本 , 故配置文件中还要设置 :
vi / etc / profile

指定etcdctl命令的版本为v2 

刷新配置文件
source / etc / profile
etcdctl 命令的版本不同,命令的方式也有所不同,不过可以使用

etcdctl -h 来查看命令 

ETCD中保存网络信息

使用 v2 版的 set( 而非 put) 命令向 ETCD 中保存 flannel 覆盖网络信息

ETCDCTL_API=2 etcdctl \
--endpoints "http://192.168.239.131:2379,http://192.168.239.134: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"}}'

flannel安装与配置

下载或上传 flannel 安装包
创建 flannel 安装目录
mkdir -p /opt/flannel
解压到安装目录
tar xzf flannel-v0.11.0-linux-amd64.tar.gz -C /opt/flannel
查看解压后文件
cd /opt/flannel && ls

flanneld为主要的执行文件

sh 脚本用于生成 Docker 启动参数
flannel 创建一个 systemd 服务 , 用于后台启动
vim /etc/systemd/system/flanneld.service

flanneld.service  文件

注意修改IP地址

[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.239.131:2379,http://192.168.239.134:2379 \
--etcd-prefix=/coreos.com/network \
--iface=ens33 \
--ip-masq
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.targeti

刷新并重启

systemctl daemon-reload && systemctl restart flanneld
验证 flannel 网络
查看 flannel 的ip是否在和etcd中存储的地址一样

docker配置

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

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

cat /run/flannel/subnet.env

创建 Docker 运行参数 ( 使用 flannel 提供的脚本将 subnet.env 转写成 Docker 启动参数 )
/opt/flannel/mk-docker-opts.sh -d /run/flannel/docker_opts.env -c
修改 Docker 启动参数
vim /lib/systemd/system/docker.service
[Service] 节点中
指定启动参数所在的文件位置 ( 这个配置是新增的 )
EnvironmentFile=/run/flannel/docker_opts.env
在原有 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

 重新加载systemd配置,并重启Docker

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

查看是否应用成功
ifconfig

测试flannel

拉取tomcat

docker pull tomcat

运行tomcat

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

cat /etc/hosts
docker inspect bridge

我们可以清楚看到tomcat 运行后的ip是 10.0.20.2

我们接下来进入容器中,ping ip 查看是否可以连接

也可以获取到页面

查看etcd保存的值

查看etcd 里的flannel 网段

 使用get 查看里面的数据时,就可以看到如果我们使用 10.0.20.0这个子网,它就会映射到 192.168.239.134 节点中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值