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
关键术语
l Instance :虚拟机实例
l Instance Status :虚拟机状态
- power_status: Running、Shutdown、NoState;
- vm_state: Active、Suspended
l Flavor : 在新建 Instance 之前,需要为 Instance 请求一组资源(Disk/Memory/VCPU/RootDisk/EphemeralDisk/Swap),nova还要计算物理机能否给出足够的资源。这组资源的设置就是 flavor,即创建虚拟机的规格。每个 Instance 对象的 instance_type_id 字段就表示该 Instance 所拥有的 flavor
l 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作为实现类,负责执行:
目前维护的开源产品:https://gitee.com/475660