Openstack之Nova建立虛機流程分析

neuyu發表於2021-09-09

前言   

    Openstack作為一個虛擬機器管理平臺,核心功能自然是虛擬機器的生命週期的管理,而負責虛機管理的模組就是Nova。

本文就是openstack中Nova模組的分析,所以本文重點是以下三點:

 

  • 先了解Openstack的整體架構,搞清楚為什麼要用這樣的架構;

  • 然後再瞭解架構中的各個元件,元件提供的主要功能與各個元件之間的互動;

  • 瞭解虛機的啟動過程,能在遇到問題時發現問題出在哪個模組中的哪個元件。

 

Nova元件介紹

接下來進行詳細介紹,如有錯誤,歡迎拍磚!

下圖為建立虛擬機器的一個大概流程圖。

圖片描述

 

客戶端:可以認為是web頁面op或者Horizonl;也可以是命令列的nova client。

Nova Api:用於接收和處理客戶端傳送的HTTP請求;

Nova Scheduler:nova的排程宿主機的服務,決定虛擬機器建立在哪個節點上。

Nova compute:Nova中最和新的服務,負責虛擬機器的生命週期的管理。

nova conductor:資料訪問許可權的控制操作,可以理解為資料庫代理服務。

其他服務:nova cert管理證照,為了相容aws;nova vncproxy和consoleauth控制檯服務。

 

不同的模組之間是透過HTTP請求REST API服務

同一個模組不同元件之間(如nova-scheduler請求nova-compute)是RPC遠端呼叫,透過Rabbmq來實現。

 

虛機建立流程梳理

圖片描述

1.客戶端使用自己的使用者名稱密碼請求認證。
2.keystone透過查詢在keystone的資料庫user表中儲存了user的相關資訊,包括password加密後的hash值,並返回一個token_id(令牌),和serviceCatalog(一些服務的endpoint地址,cinder、glance-api後面下載映象和建立塊儲存時會用到)。

3.客戶端帶上keystone返回的token_id和建立虛機的相關引數,Post請求nova-api建立虛擬機器

4.nova-api接收到請求後,首先使用請求攜帶的token_id來訪問該api,以驗證請求是否有效。

5.keystone驗證透過後返回更新後的認證資訊。

6.nova api檢查建立虛擬機器引數是否有效與合法。

檢查虛擬機器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之後,透過rpc呼叫nova-compute服務,把“建立虛機請求”訊息丟個mq。

13.nova compute收到建立虛擬機器請求的訊息

#nova-compute有個定時任務,定期從資料庫中查詢到執行在該節點上的所有虛擬機器資訊,統計得到空閒記憶體大小和空閒磁碟大小。然後更新資料庫compute_node資訊,以保證排程的準確性。

14.nova compute透過rpc查詢nova資料庫中虛機的資訊例如主機模板和id

15.nova conductor從訊息佇列中拿到請求查詢資料庫

16.nova conductor查詢nova資料庫

17.資料庫返回虛機資訊

18.nova compute從訊息佇列中獲取資訊。

19.nova compute 請求glance 的rest api,下載所需要的映象,一般是qcow2的。

http://www.cnblogs.com/zhoumingang/p/5522463.html  

20.glance api 也會去驗證請求的token的有效性。

21.glance api 返回映象資訊給nova-compute。

22.同理,nova compute請求neutron api配置網路,例如獲取虛機ip地址

23.驗證token的有效性

24.neutron返回網路資訊

25-27 同glance、neutron驗證token返回塊裝置資訊

28.據上面配置的虛擬機器資訊,生成xml,寫入libvirt,xml檔案,然後呼叫libvirt driver去使用libvirt.xml檔案啟動虛擬機器。

 

圖片描述

 

總結:

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

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

 

 轉自:http://www.cnblogs.com/zhoumingang/p/5532409.html


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4550/viewspace-2803638/,如需轉載,請註明出處,否則將追究法律責任。

相關文章