1. 程式人生 > >openstack中創建一個虛擬機經過的51步

openstack中創建一個虛擬機經過的51步

瓶頸 補充 物理機 可用 理解 png war process 虛擬

一、前言

本文在林海峰老師“openstack創建一個VM所需的29步”基礎上進行了補充和修改,文中只用到了openstack六個核心組件,為了便於理解,架構中不同組件內的rabbit mq和db為同一個(可以為每個組件配置單獨的db和rabbit mq)。openstack組件之間通過REST調用,組件內通過RPC協議通信,RPC協議又是基於AMQP模型實現的,rabbit mq就是運用該模型的一款軟件。

二、概述

以現實中的PC舉例來說明openstack創建的VM,一個PC要能正常工作它需要具備:計算單元、系統、網絡和存儲單元這四個基本要素,對應openstack中實現該功能的組件分別為:nova、glance、neutron和cinder,以下就詳細說明一個VM創建時所經過的具體步驟。

三、創建VM的過程詳解

技術分享圖片
上圖是openstack上發起一個創建VM請求到VM創建完成的全過程,以下對上述51步進行詳細解釋:

  1. 用戶通過horizon或者cli發起一個創建VM請求時,首先去keystone進行認證;
  2. 認證通過後,keystone將結果返回給用戶,其中就包含用戶權限的token令牌;
  3. 用戶通過token像nova-api發起創建虛擬機的而請求;
  4. nova-api首先去keystone驗證用戶的token是否有效;
  5. keystone將認證後的結果返回給nova-api;
  6. nova-api將用戶要創建VM的信息,如CPU、內存、網絡及硬盤等存入數據庫;
  7. 存儲完成後,數據庫將結果返回給nova-api;
  8. nova-api將要創建VM的信息扔到消息隊列;
  9. nova-scheduler從消息隊列中接收到該信息;
  10. nova-shceduler從數據庫中查詢可承載VM的物理服務器;
  11. 數據庫將可用的物理服務器反饋給nova-scheduler,它根據權重最終選出1臺物理機承載VM;
  12. nova-scheduler將最終承載VM的物理機信息扔到消息隊列;
  13. 被選中物理服務器上的nova-compute接收到該消息;
  14. nova-compute將查詢請求扔到消息隊列,請求獲得用戶需要創建VM的flavor類型;
  15. nova-conductor從消息隊列中接收到請求。該組件的作用是防止VM在被攻破後被當作跳板直接***數據庫,大規模環境下,該組件可能會成為瓶頸;
  16. nova-conductor去數據庫查詢用戶要創建的flavor類型;
  17. 數據庫將查詢到的結果反饋給nova-conductor;
  18. nova-conductor將用戶需要創建VM的flavor類型扔到消息隊列;
  19. nova-conpute獲取到flavor類型,至此,nova-compute知道用戶需要創建的VM都需要包含哪些資源;
  20. nova-compute向glance-api發起獲取鏡像請求;
  21. glance-api向keystone進行認證;
  22. keystone將認證後的結果返回給glance-api(glance組件之間通信不經過rabbit mq);
  23. glance-api將任務交由glance-registry處理,glance-registry負責存儲系統鏡像的元數據;
  24. glance-registry向db查詢創建VM需要的鏡像及鏡像的存放位置;
  25. glance-registry將結果返回給glance-api;
  26. glance-api去存放鏡像的對象存儲上獲取鏡(此處的glance模式是V1版本,在V2版本中取消了glance-registry,glance-api直接連db和image store);
  27. glance-api將獲取到的鏡像結果反饋給nova-compute,至此,系統鏡像已具備;
  28. nova-compute向neutron-server發起創建網絡請求(neutron-server此處就是起到api的作用,只是名字不叫api);
  29. neutron-server去keystone進行認證;
  30. neutron-server將需要創建網絡的請求扔到消息隊列;
  31. neutron-plugins從消息隊列中接收到該請求;
  32. neutron-plugins去db中獲取要創建的網絡使用的plugin以及要創建網絡的網絡類型和機制類型;
  33. neutron-plugins將獲取到的信息扔到消息隊列;
  34. neutron-agents從消息隊列收到該信息後執行網絡創建;
  35. neutron-agents將創建的相關信息保存到數據庫中;
  36. neutron-agents創建完成後將消息扔到消息隊列;
  37. neutron-server從消息隊列中收到創建完成的信息;
  38. neutron-server將該信息反饋給nova-compute,至此,網絡條件具備;
  39. nova-compute向cinder-api發起持久存儲的請求;
  40. cinder-api首先會去keystone進行身份認證;
  41. 認證通過後將需要創建持久化存儲的信息扔到消息隊列;
  42. cinder-scheduler從消息隊列中接收到信息;
  43. cinder-scheduler去db上查詢哪些物理主機可以提供持久存儲,並根據權中選取出1臺;
  44. cinder-scheduler將結果扔到消息隊列;
  45. 被選中主機上的cinder-volume接收到該消息;
  46. cinder-volume調用後端存儲驅動,創建持久化存儲設備,如LVM等;
  47. cinder-volume將創建好的持久化存儲信息存到數據庫中;
  48. cinder-volume將創建好的結果扔到消息隊列;
  49. cinder-api從消息隊列中接收到該消息;
  50. cinder-api將該消息反饋給nova-compute,至此,一個VM所需要的計算、系統鏡像、網絡、存儲四個基本條件都已具備;
  51. nova-compute調用hypervisor創建VM,hypervisor可以是KVM、XEN、VMware等。

以上就是openstack中一個VM從用戶發起請求到創建所需要經歷的步驟,如果用到的組件不止示例中的四個,依然是nova-compute向相應組件的api發起請求,待所有條件都具備後,再調用hypervisor創建VM。

openstack中創建一個虛擬機經過的51步