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

目录

一、容器间内部通信

二、跨主机通信

1、直接路由

2、Pipework

3、Flannel

①、Flannel特点

三、环境搭建

ETCD版本问题

①、修改配置文件

②、api 2 使用方法

③、 api 3 使用方法

                   4、 ETCD中保存网络信息

①、使用v2版的set命令向ETCD中保存flannel覆盖网络信息

三、flannel安装与配置

                          1、下载或上传flannel安装包

2、创建flannel安装目录

3、解压到安装目录

4、查看解压后文件

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

6、更新配置文件中并启动flanneld

7、 验证flannel网络

四、docker配置

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

2、创建Docker运行参数

3、修改Docker启动参数

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

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

5、查看是否应用成功

五、测试flannel

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

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

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

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

一、容器间内部通信

  • bridge模式

  • host模式

  • 自定义网络

  • Container模式

  • None模式

二、跨主机通信

Docker默认的网络环境下 , 单台主机上的 Docker 容器可以通过 docker0 网桥直接通信 , 而不同主机上 的Docker 容器之间只能通过在主机上做端口映射进行通信。 这种端口映射方式对很多集群应用来说极不方便。 如果能让 Docker 容器之间直接使用自己的 IP 地址进行通信 , 会解决很多问题。 按实现原理可分别直接路由方式、桥接方式( 如 pipework) 、 Overlay 隧道方式 ( 如 flannel 、 ovs+gre) 等

1、直接路由

2、Pipework

pipework是由Docker的工程师Jérôme Petazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用。下面用三个场景来演示pipework的使用和工作原理。

3、Flannel

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

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

  2. 建立一个覆盖网络(overlay network),通过这个覆盖网络,将数据包原封不动的传递到目标容器。覆盖网络是建立在另一个网络之上并由其基础设施支持的虚拟网络。覆盖网络通过将

  3. 一个分组封装在另一个分组内来将网络服务与底层基础设施分离。在将封装的数据包转发到端点后,将其解封装。

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

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

    三、环境搭建

主机ip(根据主机的来)环境要求
centos 7192.168.232.135etcd,docker,flannel
centos 7192.168.232.135etcd,docker,flannel

ETCD版本问题

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

①、修改配置文件

vi / etc / profile
export ETCDCTL_API=2 # 指定etcdctl命令的版本为v2 

 

 source /etc/profile 

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

②、api 2 使用方法
ETCDCTL_API=2 etcdctl set key value
​
ETCDCTL_API=2 etcdctl ls /
​
ETCDCTL_API = 2 etcdctl del / -- prefix
③、 api 3 使用方法
ETCDCTL_API=3 etcdctl put key value
​
ETCDCTL_API=3 etcdctl get /
​
ETCDCTL_API=3 etcdctl del / --prefix

4、 ETCD中保存网络信息

①、使用v2版的set命令向ETCD中保存flannel覆盖网络信息
ETCDCTL_API = 2 etcdctl \
-- endpoints "http://192.168.129.123:2379,http://192.168.129.124: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: 用于指定分配给单个宿主机的docker0的ip段的子网掩码的长度,默认值也是24

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

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

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

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

三、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

 

flanneld 为主要的执行文件

sh 脚本用于生成 Docker 启动参数

5、 为flannel创建一个systemd服务(用于后台启动)
vim /etc/systemd/system/flanneld.service
flanneld.service:

