北京SEO

nova vCenter Driver创建虚机与网络不一致解决办法

2019/10/10/17:45:20  阅读:1567  来源:谷歌SEO算法  标签: 人工智能卓医

Vcenter一般指 VMware vCenter™ ServerVMware vCenterServer 提供了一个可伸缩、可扩展的平台,为 虚拟化管理奠定了基础,下文我们就来一起看看小编碰到的nova vCenter Driver创建虚机与网络不一致问题解决办法.

上周将VMware mech driver实现完成后,发现一个问题,测试时发现,neutron创建的网络,与nova创建的虚拟机被创建在不同的ESXi主机上,当然cluster中只有一个ESXi主机时,不会存在这个问题.

切换到nova-network下,发现也存在这个问题,launchpad上有人报了这个bug:跟了下/nova/virt/vmwareapi的代码,错误大概是这样子的.nova在创建虚拟机时,通过_get_vif_infos()获取vif_infos.

在_get_vif_infos方法中,调用vif.py的get_network_ref方法获取network_ref,如果使用不用neutron nsx,调用ensure_vlan_bridge,ensure_vlan_bridge在cluster中查找是否存在要创建的网络(在ESXi主机上为端口组),这个查找是在cluster中指定的1台ESXi主机上查找,比如ESXi A,如果不存在就去创建网络.

创建成功后继续调用network_util.get_network_with_the_name进行查询,此时应该可以查询到新建的网络,但是这个地方有bug,新建的网络还是查询不到,因此network_ref返回为空.

所以创建虚拟机时,虚拟机不会加入新建的网络(端口组).

  1. defensure_vlan_bridge(session,vif,cluster=None,create_vlan=True):
  2. """Createavlanandbridgeunlesstheyalreadyexist."""
  3. vlan_num=vif['network'].get_meta('vlan')
  4. bridge=vif['network']['bridge']
  5. vlan_interface=CONF.vmware.vlan_interface
  6. network_ref=network_util.get_network_with_the_name(session,bridge,
  7. cluster)
  8. ifnetwork_refandnetwork_ref['type']=='DistributedVirtualPortgroup':
  9. returnnetwork_ref
  10. ifnotnetwork_ref:
  11. #CreateaportgrouponthevSwitchassociatedwiththe
  12. #vlan_interfacecorrespondingphysicalnetworkadapterontheESX
  13. #host.
  14. vswitch_associated=_get_associated_vswitch_for_interface(session,
  15. vlan_interface,cluster)
  16. network_util.create_port_group(session,bridge,
  17. vswitch_associated,
  18. vlan_numifcreate_vlanelse0,
  19. cluster)
  20. #bug就出在这里,上一步创建的portgroup,这里没有获取到。
  21. network_ref=network_util.get_network_with_the_name(session,
  22. bridge,
  23. cluster)
  24. elifcreate_vlan:
  25. #GetthevSwitchassociatedwiththePhysicalAdapter
  26. vswitch_associated=_get_associated_vswitch_for_interface(session,
  27. vlan_interface,cluster)
  28. #Getthevlanidandvswitchcorrespondingtotheportgroup
  29. _get_pg_info=network_util.get_vlanid_and_vswitch_for_portgroup
  30. pg_vlanid,pg_vswitch=_get_pg_info(session,bridge,cluster)
  31. #Checkifthevswitchassociatedisproper
  32. ifpg_vswitch!=vswitch_associated:
  33. raiseexception.InvalidVLANPortGroup(
  34. bridge=bridge,expected=vswitch_associated,
  35. actual=pg_vswitch)
  36. #Checkifthevlanidisproperfortheportgroup
  37. //phpfensi.com
  38. ifpg_vlanid!=vlan_num:
  39. raiseexception.InvalidVLANTag(bridge=bridge,tag=vlan_num,
  40. pgroup=pg_vlanid)
  41. returnnetwork_ref

至于这个新建的网络查询为什么会失败,我还没想明白.

之后我就想,既然ESXi的标准交换机不支持分布式端口组,那么可以在cluster中的每一台标准交换机上创建端口组(即网络),这样就不存在之前的调度失败的问题.

尝试着修改了vm_util.py中get_host_ref的代码,将cluster中的所有ESXi主机都返回,由于有一些函数调用到get_host_ref,所以如果此时不修改之前的代码逻辑,调用suds client去调用vSphere API获取vSphere中某些对象属性的时候,肯定会报错.

这个时候,由于自己的粗心,没有仔细分析日志,认为在一个session中不能获取vSphere的多个对象,认为在每一个ESXi主机上创建端口组的方法不可行.

突然又想不能这么轻易放弃,如果不去这样实现,那么就没有更好的办法了,静下心来好好看了日志,发现之前的报错,还没有走到create_port_group这一步,于是从报错的地方开始,把代码逻辑逐个修改了.

最后创建网络,创建虚机,发现一切OK.

广告内容

nova vCenter Driver创建虚机与网络不一致解决办法 nova vCenter Driver创建虚机与网络不一致解决办法 nova vCenter Driver创建虚机与网络不一致解决办法

相关阅读

热门评论

小明SEO博客 小明SEO博客

小明SEO博客,新时代SEO博客

总篇数171

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法