VMM插件和OpenStack nova集成(华三CAS插件处理虚拟化流程及源码分析)

插件组成

华三目前依托OpenStack有以下几个插件:

l  {openstack}_cas_nova-{version}.tar.gz  --虚拟化

l  {openstack}_cas_cinder-{version}.tar.gz  --为用户提供统一的卷相关操作的存储接口

l  {openstack}_cas_neutron-{version}.tar.gz  -- 网络相关

l  {openstack}_cas_ceilometer-{version}.tar.gz -- 收集其他组件的事件日志、监控

l  {openstack}_cas_patch-{version}.tar.gz

关键术语

Instance :虚拟机实例

Instance Status :虚拟机状态

  •   power_status:  Running、Shutdown、NoState;
  •   vm_state:  Active、Suspended

Flavor : 在新建 Instance 之前,需要为 Instance 请求一组资源(Disk/Memory/VCPU/RootDisk/EphemeralDisk/Swap),nova还要计算物理机能否给出足够的资源。这组资源的设置就是 flavor,即创建虚拟机的规格。每个 Instance 对象的 instance_type_id 字段就表示该 Instance 所拥有的 flavor

Virt Driver :Nova 仅仅是作为云计算虚拟机的管理工具,其本身并不提供任何的虚拟化技术,而是交由具体的 Hypervisor 来实现虚拟机的创建和管理。因此,nova-compute 需要和不同的 Hpyervisor 进行交互,并使用 Virt Driver 来作为这种交互的支撑,Nova 实现了 Hyper-V/Libvirt/VMware/Xen 这四种 Virt Dirver 。

流程图

 

代码分析

整体工程结构

 

工程配置文件分析

文件:config.py

作用:通过获取openstack的配置文件,向程序注入静态Key-Value配置信息

 

有4个主要方法:

行号

方法名

35

NovaSceneData

69

CeilometerSceneData

84

CinderSceneData

104

NeutronSceneData

 

代码分析,以NovaSceneData 为例,Openstack nova配置文件为/etc/nova/nova.conf

class NovaSceneData(BaseSceneData):

    conf_file = '/etc/nova/nova.conf'

    user_conf_file = 'nova.conf.ini'

    original_conf_file = '/etc/nova/nova.conf.original'

    backup_conf_file = '/etc/nova/nova.conf.last'

    key_opts = [

        {'option':'compute_driver','section':'DEFAULT','default':'casapi.CasDriver','required':'true'},

        {'option':'host_ip','section':'cas','default':'','required':'true'},

        {'option':'host_username','section':'cas','default':'','required':'true'},

        {'option':'host_password','section':'cas','default':'','required':'true'},

        {'option':'hpName','section':'cas','default':'','required':'true'},

        {'option':'clusterName','section':'cas','default':'','required':'false'},

        {'option':'host_transparent','section':'cas','default':'False','required':'false'},

        {'option':'neutron_plugin','section':'cas','default':'openvswitch','required':'true'},

        {'option':'glance_host','section':'cas','default':'','required':'true'},

        {'option':'pci_passthrough_whitelist','section':'DEFAULT','default':'','required':'false'}]

openstack_cas_nova 工程分析

结构:

 

Client.py 分析

客户端认证

Client.py定义了agent的HTTPDigestAuth认证信息,agent host和openstack使用http、https通讯,即openstack发命令(如创建虚拟机、关机等),通过agent来调用cas执行。

认证需要username、password

 

http请求和响应

content-type是xml格式

 

driver.py分析

包模块引用

 

配置

 

类分析

分为2个类

 

CasDriver类分析

CasDriver用于沟通物理主机,虚拟机生命周期管理。

 

 

实例分析: 创建虚拟机

我们以创建虚拟机核心方法spawn为例

定义:

    def spawn(self, context, instance, image_meta, injected_files,

              admin_password, network_info=None, block_device_info=None):

实际创建虚拟机的工作是交给vmops类,CasDriver传递给vmops类spawn方法的参数:

  • l  虚拟机instance对象实例
  • l  image_meta 镜像元数据
  • l  admin_password 管理员密码
  • l  network_info 网络信息
  • l  block_devices 块存储信息
  • l  False 标识是否重新创建

vmops类spawn方法流程

 

代码细节逻辑(从448行开始):

 

Spawn方法需要调用的关键方法:

  • l  配置vm:_config_vm
  • l  加入块存储:_attach_block_devices
  • l  部署vm:_deploy
  • l  获取部署vm参数:_get_deploy_parameter
  • l  获取物理CPU信息:_get_cpu_info

其中部署的关键代码:

发送xml为格式存储的命令到cas,通过消息号msgId来将agent和cas Task进程异构沟通协作,OpenStack和CAS通过nova的MQ消息队列进行协同,wait_for_task是一个同步方法,agent必须一直等待Task完成后返回。

 

实例分析:关闭虚拟机

和上例同样逻辑,使用driver.py 作为入口,power_off为公共方法

    def power_off(self, instance, timeout=0, retry_interval=0):

        self._vmops.power_off(instance)

vmops.py 的vmopt作为实现类,负责执行:

 

posted @ 2020-07-15 15:12  昕友软件开发  阅读(596)  评论(0编辑  收藏  举报
欢迎访问我的开源项目:xyIM企业即时通讯