IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 微服务自动化之跨主机集群 -> 正文阅读

[系统运维]微服务自动化之跨主机集群

目录

一、通信方式

1、容器间内部通信

2、跨主机通信

1、前言:

2、三种通信方式:

二、ETCD配置

? ? ? ? 1、首先先创建并编辑/etc/profile文件,并加入对应语句

?? ? ? ? 2、刷新资源

? ? ? ? 3、ETCD中保存网络信息

?

?? ? ? ? 4、etcdctl2和etcdctl3使用方法

三、Flannel安装与配置

? ? ? ? 1、下载或上传flannel安装包

? ? ? ? 2、创建flannel安装目录

? ? ? ? 3、解压到安装目录

? ? ? ? 4、查看解压后文件?

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

? ? ? ? 6、刷新资源并且重启flannel

? ? ? ? 7、验证flannel网络

四、Docker配置

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

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

? ? ? ? 3、修改Docker启动参数

?? ? ? ? 4、重新加载systemd配置,并重启Docker?

? ? ? ? 5、查看是否应用成功?

五、测试flannel

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

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

? ? ? ? 3、从不同宿主机容器到其他宿主机容器

? ? ? ? 4、解决flannel下容器无法跨主机互通问题

六、总结?

? ? ? ? 1、关于docker、flannel、etcd之间启动顺序

?

? ? ? ? ?2、注意


一、通信方式

? ? ? 通信方式分为两种,第一种就是容器间内部通信,第二种是跨主机通信

1、容器间内部通信

bridge模式
host模式
自定义网络
Container模式
None模式

2、跨主机通信

1、前言:

Docker默认的网络环境下,单台主机上的Docker容器可以通过docker0网桥直接通信,而不同主机上的Docker容器之间只能通过在主机上做端口映射进行通信。
这种端口映射方式对很多集群应用来说极不方便

解决方法:

如果能让Docker容器之间直接使用自己的IP地址进行通信,会解决很多问题。

按实现原理可分别直接路由方式、桥接方式(如pipework)、Overlay隧道方式(如flannel、ovs+gre)

2、三种通信方式:

? ? ? 1、直接路由(静态路由)

具体讲解请转向:静态路由原理与配置,你真的都掌握了吗? - 知乎

请看示意图:?

? ? ? ? ? ??1.1定义:

静态路由是由用户管理员在路由器中手动配置的固定路由,因为是人工配置的,所以当网络的拓扑结构或链路的状态发生变化时,需要我们手动修改路由表里面的相关信息。

? ? ? ? ? ??1.2特点:

(1)静态路由固定了路径的转发,因此对路由器的路由选择进行控制,节省了网络带宽,减少了额外开支;
(2)静态路由是单向的,它只设定了从此路由设备转发到目标出去的路径;
(3)静态路由是缺乏灵活性的,网络发送变化时需要人工进行配置修改。

? ? ? 2、pipework(桥接方式)

pipework是Docker公司工程师Jerome Petazzoni在Github上发布的名为pipework的工具。

号称是容器网络的SDN解决方案,可以在复杂的场景下将容器连接起来。它既支持普通的LXC容器,也支持Docker容器。

? ? ? 3、Flannel通信

? ? ? ? ? ?1、定义:

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

? ? ? ? ? ?2、Flannel通信过程实现:

1、每个主机上安装并运行etcd和flannel;


2、在etcd中规划配置所有主机的docker0子网范围;


3、每个主机上的flannel根据etcd中的配置,为本主机的docker0分配子网,保证所有主机上的docker0网段不重复,并将结果(即本主机上的docker0子网信息和本主机IP的对应关系)存入
etcd库中,这样etcd库中就保存了所有主机上的docker子网信息和本主机IP的对应关系;


4、当需要与其他主机上的容器进行通信时,查找etcd数据库,找到目的容器的子网所对应的outip(目的宿主机的IP);


5、将原始数据包封装在VXLAN或UDP数据包中,IP层以outip为目的IP进行封装;


6、由于目的IP是宿主机IP,因此路由是可达的;


