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

这篇具有很好参考价值的文章主要介绍了微服务自动化.跨主机集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、容器间内部通信

  • 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特点

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

三、环境搭建 

两台主机都要进行以下操作!!!!!!!!!!!

1、docker安装与配置
2、etcd安装与集群搭建
3、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 

②、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安装与配置

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服务(用于后台启动)

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网络

ipconfig

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

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网卡网段中 

ipconfig 

五、测试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  文章来源地址https://www.toymoban.com/news/detail-788309.html

4、解决flannel下容器无法跨主机互通问题
经测试 , 发现是防火墙的问题 , 关闭防火墙后问题解决 , 但作为服务的防火墙是不能关闭的 , 如何解决呢。
这是由于 linux 还有底层的 iptables, 所以在 node 上分别执行 :


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

到了这里,关于微服务自动化.跨主机集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Ambari】Ansible自动化部署大数据集群

    目录 一.版本说明和介绍信息 1.1 大数据组件版本 1.2 Apache Components 1.3 Databases支持版本 二.安装包上传和说明 三.服务器基础环境配置 3.1global配置修改 3.2主机名映射配置 3.3免密用户名密码配置 3.4 ansible安装 四. 安装Ambari-server 4.1 安装ambari-server 4.2 检查REPO源 五、HDP 安装

    2024年04月15日
    浏览(53)
  • 自动化部署及监测平台基本架构

    本文是学习 政务计算机终端核心配置规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 对于有一定规模的政务终端核心配置应用,需要配备自动化部署及监测平台,进行核心配置编辑、验证、部署和监测。自动化部署及监测平台由四个基本功能

    2024年02月11日
    浏览(33)
  • Apache DolphinScheduler 如何实现自动化打包+单机/集群部署?

    Apache DolphinScheduler 是一款开源的分布式任务调度系统,旨在帮助用户实现复杂任务的自动化调度和管理。DolphinScheduler 支持多种任务类型,可以在单机或集群环境下运行。下面将介绍如何实现 DolphinScheduler 的自动化打包和单机/集群部署。 所需环境:maven、jdk 执行以下shell完成

    2024年02月09日
    浏览(25)
  • 安全自动化企业网络架构 (毕设分享)

    前段时间完成了自己的毕设项目——安全自动化企业网络架构。总的来说,该项目是一个对自己的挑战,其中涉及到Kubernetes容器云的搭建以及安全加固,DevOps CI/CD部署容器化监控平台,Django自动化运维平台开发,基于Cisco的安全企业网络架构等技术能。 完成该毕设的直接原因

    2023年04月08日
    浏览(28)
  • 通过自动化单元测试的形式守护系统架构

    目录 0前言 1 背景 2 为什么选择 Archunit 3 Archunit 是什么 4 引入 Archunit 4.1 开始就是如此简单 4.2 如何组织架构规则 4.3 团队如何规范化 通过自动化单元测试的形式守护系统架构是一种有效的方式,可以确保系统在不断演进和修改的过程中保持稳定和可靠。 自动化单元测试是指通

    2024年02月16日
    浏览(32)
  • Kafka单机到集群- 自动化- SSL以及全部配置文件 作者精选

    本文实现kafka集群的配置和启动过程。并将脚本自动化,使得通用性、独立性更强。 用途 参考资料 kafka官方文档:包含安装部署、配置项、api使用等详细信息 附件: Kafka并不难学!:入门、进阶、商业实战 (邓杰) :包含kafka入门和linux快捷操作等系统化认识的内容。 名词 文

    2024年04月13日
    浏览(31)
  • K8S自动化运维容器化(Docker)集群程序

    1.什么是K8S K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container Schedul

    2024年02月10日
    浏览(35)
  • 基于ansible的自动化二进制模式部署高可用Kubernetes集群

    【说明】 本文档详细描述了在openEuler 22.03 LTS上通过ansible以二进制模式自动化部署高可用Kubernetes集群(适用k8s v1.26版本)。 本文档参考了小陈运维的ansible剧本,并进行了适当改造,使之适用于openEuler 22.03 LTS,并改用nginx实现高可用;仅采用containerd作为容器运行时;采用ca

    2024年02月08日
    浏览(79)
  • 虚幻引擎架构自动化及蓝图编辑器高级开发进修班

    课程名称:虚幻引擎架构自动化及蓝图编辑器高级开发进修班 课程介绍 大家好 我们即将推出一套课程 自动化系统开发。 自动化技术在项目开发的前中后期都大量运用。如何您是一家游戏公司,做的是网络游戏,是不是经常会遇到程序员打包加部署需要半天时间,测试demo功

    2024年04月11日
    浏览(35)
  • K8S:K8S自动化运维容器Docker集群

    (1)K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 (2)版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 (3)官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container S

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包