1. 程式人生 > >Openstack創建雲主機的流程-小小白(linuxzkq)

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

雲計算 openstack

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

今天正好有點時間,整理下Openstack創建雲主機的流程,大神勿噴技術分享

一、流程圖

技術分享

二、虛擬機創建流程如下

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

  2. keystone通過查詢在keystone的數據庫user表中是否存在user的相關信息,包括password加密後的hash值,並返回一個token_id(令牌),和 serviceCatalog(一些服務的endpoint地址,cinder、glance-api後面下載鏡像和創建塊存儲時會用到);

  3. 客戶端帶上keystone返回的token_id和創建虛機的相關參數,通過nova-api地址Post請求nova組件創建虛擬機;

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

  5. keystone驗證通過後返回更新後的認證信息;

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

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

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

  8. nova api 遠程調用傳遞請求、參數給nova scheduler,把消息“請給我創建一臺虛擬機”丟到消息隊列,然後定時查詢虛機的狀態;

  9. nova scheduler從queue中獲取到“請給我創建一臺虛擬機”的這條消息;

  10. nova scheduler訪問nova數據庫,通過調度算法,過濾出一些合適的、空閑的計算節點,然後進行排序;

  11. 更新虛機節點信息,返回一個最優節點id 給nova scheduler;

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

  13. nova compute從MQ中獲取到創建虛擬機請求的消息;

    #nova-compute有個定時任務,定期從數據庫中查找到運行在該節點上的所有虛擬機信息,統計得到空閑CPU個數、空閑內存大小和空閑磁盤大小。然後更新數據庫compute_node信息,以保證調度的準確性。

  14. nova compute通過rpc.call的方式查詢nova數據庫中虛機的信息,例如主機模板和id;

  15. nova conductor從消息隊列中拿到請求查詢數據庫中該(虛擬機信息)的消息;

  16. nova conductor查詢nova數據庫;

  17. nova 數據庫返回被查詢的虛擬機信息給nova conductor;

  18. nova conductor把查詢到的虛擬機信息丟到MQ中,然後nova compute從消息隊列中獲取該虛擬機的信息;

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

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

  21. token驗證有效,glance api 返回鏡像信息給nova-compute;

  22. 同理,nova compute請求neutron api配置網絡(Quantum(Neutron的前身)),例如獲取虛機的ip地址、掩碼,網關等信息;

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

  24. token驗證有效,neutron api 返回網 絡信息給nova-compute;

  25. 25-27步驟. 同glance、neutron 驗證token, 返回塊設備信息,即雲硬盤給nova-compute;

  26. 28步驟. 根據上面配置的虛擬機信息,生成xml,寫入libvirt.xml文件,然後調用libvirt driver 去使用libvirt.xml 文件啟動虛擬機。

技術分享

三、總結

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

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

本文出自 “雲計算與大數據” 博客,請務必保留此出處http://linuxzkq.blog.51cto.com/9379412/1964144

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