7、VXLAN或UDP数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器

? ? ? ? ? ?3、Flannel特点:

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


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


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


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

?

二、ETCD配置

在进行ETCD配置的时候,要先解决ETCD版本问题,为什么要解决ETCD版本问题?

因为ETCD3.4版本中,ETCDCTL_API=3和etcd --enable-v2=false成为了默认配置
flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API

? ? ? ? 1、首先先创建并编辑/etc/profile文件,并加入对应语句

vi /etc/profile

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

?将上述语句加入到文件最后

? ? ? ? 2、刷新资源

source /etc/profile

? ? ? ? 3、ETCD中保存网络信息

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

ETCDCTL_API=2 etcdctl \
--endpoints "http://192.168.86.131:2379,http://192.168.86.132:2379" \ (两台主机的ip地址,这个不能写错)
set /coreos.com/network/config \
'{"NetWork":"10.0.0.0/16","SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0","Backend": {"Type": "vxlan"}}'

关键词讲解:

1、Network: 用于指定Flannel地址池, 整个overlay(覆盖)网络为10.0.0.0/16网段.


2、SubnetLen: 用于指定分配给单个宿主机的docker0的ip段的子网掩码的长度,默认值也是24


3、SubnetMin: 用于指定最小能够分配的ip段


4、SudbnetMax: 用于指定最大能够分配的ip段,在上面的示例中,表示每个宿主机可以分配一个24位掩码长度的子网,可以分配的子网从10.0.1.0/24到10.0.20.0/24,也就意味着在这个网
段中,最多只能有20台宿主机


5、Backend: 用于指定数据包以什么方式转发,默认为udp模式, 这里使用的是vxlan模式.因为为vxlan比起预设的udp性能相对好一些
?

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

?? ? ? ? 4、etcdctl2和etcdctl3使用方法

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

etcdctl2使用方法:

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

etcdctl3使用方法

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

三、Flannel安装与配置

? ? ? ? 1、下载或上传flannel安装包

? ? ? ? 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

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

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


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

? ? ? ? 6、刷新资源并且重启flannel

systemctl daemon-reload && systemctl restart flanneld(必须要进行刷新资源,不然看到docker0的网段还是没变)

? ? ? ? 7、验证flannel网络

ifconfig

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

?

?

四、Docker配置

? ? ? ? 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

注意:是在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

? ? ? ? 4、重新加载systemd配置,并重启Docker?

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

? ? ? ? 5、查看是否应用成功?

观察docker0的网卡ip地址已经处于flannel网卡网段中

ifconfig

这次的docker0的地址和之前图中地址不同了,在同一网段下,说明配置成功!

五、测试flannel

前言:测试flannel必须要用到ping命名,而ping命名只有centos中有,而之前的alpine镜像中没有,所以在测试flannel之前先要检查自己有没有centos镜像

?如果没有可以进行下载

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

docker run -it --name=centos centos bash

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

cat /etc/hosts

?docker inspect bridge

? ? ? ? 3、从不同宿主机容器到其他宿主机容器

ping -c3 192.168.27.120 ping主机

ping -c3 10.0.20.2? ?ping容器? ?

-c3:是指在ping连接的时候只会显示三行信息,本来要显示很多信息

? ? ? ? 4、解决flannel下容器无法跨主机互通问题

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

?ping另一个主机可以ping通

??发现ping另一个主机中的容器时就会显示连接超时

?接下来执行以下命名,就可以ping通到另一个主机中的容器了

jiptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n

?

六、总结?

? ? ? ? 1、关于docker、flannel、etcd之间启动顺序

先是启动etcd,再是启动flannel,最后是dokcer

为什么会是这个顺序?

etcd在这里充当一个注册中心,flannel是当更改地址和发送数据,之后就是到容器中了

可以根据下面流程图来进行理解

? ? ? ? ?2、注意

上面是只写了一个服务器的,另一个服务器也要配置,都是一样的配置思路,重复操作即可

今天的知识就分享到这了,希望能够帮助到你!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:53:58  更:2022-03-03 16:54:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:35:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码