透过现象看本质——谈谈ML2 plugin这回事儿

透过现象看本质——谈谈ML2 plugin这回事儿

本文关键词:OpenStack、Neutron Plugin、Neutron Agent、Core Plugin、ML2插件、ML2架构、Driver、紧耦、解耦。

前言

? 在OpenStack中,其控制管理着计算、存储、网络三大资源。要想明白OpenStack是如果对计算、存储和网络资源进行管理的,就需要清楚OpenStack的架构,模块组成和各自分工的任务等等。

? 而网络是作为OpenStack中最为核心之一的、也是相对于其他最为复杂的一块,因此需要细品~

? 今天就来透过现象看本质,谈一谈ML2插件这回事儿~

Neutron Plugin是个什么鬼?

? Plugin——插件,根据百度搜索的结果,其介绍为:一种遵循一定规范的应用程序接口编写出来的程序。那么什么是Neutron插件呢?不用想太多,其实就是有关网络的插件,可以使Neutron提供完整的服务。

? 我们知道,在OpenStack中,总的来说插件的作用可以理解为:

  • 处理Neutron Server发来的请求;
  • 维护OpenStack中网络的状态;
  • 调用agent处理请求;

? 由此也可以明白,在OpenStack Neutron项目中,插件和代理服务是相对应的,而且plugin解决的是在数据库中存放网络信息,需要解决的是网络请求时需要什么配置的问题,而agent解决的是如何具体配置网络的问题,而agent处理时需要通过Neutron provider(网络提供者)提供虚拟或物理网络(Linux Bridge或OVS或其他的物理交换机),也可以说这三者需要配套使用。

? 细的来说,Neutron Plugin 有两种,一种是Core Plugin——核心插件,主要是在数据库中维护network、subnet和port的状态,并负责调用相应的agent在network provider上执行相关操作,比如创建network;另一种是Service Plugin——服务插件,主要是在数据库中维护router、load balance、security group等资源的状态,并负责调用相应的agent在network provider上执行相关操作,比如创建router。

? 那么,plugin的其中一个职责就是维护Neutron网络的状态信息的,那么这就产生了一个问题:

? 对于不同的Neutron Provider的plugin,就需要对每种plugin写一个十分类似的代码用来访问数据库,这样代码又多又冗杂。于是就有了ML2插件,来解决这个问题,当然,也不仅仅是因为这个原因。下面就来聊聊ML2插件吧。

ML2 Core Plugin又是个什么鬼?

? ML2——Moduler Layer 2,是Neutron在H版本实现的一个新的核心插件,用来替代原来的linux bridge plugin 和open vswitch plugin。说白了,就是新的技术来了,用ML2这个核心插件换了原来的插件,一统江山了。

? 这就又会有两个问题:

  • 为什么要更换核心插件?
  • ML2核心插件怎么用?

我们如果深究这两个问题,不难发现,这两个问题的精髓——一个涉及作用优势,另一个涉及架构原理。

? 我们一步一步来推究这两个问题。

1、传统Core Plugin在使用过程中出现的主要问题

? 第一个问题在前面已经提出了,主要是开发成本和效率的问题,这个问题其实从本质上来说就是稍加复杂罢了,倒不至于是最为核心的问题,最麻烦的是不易维护。而最为核心的是这第二个问题:对于不同的Neutron Provider来说,传统的核心插件是不支持它们共存使用的。

? 怎么来理解这第二个问题呢?

? 通过之前的了解,我们知道传统的核心插件与其代理是一一对应的,这就意味着假设选择是Linux Bridge Plugin,那么就必须使用Linux Bridge Agent,并且在OpenStack的所有节点上都必须使用Linux Bridge作为虚拟交换机作为网络提供者,OVS同样如此。

? 我们要知道,在生产环境中,服务器的数量和对应的角色,甚至是所处的位置都可能不一样。如果每一个节点服务器上的都必须统一为同一个网络提供者,这势必会导致一系列的问题,最容易想到的就是技术更新带来的工程量的问题。

2、ML2 Core Plugin 是怎么解决传统Core Plugin的问题的?

? ML2 Core Plugin提供了一个允许在OpenStack网络中同时使用多种Layer 2 网络技术的框架,这样可以使不同的节点可以使用不同的网络实现机制。如下图所示:

? 通过上图所示,在采用ML2核心插件之后,可以在不同的节点服务器上分别部署不同的Agent。并且,ML2不仅支持这样的部署方式,而且可以实现与Agent的无缝集成,也就是说,之前所使用的agent不需要更改,只需要将原来的Neutron Server上的传统的核心插件换为ML2插件即可。

