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

我们看一下这个图:

微服务自动化.跨主机集群_第1张图片

 理解这个图了我们就进行下一步

Flannel特点

1. 使集群中的不同Node主机创建的Docker容器都具有全集群唯一的虚拟IP地址。

2. 建立一个覆盖网络(overlay network),通过这个覆盖网络,将数据包原封不动的传递到目标容器。覆盖网络是建立在另一个网络之上并由其基础设施支持的虚拟网络。覆盖网络通过将 一个分组封装在另一个分组内来将网络服务与底层基础设施分离。在将封装的数据包转发到端点后,将其解封装。

3. 创建一个新的虚拟网卡flannel0接收docker网桥的数据,通过维护路由表,对接收到的数据进行封包和转发(vxlan)。

4. etcd保证了所有node上flanned所看到的配置是一致的。同时每个node上的flanned监听etcd上的数据变化,实时感知集群中node的变化。

 (我们先准备两个虚拟机 好进行下一步 因为是两个虚拟机同时运行一下的命令)


 为了兼容flannel,将默认开启v2版本,配置文件还有更改:

(两个虚拟机里面都进入etcd)

vi /etc/profile   #进入文件

export ETCDCTL_API=2  #然后放到里面

source /etc/profile  #刷新  (记得是两个都要运行哦)(拿数据都可以使用get ,放数据就使用set

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

在两个虚拟机里面都运行

ETCDCTL_API=2 etcdctl \

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访问etcd时使用的key默认为:/coreos.com/network,可修改,但必须重新配置flanneld.conf的参数etcd-prefix,例如-etcd-prefix=/zking.com/network


flannel安装与配置

准备一个包 cd /uo 进去

再创建一个安装目录

mkdir -p /opt/flannel

解压到安装目录

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

 查看解压文件 

cd /opt/flannel && ls 

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

vim /etc/systemd/system/flanneld.service

[Unit]
Description=Flanneld
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service
Before=docker.service


[Service]
User=root
ExecStart=/opt/flannel/flanneld \   (紫色就是filanneld的安装路径需要改成自己的)
--etcd-endpoints=http://192.168.48.131:2379,http://192.168.48.142:2379 \   (两个虚拟机的IP
--etcd-prefix=/coreos.com/network \
--iface=ens33 \
--ip-masq
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target

systemctl daemon-reload && systemctl restart flanneld  #两个都重启一下

ifconfig #验证flannel网络

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

#创建Docker运行参数(使用flannel提供的脚本将subnet.env转写成Docker启动参数

 修改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

下载centos镜像,因为此镜像中其它软件及命令均有安装

docker run -it --name=centos centos bash

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

cat /etc/hosts

docker inspect bridge

从不同宿主机容器到其他宿主机容器

ping -c3 192.168.27.120 ping -c3 10.0.20.2 

经测试,发现是防火墙的问题,关闭防火墙后问题解决,但作为服务的防火墙是不能关闭的,如何解决呢。 这是由于linux还有底层的iptables,所以在node上分别执行:

iptables -P INPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -F

iptables -L -n

 docker start centos

docker exec -it centos bash  #两个虚拟机里面都运行 然后我们试着拼一下

ping 10.0.2.2

 

你可能感兴趣的:(自动化,java,运维)