1. 程式人生 > 實用技巧 >VMM外掛和OpenStack nova整合(華三CAS外掛處理虛擬化流程及原始碼分析)

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