? 这说明了两个方面:

  • 其他节点上的Agent可以是不一样的,并且无需更改;
  • 只需要针对ML2实现机制的原理进行研究和开发对应的功能即可(下面了解ML2的架构时再细说);

3、瞅一瞅ML2的架构

? 如果需要了解ML2或者深入理解ML2的工作原理,就先要引入驱动的概念。在计算机中,驱动指的是驱动计算机里软件的程序。而在ML2中,驱动其实就是为了使ML2具备更好的弹性,易于扩展,方便而灵活地支持和访问多种网络类型及其机制的程序。

? ML2对二层网络进行的抽象和建模,引入了type driver和mechansim driver,分别对应类型驱动和机制驱动。在讲述这两个驱动之前,先来瞅一眼ML2创建的架构图:

通过这幅图,可以体现出在架构设计乃至程序设计时的解耦思想,这里补充说明一下什么是紧耦和解耦:

这两者的思想恰好相反,紧耦表示二者或二者以上之间的关联、联系非常紧密,谁离开谁,单方面都无法正常工作或提供服务;解耦的意思就是多方之间虽然互相之间有一定联系,但是并非缺少谁就不能工作,例如现在非常火的容器开发,就是基于这样的思想。这样的思想在软件开发层面比较多,在运维方面则体现在架构的设计层面。

有了直观的架构格局,再来说明一下这两类驱动:

(1)Type Driver

? type driver——类型驱动,显然从上图就可以明白,Neutron支持的每一种网络类型都有与之对应的ML2的类型驱动。

? 类型驱动主要负责维护网络类型的状态,执行验证创建网络等。这些网络类型可以参考上一篇文章。

(2)Mechansim Driver

? Mechansim Driver——机制驱动,Neutron支持的每一种网络机制都有一个对应的ML2 机制驱动。(有的可能没听说过,本文暂且忽略)

? 机制驱动主要负责获取由Type Driver维护的网络状态,并确保在相应的网络设备(物理或虚拟)上正确实现这些状态。

4、理一理ML2驱动工作的过程

? 可能,如此直白的解释不仅抽象而且无聊,还是通过一个例子来简述一下吧,也好方便理解一下ML2插件的工作过程。

? 假设type driver为Vlan,mechansim driver为Linux Bridge,我们需要创建一个vlan 10的网络。这个创建的过程是这样的:

  1. vlan type driver会确保将vlan10的信息保存到Neutron数据库中,包括network的名称,vlan ID等;
  2. 对应的linux bridge 的mechanism driver会确保各节点上的linux brige agent在物理网卡上创建ID为10的vlan设备和bridge设备,并将两者进行桥接;

补充说明:

  1. Linux Bridge Driver支持的type包括local、flat、vlan、and vxlan;
  2. Open Vswitch Driver除了这4种type还支持gre;
  3. L2 population driver作用是优化和限制overlay网络中的广播流量;
  4. vxlan和gre都属于overlay网络;

结尾来一个小总结

? 本文将述了有关ML2核心插件的相关内容,通过问题的引出深入浅出理解neutron目前使用最为广泛的ML2核心插件。ML2插件是核心插件,替换了传统的插件,通过引入两个驱动,解决了传统核心插件带来的问题。这也体现出在架构设计中所需要考虑的问题,尤其是可扩展性方面。此外,通过本文可以了解有关驱动的作用以及理解紧耦和解耦的思想。

原文地址:https://blog.51cto.com/14557673/2478779

时间: 2024-11-09 00:55:22

透过现象看本质——谈谈ML2 plugin这回事儿的相关文章

透过现象看本质 大数据核心并不在规模大

透过现象看本质 大数据核心并不在规模大谆籽做谞谞诅资祝仔渍庄昨赚缀阻透过现象看本质 大数据核心并不在规模大 http://www.songtaste.com/user/10226369/info http://www.songtaste.com/user/10226373/info http://www.songtaste.com/user/10226374/info http://www.songtaste.com/user/10226382/info http://www.songtaste

透过现象看本质——回头再看Nginx(进程模型、异步非阻塞、源码目录结构)

