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