zoukankan      html  css  js  c++  java
  • Openstack的nova-network的vlan模式扩展

    openstack的nova-network的vlan模式是可以在安装的时候,将网络划分为多个子网,每个项目一个或者多个子网进行虚拟机创建。
    但是他现在代码级别上不支持:如果一开始安装的环境的vlan网段数目太少,后面使用要进行扩展的话容易出现问题。

    场景
    我们的场景是开始只建立一个vlan网段用于fixed_range(172.17.51.0/24,vlanID:51),num_networks=1,现在我们要加一个网络,vlanId 52,除了在物理交换机上要配置该虚拟网络,计算节点要使用trunk口以外,还需要在openstack集群中使用命令:

    nova-manage network create --lable vlan52 --fixed_range_v4 172.17.52.0/24 --vlan 52 --project_id 80c29c88d3c349a78d4ed558e224eac4

    执行完成以后,我们使用命令查看:

    [root@node-8 ~]# nova-manage network list
    id IPv4 IPv6 start address DNS1 DNS2 VlanID project uuid 
    1 172.17.51.0/24 None 172.17.51.3 218.6.200.139 8.8.4.4 51 80c29c88d3c349a78d4ed558e224eac4    e8df9310-ba2c-45a8-9645-6d6d045da71e
    14 172.17.52.0/24 None 172.17.52.3 8.8.4.4 None 53 80c29c88d3c349a78d4ed558e224eac4    eada580e-cf13-42d5-9c4e-b8e5c61de6d

    请注意上面的结论的VlanID的值,虽然我们输入的vlan是52,但是这里的VlanID却是53,为什么?
    当然,为什么我在这里纠结这个vlanID呢,因为在网络节点上创建br网桥,vlan都需要这个vlantag来进行数据的封包,如果他不正确,虚拟实例将无法ping到网关,也无法ssh连接。

    实际测试中我还建立了其他环境,而那个环境一开始就有4个网络,我们如果指定的vlan是51,那么vlanID的最终数据库存储将是54,结论很明显,我新建立一个vlan,将使用已有的vlan的数量+我输入的vlanID,不明白为什么这样弄,不符合我们新创建的vlan的ID的增加顺序。

    源码跟踪:

    if CONF.network_manager == 'nova.network.manager.VlanManager':
    1190 vlan = kwargs.get('vlan', None)
    1191 print kwargs
    1192 if not vlan:
    1193 print num_used_nets
    1194 index_vlan = index + num_used_nets
    1195 print index_vlan
    1196 #vlan = kwargs['vlan_start']
    1197 vlan = kwargs['vlan_start'] + index_vlan
    1198 used_vlans = [x['vlan'] for x in nets]
    1199 print used_vlans
    1200 if vlan in used_vlans:
    1201 # That vlan is used, try to get another one
    1202 used_vlans.sort()
    1203 vlan = used_vlans[-1] + 1



    这是/usr/lib/python/site-package/nova/network/manager.py的内容,而vlanID不正确也正是这段代码导致的.这里我了几个print。执行我们前面的创建虚拟网络的命令,将打印:

    ...
    1
    1


    即index_vlan=1,used_vlans=[51L],
    修改方法:
    将1197行的vlan=kwargs['vlan_start']+index_vlan修改为vlan=kwargs['vlan_start']
    将原来创建的网络关联删除,使用命令:

    nova network-disassociate network-id
    nova-manage network delete network-id

    重新执行网络创建命令,将可以得到正确的vlanID,而且还能在后续的虚拟机创建后,虚拟机能使用该fixed_range到达实例。

    最后,原来这是一个nova官方已发现的bug:

    https://bugs.launchpad.net/nova/+bug/1288609

    修改方法就不一样了。

  • 相关阅读:
    [MST] Test mobx-state-tree Models by Recording Snapshots or Patches
    [MST] Attach Behavior to mobx-state-tree Models Using Actions
    [MST] Describe Your Application Domain Using mobx-state-tree(MST) Models
    [Angular] Configure an Angular App at Compile Time with the Angular CLI
    [Angular] Configure an Angular App at Runtime
    [Test] Easy automated testing in NodeJS with TestCafe
    [React] Optimistic UI update in React using setState()
    [Javascript] Required function arguments in Javascript
    [Transducer] Lazyness in Transduer
    [Transducer] Create a Sequence Helper to Transduce Without Changing Collection Types
  • 原文地址:https://www.cnblogs.com/CLTANG/p/3860455.html
Copyright © 2011-2022 走看看