透过现象看本质--回头再看Nginx Nginx的进程模型 ? 使用过nginx的朋友都知道nginx的性能很高,而其原因可能少有人知.首先,nginx的架构就奠定了其高性能的基础.那么就先来看看nginx的基础架构吧,如下图所示:(不能完全理清楚所有内容也没关系,因为本小节讲述的主要内容是Nginx的进程模型) ? 本小节先来说说Nginx基础架构中的进程模型: ? 所谓进程模型,即Nginx响应请求或服务时程序运行(机器执行指令集)的方式,一般在nginx服务启动后,在Unix系统中会以da

透过现象看本质——Nginx模块

透过现象看本质--Nginx模块 前言 ? 上篇文章主要讲述了有关Nginx的主配置文件,为什么需要非常关注Nginx的主配置文件呢?这是因为它是我们与nginx的核心,这里的核心不是说nginx的内核部分,而是人机交互的核心,除非基于nginx做二次开发,例如开发第三方模块,一般我们只需要使用nginx实现我们的业务需求.无论是web网站.负载均衡还是反向代理,都需要对其主配置文件熟悉,这样才能玩好其优化. ? 本文就接着来讲述有关nginx模块的相关内容. Nginx核心工作者--模块 ?

透过现象看本质,工业4.0将如何落地

从最终目的上来说,工业4.0与人类历史上的前三次工业革命(或者说工业1.0.2.0和3.0)一脉相承,有一个共同的主题--提高生产效率.而工业4.0与前三者的不同之处,则可用两个词来概括:"互联"与"融合". 在工业4.0所描绘的未来情景中,人.设备和产品将通过互联技术实现融合,在企业内部实现人与人.人与机.机与产品的无缝对接,在组织层面实现企业与企业.企业与消费者的对接.以物理信息系统(CPS)为基础,实现信息技术与制造技术深度融合,使产品设计过程.制造过程.服务

权力社会? 金钱社会? 透过现象看本质-让权力和金钱的力量沿着制度的河道流淌,才是社会稳定的基石

为什么在中国乃至亚洲大部分国家都是 权力社会? 为什么在中国有权就有钱,有钱无权的都要寻求权力保护伞? 为什么在西方欧洲国家大部分是 金钱社会? 仔细感悟觉得 这跟国家历史有很大的关系. 在中国 经历了5000年的封建社会王权统治, 封建社会的核心就是 权力社会, 金钱依附于权力. 而西方国家 经历的最长的反而是 资本主义社会, 资本主义社会的核心是 金钱社会, 权力围绕金钱运转. 从1911年中国推翻最后一个封建王朝-清朝, 到现在不过短短100多年的时间,虽然号称是社会主义社会, 但是由于没

【管理心得之八】通过现象看本质,小王和小张谁更胜任?

一.场景再现======================会议主持者  :接下来,我们讨论一下产品经理一职人选问题.              现有两个候选人(小王.小张),简历.工作表现在你们手中,谈谈各自看法.于经理      :小王不错.以前是我部下,任劳任怨,加班加点更是家常便饭.肯专研.有韧劲.关经理       :是呀,每次项目组最后一个走的都是小王.对工作的认真劲.负责任样令人钦佩.刘经理       :小张平时正点上班.下班,但总能规定时间内保质保量地完成任务.         

通过现象看本质——Nginx配置文件详解

通过现象看本质--Nginx配置文件详解 前言 ? 前面的文章讲述了有关Nginx进程模型以及基于异步非阻塞机制使得Nginx支持高并发的一些内容.本文将详述有关Nginx的配置文件(主配置文件nginx.conf文件)以及Nginx的体系结构. Nginx配置文件概述 ? 在我们解压后的Nginx目录中的conf目录下就是有关Nginx的配置文件,当然一般我们玩儿的主要是Nginx的配置文件多一点,而其他的配置文件均是纯文本文件.那么本小节就其中的主要配置作解释与介绍. ? 当然,在介绍之前,

通过现象看本质

有时候无所适从的时候,先不管具体实现过程,通过现象,看到什么,然后才分析具体实现过程.

为了可持续的测试自动化,透过表面看本质(译)

当提到可接受的测试自动化,最重要的一步是在适当的位置有一个适当的测试自动化团队框架.这篇文章对一些不同的自动化测试适用场景有一些已证明的项目——由一个自动化或者回归团队主导,以敏捷的适应性——帮助组织享受长期的测试自动化的成功. 公司发起一项新的测试自动化倡议——任何销售人员设计销售相关的工具——倾向认为他们的成功取决于完美的上线.作为一个测试自动化顾问,我喜欢提供一个真实的基于我在领域里所见的检查.如果你没有准备好,最初的上线可能是坎坷崎岖的路,但是在长期中,那不是要制造而是破坏你的测试自动化