文章目录
为什么会有ML2
在很久以前ML2没有出现的时候,neutron环境是这样的。
neutron server中包含各种plugin,plugin对应的是各种虚拟网络功能中的各种agent,plugin与agent联系紧密,neutron可以通过开发不同的plugin和agent来支持不同的网络技术,这种模式有两个缺点:
- 一套plugin和agent只能支持一种网络技术,太过死板
- 每一种网络技术都需要对其开发一套plugin和agent,太过繁琐
那么能不能开发这样一个plugin,它可以同时支持所有的网络技术,也可以支持所有的agent呢,开发人员不禁产生这样的疑问,然后ML2出现了。
ML2怎么做到这一切
ML2对数据链路层进行了抽象建模,提出了类型驱动(type driver)和机制驱动(mechanism driver),这两种驱动解耦了neutron所支持的网络类型和这些类型的访问机制,使得ML2具有非常前的弹性,易于扩展,并且能够灵活支持多种type和mechanism。
在这里我们提到了type driver和mechanism driver的概念,下面来解释一下这两个概念。
- type driver
neutron支持的每一种网络类型都有一个对应的ML2 type driver。type driver的任务主要包括维护网络类型的状态、进行验证、创建网络等。 - mechanism driver
与type driver类似,neutron支持的每一种网络机制都有一个对应的ML2 mechanism driver。mechanism driver主要负责获取由type driver维护的网络状态,并确保在相应的网络设备上正确实现这些状态
如果我们举一个具体的例子:
type driver对应的网络类型为vlan,mechanism driver对应的网络机制为open vswitch,现在要创建一个vlan10。
vlan type driver会确保将vlan10的信息保存到neutron的数据库中,数据库中存储包括network名称、vlan ID等信息;open vswitch mechanism driver会确保个节点上的openvswitch agent在物理网卡上创建ID为10的vlan设备和网桥设备,再将两者进行桥接。