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作爲實現類,負責執行:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章