openstack中創建一個虛擬機經過的51步
阿新 • • 發佈:2018-12-13
瓶頸 補充 物理機 可用 理解 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步進行詳細解釋:
- 用戶通過horizon或者cli發起一個創建VM請求時,首先去keystone進行認證;
- 認證通過後,keystone將結果返回給用戶,其中就包含用戶權限的token令牌;
- 用戶通過token像nova-api發起創建虛擬機的而請求;
- nova-api首先去keystone驗證用戶的token是否有效;
- keystone將認證後的結果返回給nova-api;
- nova-api將用戶要創建VM的信息,如CPU、內存、網絡及硬盤等存入數據庫;
- 存儲完成後,數據庫將結果返回給nova-api;
- nova-api將要創建VM的信息扔到消息隊列;
- nova-scheduler從消息隊列中接收到該信息;
- nova-shceduler從數據庫中查詢可承載VM的物理服務器;
- 數據庫將可用的物理服務器反饋給nova-scheduler,它根據權重最終選出1臺物理機承載VM;
- nova-scheduler將最終承載VM的物理機信息扔到消息隊列;
- 被選中物理服務器上的nova-compute接收到該消息;
- nova-compute將查詢請求扔到消息隊列,請求獲得用戶需要創建VM的flavor類型;
- nova-conductor從消息隊列中接收到請求。該組件的作用是防止VM在被攻破後被當作跳板直接***數據庫,大規模環境下,該組件可能會成為瓶頸;
- nova-conductor去數據庫查詢用戶要創建的flavor類型;
- 數據庫將查詢到的結果反饋給nova-conductor;
- nova-conductor將用戶需要創建VM的flavor類型扔到消息隊列;
- nova-conpute獲取到flavor類型,至此,nova-compute知道用戶需要創建的VM都需要包含哪些資源;
- nova-compute向glance-api發起獲取鏡像請求;
- glance-api向keystone進行認證;
- keystone將認證後的結果返回給glance-api(glance組件之間通信不經過rabbit mq);
- glance-api將任務交由glance-registry處理,glance-registry負責存儲系統鏡像的元數據;
- glance-registry向db查詢創建VM需要的鏡像及鏡像的存放位置;
- glance-registry將結果返回給glance-api;
- glance-api去存放鏡像的對象存儲上獲取鏡(此處的glance模式是V1版本,在V2版本中取消了glance-registry,glance-api直接連db和image store);
- glance-api將獲取到的鏡像結果反饋給nova-compute,至此,系統鏡像已具備;
- nova-compute向neutron-server發起創建網絡請求(neutron-server此處就是起到api的作用,只是名字不叫api);
- neutron-server去keystone進行認證;
- neutron-server將需要創建網絡的請求扔到消息隊列;
- neutron-plugins從消息隊列中接收到該請求;
- neutron-plugins去db中獲取要創建的網絡使用的plugin以及要創建網絡的網絡類型和機制類型;
- neutron-plugins將獲取到的信息扔到消息隊列;
- neutron-agents從消息隊列收到該信息後執行網絡創建;
- neutron-agents將創建的相關信息保存到數據庫中;
- neutron-agents創建完成後將消息扔到消息隊列;
- neutron-server從消息隊列中收到創建完成的信息;
- neutron-server將該信息反饋給nova-compute,至此,網絡條件具備;
- nova-compute向cinder-api發起持久存儲的請求;
- cinder-api首先會去keystone進行身份認證;
- 認證通過後將需要創建持久化存儲的信息扔到消息隊列;
- cinder-scheduler從消息隊列中接收到信息;
- cinder-scheduler去db上查詢哪些物理主機可以提供持久存儲,並根據權中選取出1臺;
- cinder-scheduler將結果扔到消息隊列;
- 被選中主機上的cinder-volume接收到該消息;
- cinder-volume調用後端存儲驅動,創建持久化存儲設備,如LVM等;
- cinder-volume將創建好的持久化存儲信息存到數據庫中;
- cinder-volume將創建好的結果扔到消息隊列;
- cinder-api從消息隊列中接收到該消息;
- cinder-api將該消息反饋給nova-compute,至此,一個VM所需要的計算、系統鏡像、網絡、存儲四個基本條件都已具備;
- nova-compute調用hypervisor創建VM,hypervisor可以是KVM、XEN、VMware等。
以上就是openstack中一個VM從用戶發起請求到創建所需要經歷的步驟,如果用到的組件不止示例中的四個,依然是nova-compute向相應組件的api發起請求,待所有條件都具備後,再調用hypervisor創建VM。
openstack中創建一個虛擬機經過的51步