前言
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后面下載鏡像和創建塊存儲時會用到)。
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的。
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
#歡迎指正錯誤