天天看點

Openstack建立雲主機的流程-小小白(linuxzkq)

  部落客自從之前換了工作到現在,因為工作太忙的原因,已經好久沒有更新部落格了,深表歉意,還望大家了解。。。。。。

Openstack建立雲主機的流程-小小白(linuxzkq)

一、流程圖

<a href="https://s1.51cto.com/wyfs02/M00/A4/F2/wKioL1m1BnuxRdnMAAQJpX3HlKU625.png-wh_500x0-wm_3-wmp_4-s_4269522419.png" target="_blank"></a>

二、虛拟機建立流程如下

客戶(使用者)端通過指令行CLI或Dashboard Horizon使用自己的使用者名密碼請求認證元件keystone進行使用者的驗證;

keystone通過查詢在keystone的資料庫user表中是否存在user的相關資訊,包括password加密後的hash值,并傳回一個token_id(令牌),和 serviceCatalog(一些服務的endpoint位址,cinder、glance-api後面下載下傳鏡像和建立塊存儲時會用到);

用戶端帶上keystone傳回的token_id和建立虛機的相關參數,通過nova-api位址Post請求nova元件建立虛拟機;

nova-api接收到請求後,首先使用請求攜帶的token_id去通路keystone,驗證令牌是否有效;

keystone驗證通過後傳回更新後的認證資訊;

nova api通過查詢Nova DB庫,比對檢查建立虛拟機的參數是否有效與合法;

檢查虛拟機name是否符合命名規範,flavor_id是否在資料庫中存在,image_uuid是否是正确的uuid格式,檢查instance、vcpu、ram的數量是否超過配額。

當且僅當所有傳參都有效合法時,更新nova資料庫,建立一條instance記錄,vm_states設為BUILDING,task_state設為SCHEDULING;

nova api 遠端調用傳遞請求、參數給nova scheduler,把消息“請給我建立一台虛拟機”丢到消息隊列,然後定時查詢虛機的狀态;

nova scheduler從queue中擷取到“請給我建立一台虛拟機”的這條消息;

nova scheduler通路nova資料庫,通過排程算法,過濾出一些合适的、空閑的計算節點,然後進行排序;

更新虛機節點資訊,傳回一個最優節點id 給nova scheduler;

nova scheduler標明host(最優節點id)之後,通過rpc.call的方式調用nova-compute服務,把“建立虛機請求”消息再次丢到消息隊列(mq);

nova compute從MQ中擷取到建立虛拟機請求的消息;

#nova-compute有個定時任務,定期從資料庫中查找到運作在該節點上的所有虛拟機資訊,統計得到空閑CPU個數、空閑記憶體大小和空閑磁盤大小。然後更新資料庫compute_node資訊,以保證排程的準确性。

nova compute通過rpc.call的方式查詢nova資料庫中虛機的資訊,例如主機模闆和id;

nova conductor從消息隊列中拿到請求查詢資料庫中該(虛拟機資訊)的消息;

nova conductor查詢nova資料庫;

nova 資料庫傳回被查詢的虛拟機資訊給nova conductor;

nova conductor把查詢到的虛拟機資訊丢到MQ中,然後nova compute從消息隊列中擷取該虛拟機的資訊;

nova compute 請求glance 的restful api,下載下傳所需要的鏡像,一般是qcow2格式的; http://www.cnblogs.com/zhoumingang/p/5522463.html

glance api 也會去keystone 驗證請求的token是否有效;

token驗證有效,glance api 傳回鏡像資訊給nova-compute;

同理,nova compute請求neutron api配置網絡(Quantum(Neutron的前身)),例如擷取虛機的ip位址、掩碼,網關等資訊;

neutron api去keystone 驗證請求的token是否有效;

token驗證有效,neutron api 傳回網 絡資訊給nova-compute;

25-27步驟. 同glance、neutron 驗證token, 傳回塊裝置資訊,即雲硬碟給nova-compute;

28步驟. 根據上面配置的虛拟機資訊,生成xml,寫入libvirt.xml檔案,然後調用libvirt driver 去使用libvirt.xml 檔案啟動虛拟機。

<a href="https://s5.51cto.com/wyfs02/M01/A4/F2/wKioL1m1CIXSbjjFAAAktsbrJGA311.png-wh_500x0-wm_3-wmp_4-s_510480044.png" target="_blank"></a>

三、總結

1、Openstack這種分布式的架構,各個子產品之間松耦合,可以很容易的新增子產品,而且配置靈活,服務可以安裝在不同節點,即使部分服務挂了也不會影響。

2、虛拟機建立簡單來說分三步,nova api接受建立虛機請求,nova scheduler為建立虛機指定主控端,nova compute啟動虛拟機。如果能夠了解上面的所有步驟,那麼對于定位問題可以精準,甚至有些問題可以自己解決,譬如虛機error了,如果你看到虛機的資訊已經有host資訊了,那基本能從novacompute的日志中看到問題所在,如果沒有,基本是scheduler會有錯誤資訊提示。

本文轉自 linuxzkq 51CTO部落格,原文連結:http://blog.51cto.com/linuxzkq/1964144