[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.129.123:2379,http://192.168.129.124:2379 \
--etcd-prefix=/coreos.com/network \
--iface=ens33 \
--ip-masq
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
 
6、更新配置文件中并启动flanneld
systemctl daemon - reload && systemctl restart flanneld
7、 验证flannel网络
ifconfig

 

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

四、docker配置

在各个节点安装好 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

创建好的启动参数位于/run/flannel/docker_opts.env文件中,可使用cat命令查看 cat/run/flannel/docker_opts.env

3、修改Docker启动参数
vim / lib / systemd / system / docker . service
下面是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
4、重新加载systemd配置,并重启Docker
 systemctl daemon-reload && systemctl restart docker && systemctl status docker

 

5、查看是否应用成功

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

ifconfig

 

五、测试flannel

1、下载centos镜像,因为此镜像中其它软件及命令均有安装
docker run - it -- name = centos centos bash
2、依次查看集群内容器的flannel.1网络IP
cat /etc/hosts
​
docker inspect bridge
3、从不同宿主机容器到其他宿主机容器
ping - c3 192.168 .129 .124

 

ping -c3 10.0.19.2  

 

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

经测试 , 发现是防火墙的问题 , 关闭防火墙后问题解决 , 但作为服务的防火墙是不能关闭的 , 如何解决呢。

这是由于 linux 还有底层的 iptables, 所以在 node 上分别执行 :

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/309197.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

111.连接已终止的线程、线程分离、线程取消

一、连接已终止的线程 功能:和一个已经终止的线程进行连接 回收子线程的资源 这个函数是阻塞函数,调用一次只能回收一个子线程 参数:thread:需要回收的子线程的ID retval: 接收子线程推出时的返回值 返回值&#xff1a…

JVM基础(2)——JVM内存模型

一、简介 JVM会加载类到内存中,所以 JVM 中必然会有一块内存区域来存放我们写的那些类。Java中有类对象、普通对象、本地变量、方法信息等等各种对象信息,所以JVM会对内存区域进行划分: JDK1.8及以后,上图中的方法区变成了Metasp…

Java使用IText生产PDF时,中文标点符号出现在行首的问题处理

Java使用IText生成PDF时,中文标点符号出现在行首的问题处理 使用itext 5进行html转成pdf时,标点符号出现在某一行的开头 但这种情况下显然不符合中文书写的规则,主要问题出在itext中的DefaultSplitCharacter类,该方法主要用来判断…

基于ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模

2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5,将人工智能的发展推向了一个新的高度。2023年4月,更强版本的ChatGPT4.0上线,文本、语音、图像等多模态交互方式使其在…

C# Open Vocabulary Object Detection 部署开放域目标检测

目录 介绍 效果 模型信息 owlvit-image.onnx owlvit-post.onnx owlvit-text.onnx 项目 代码 Form1.cs OWLVIT.cs 下载 C# Open Vocabulary Object Detection 部署开放域目标检测 介绍 训练源码地址:https://github.com/google-research/scenic/tree/…

性格是如何形成的?能不能改变性格?

有一句话叫“性格决定命运”,广泛流传,也就是说 “命运”与“性格”是紧密相连的,可见“性格”对于一个人的重要性。 性格是怎么来的? 1、遗传基因 根据一些心理学家的最新研究,认为性格与人体内的基因有关系&#x…

浏览器缓存引发的odoo前端报错

前两天,跑了一个odoo16项目,莫名其妙的前端报错, moment.js 报的错, 这是一个时间库,不是我自己写的代码,我也没做过任何修改,搞不清楚为什么报错。以为是odoo的bug,所以从gitee下载…

【Python】编程练习的解密与实战(一)

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《Python | 编程解码》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 🪐1. 初识Python &a…

RuntimeError: CUDA error: invalid device ordinal解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

C#基础-空处理

在c#中,值对象是没有办法赋值为null的。比如说,你想要定义一个布尔值,你的赋值数据要么得是true、要么就得是false,默认情况下我们永远没可能给这个布尔赋值为null,即使只是对这个变量进行声明而不初始化数据&#xff…

ChatGPT会给教育界带来怎样的冲击,又将与教育碰撞出怎样的火花?

11 月 7 日凌晨,美国人工智能公司 OpenAI 的开发者大会正式开启,创始人 Sam Altman 和其同事,发布了团队最新的成果GPT-4 Turbo,新一代的GPT不仅更快、有更长的上下文、而且更好的控制。而随之推出的「GPTs」——让人们能用自然语…

服务器执行rm命令时自动记录到审计日志中

目的 当在服务器上执行类似于 rm 命令时,自动记录该命令执行的时间,在哪里执行的,删除的什么文件,记录到审计日志中,能够查找到某些文件丢失原因 配置 # 需要root权限,sudo不行,这里假设执行…

Java:爬虫htmlunit实践

之前我们已经讲过使用htmlunit及基础,没有看过的可以参考Java:爬虫htmlunit-CSDN博客 我们今天就来实际操作一下,爬取指定网站的数据 1、首先我们要爬取一个网站数据的时候我们需要对其数据获取方式我们要进行分析,我们今天就拿双…

注册中心(Nacos)

简介 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管…

基于DNA的密码学和隐写术综述

摘要 本文全面调研了不同的脱氧核糖核酸(DNA)-基于密码学和隐写术技术。基于DNA的密码学是一个新兴领域,利用DNA分子的大规模并行性和巨大的存储容量来编码和解码信息。近年来,由于其相对传统密码学方法的潜在优势,如高存储容量、低错误率和对环境因素的抗性,该领域引起…

网络之路28:二层链路聚合

正文共:1666 字 14 图,预估阅读时间:2 分钟 目录 网络之路第一章:Windows系统中的网络 0、序言 1、Windows系统中的网络1.1、桌面中的网卡1.2、命令行中的网卡1.3、路由表1.4、家用路由器 网络之路第二章:认识企业设备…

Elasticsearch windows开箱即用【记录】

一、准备工作 安装ES之前要在本机安装好JDK,对应的兼容性见官网链接:https://www.elastic.co/cn/support/matrix ES官网链接:https://www.elastic.co/cn/, 我本机安装的是JDK8,测试使用的是7.3.0版本的ES和Kibana。 1、首先去…

Spring Boot 2.6 以上整合 Swagger + Knife4j 报错

Spring Boot 2.6 以上整合 Swagger Knife4j 报错 报错信息报错原因解决办法 报错信息 org.springframework.context.ApplicationContextException: Failed to start bean documentationPluginsBootstrapper; nested exception is java.lang.NullPointerException: Cannot inv…

premiere简约大气3D动画logo片头Pr模板Mogrt免费下载

Premiere简约大气3D动画logo片头pr模板mogrt下载,无需插件,高清分辨率,易于自定义,包括教程,不包括音频和图像。免费下载:https://prmuban.com/37065.html

centos下系统全局检测工具dstat使用

目录 一:没有需要安装 二:dstat命令参数 三、监测界面各参数含义(部分) 四、dstat的高级用法 一:没有需要安装 yum install dstat 二:dstat命令参数 有默认选项,执行dstat命令不加任何参数…