插件組成
華三目前依託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作爲實現類,負責執行: