OpenStack之Nova模塊

Nova簡介

nova和swift是openstack最先的兩個組件,nova分爲控制節點和計算節點,計算節點經過nova computer進行虛擬機建立,經過libvirt調用kvm建立虛擬機,nova之間通訊經過rabbitMQ隊列進行通訊。
html

Nova體系結構

Nova重要組件介紹

1.nova API

nova-api組件實現了RESTful API功能,是外部訪問Nova的惟一途徑。接收外部的請求並經過Message Queue將請求發送給其餘的服務組件,同時也兼容EC2 API,因此也能夠用EC2的管理工具對nova進行平常管理。
html5

2.nova scheduler

nova scheduler模塊在openstack中的做用是決策虛擬機建立在哪一個主機(計算節點)上。決策一個虛擬機應該調度到某物理節點,須要分爲兩個步驟:java

  • 過濾(filter),過濾出能夠建立虛擬機的主機
  • 計算權值(weight),根據權重大小進行分配,默認根據資源可用空間進行權重排序

NOTE:

除了nova-conductor能夠訪問數據庫以外,由於nova-scheduler是隻讀數據庫,而nova-api對數據庫的操做有Policy保護,因此它們也都是能夠訪問數據庫的。可是最好仍是僅經過nova-conductor來訪問數據庫。node

3.nova-api-metadata

從實例中接收元數據請求。nova-api-metadata服務一般在nova-network安裝時使用的是多宿主模式運行。mysql

4.nova-compute

負責虛擬機的生命週期管理,建立並終止虛擬機實例的工做後臺程序hypervisor api。例如:算法

  • XenAPI for XenServer/XCP
  • libvirt for KVM or QEMU
  • VMwareAPI for VMware

基本上,守護進程接受來自隊列並執行一系列系統命令,例如啓動kvm實例並更新數據庫中的狀態。sql

5.nova-placement-api

跟蹤每一個計算提供者的倉庫和使用狀況。docker

6.nova-conductor模塊

計算節點訪問數據的中間件,nova-compute服務和數據庫之間的中間件。它消除了對雲數據庫的直接訪問。官方建議:不要將它部署到nova-compute服務運行。數據庫

7.nova-consoleauth守護進程

用於控制檯的受權驗證,受權控制檯代理提供的用戶令牌。此服務必須運行用於控制檯代理工做。您能夠運行任何類型的代理,而不是集羣配置中的單nova-consoleauth服務。swift

8.nova-novncproxy守護進程

VNC代理,提供用於經過vnc鏈接訪問運行實例的代理。支持基於瀏覽器的客戶端客戶端。

9.nova-spicehtml5proxy守護進程

提供一個代理,經過一個SPICE鏈接訪問運行實例。支持基於瀏覽器的html 5客戶端。

10.nova-xvpvncproxy守護進程

提供用於經過vnc鏈接訪問運行實例的代理。支持一個特定於服務器的java客戶機。

11.Queue

在守護進程之間傳遞消息的中心。一般使用RabbitMQ也能夠用另外一個基於AMQP的消息隊列,例如ZeroMQ。

12.SQL database

存儲大部分構建時間和運行時狀態,用於雲基礎設施,包括:

  • 可用實例類型
  • 使用實例
  • 可用網絡
  • 項目

理論上,OpenStack計算能夠支持任何數據庫。SQLite3數據庫用於測試和開發工做,mysql,MariaDB和postgresql。

Nova建立虛擬機流程

虛機建立流程梳理

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的。
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文件啓動虛擬機。

參考文章:
http://www.javashuo.com/article/p-gbkhhrav-hv.html
http://www.javashuo.com/article/p-fcaoystr-mh.html
https://docs.openstack.org/nova/pike/install/get-started-compute.html

相關文章
相關標籤/搜索