zoukankan      html  css  js  c++  java
  • 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作为实现类,负责执行:

     

  • 相关阅读:
    linux一键安装filemanager和caddy
    搭建owncloud
    Linux下解压命令大全
    linux虚拟机调整分辨率
    [Javascript] ==与===区别
    [转]ActiveX控件安全初始化之一:实现ISafeObject接口
    C# 温故而知新:Stream篇(—)
    [转]C# 温故而知新:Stream篇(二)
    【转】C# 温故而知新:Stream篇(三)
    [转]在企业应用开发中遵循开源协议
  • 原文地址:https://www.cnblogs.com/starcrm/p/13305624.html
Copyright © 2011-2022 走看看