当前位置: 首页 > news >正文

详解 ML2 Core Plugin(I) - 每天5分钟玩转 OpenStack(71)

我们在 Neutron Server 小节学习到 Core Plugin,其功能是维护数据库中 network, subnet 和 port 的状态,并负责调用相应的 agent 在 network provider 上执行相关操作,比如创建 network。
上一节也介绍了两个 Core Plugin:linux bridge plugin 和 open vswitch plugin。
本节将详细讨论更重要的 ML2 Core Plugin。


Moduler Layer 2(ML2)是 Neutron 在 Havana 版本实现的一个新的 core plugin,用于替代原有的 linux bridge plugin 和 open vswitch plugin。

传统 core plugin 的问题

之所以要开发 ML2,主要是因为传统 core plugin 存在两个突出的问题。

问题1:无法同时使用多种 network provider

Core plugin 负责管理和维护 Neutron 的 network, subnet 和 port 的状态信息,这些信息是全局的,只需要也只能由一个 core plugin 管理。

只使用一个 core plugin 本身没有问题。但问题在于传统的 core plugin 与 core plugin agent 是一一对应的。也就是说,如果选择了 linux bridge plugin,那么 linux bridge agent 将是唯一选择,就必须在 OpenStack 的所有节点上使用 linux bridge 作为虚拟交换机(即 network provider)。

同样的,如果选择 open vswitch plugin, 所有节点上只能使用 open vswitch,而不能使用其他的 network provider。

问题2:开发新的 core plugin 工作量大

所有传统的 core plugin 都需要编写大量重复和类似的数据库访问的代码,大大增加了 plugin 开发和维护的工作量。

ML2 能解决传统 core plugin 的问题

ML2 作为新一代的 core plugin,提供了一个框架,允许在 OpenStack 网络中同时使用多种 Layer 2 网络技术,不同的节点可以使用不同的网络实现机制。

如上图所示,采用 ML2 plugin 后,可以在不同节点上分别部署 linux bridge agent, open vswitch agent, hyper-v agent 以及其他第三方 agent。

ML2 不但支持异构部署方案,同时能够与现有的 agent 无缝集成:以前用的 agent 不需要变,只需要将 Neutron server 上的传统 core plugin 替换为 ML2。

有了 ML2,要支持新的 network provider 就变得简单多了:无需从头开发 core plugin,只需要开发相应的 mechanism driver,大大减少了要编写和维护的代码。

现在我们已经了解了 ML2 的必要性,下一节将学习 ML2 的架构。

相关文章:

  • IOS 压力测试-UI AutoMonkey
  • 将 Measurements 和 Units 应用到物理学
  • LeetCode 92 Reverse Linked List II(翻转链表II)(Linked List)(*)
  • 代理设计模式
  • 3.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:...
  • Linux 第九天: (08月11日) 练习和作业
  • 原生js库,持续更新中……
  • MongoDB工具简要说明
  • apk签名
  • Java中创建对象的5种方式
  • OC多态
  • C标准I/O库函数与Unbuffered I/O函数
  • error: insufficient permissions for device: verify udev rules
  • python爬虫中文网页cmd打印出错问题解决
  • Lambda 表达式(C# 编程指南) 微软microsoft官方说明
  • 30天自制操作系统-2
  • bootstrap创建登录注册页面
  • JavaScript 基本功--面试宝典
  • java正则表式的使用
  • JS 面试题总结
  • Js基础知识(四) - js运行原理与机制
  • node和express搭建代理服务器(源码)
  • Redis 懒删除(lazy free)简史
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 服务器从安装到部署全过程(二)
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 如何使用 JavaScript 解析 URL
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 在Unity中实现一个简单的消息管理器
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​Python 3 新特性:类型注解
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​业务双活的数据切换思路设计(下)
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define、const、typedef的差别
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (五)网络优化与超参数选择--九五小庞
  • (转)shell调试方法
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .java 9 找不到符号_java找不到符号
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .Net Core与存储过程(一)
  • .NET DataGridView数据绑定说明
  • .NetCore 如何动态路由
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET处理HTTP请求
  • .net的socket示例
  • .NET构架之我见
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @Import注解详解
  • @Responsebody与@RequestBody
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网