1. 程式人生 > >openstack組件之nova

openstack組件之nova

openstack nova

1、nova介紹

nova是openstack 最核心的服務,負責維護和管理雲環境的計算資源。 管理 VM 的生命周期


2、nova架構

nova 的架構比較復雜,包含很多組件。

這些組件以子服務(後臺 deamon 進程)的形式運行,可以分為以下幾類:

1)nova-api

接收和響應客戶的 API 調用。

2)nova-scheduler

管理虛機的核心服務,通過調用 Hypervisor API 實現虛機生命周期管理

3)Hypervisor

計算節點上跑的虛擬化管理程序,虛機管理最底層的程序。

不同虛擬化技術提供自己的 Hypervisor。

常用的 Hypervisor 有 KVM,Xen, VMWare 等

4)nova-conductor

nova-compute 經常需要更新數據庫,比如更新虛機的狀態。

出於安全性和伸縮性的考慮,nova-compute 並不會直接訪問數據庫,而是將這個任務委托給 nova-conductor。

5)mysql

Nova 會有一些數據需要存放到數據庫中,一般使用 MySQL。數據庫安裝在控制節點上。

6)消息隊列

Nova 包含眾多的子服務,這些子服務之間需要相互協調和通信。

為解耦各個子服務,Nova 通過 Message Queue 作為子服務的信息中轉站。


3、nova物理部署方案

對於 Nova,這些服務會部署在兩類節點上:計算節點和控制節點。

計算節點上安裝了 Hypervisor,上面運行虛擬機。

由此可知:

1)只有 nova-compute 需要放在計算節點上。

2)其他子服務則是放在控制節點上的。


4、從虛機創建流程看 nova-* 子服務如何協同工作

技術分享圖片

1)客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 API(nova-api)發送請求:“幫我創建一個虛機”

2)API 對請求做一些必要處理後,向 Messaging(RabbitMQ)發送了一條消息:“讓 Scheduler 創建一個虛機”

3)Scheduler(nova-scheduler)從 Messaging 獲取到 API 發給它的消息,然後執行調度算法,從若幹計算節點中選出節點 A

4)Scheduler 向 Messaging 發送了一條消息:“在計算節點 A 上創建這個虛機”

5)計算節點 A 的 Compute(nova-compute)從 Messaging 中獲取到 Scheduler 發給它的消息,然後在本節點的 Hypervisor 上啟動虛機。

6)在虛機創建的過程中,Compute 如果需要查詢或更新數據庫信息,會通過 Messaging 向 Conductor(nova-conductor)發送消息,Conductor 負責數據庫訪問。


5、子服務詳解

1)nova-api

nova-api會對接收到的 HTTP API 請求(跟虛擬機生命周期相關的操作)會做如下處理:

1. 檢查客戶端傳人的參數是否合法有效

2. 調用 Nova 其他子服務的處理客戶端 HTTP 請求

3. 格式化 Nova 其他子服務返回的結果並返回給客戶端

2)nova-conductor

nova-compute 需要獲取和更新數據庫中 instance 的信息。

nova-compute 並不會直接訪問數據庫,而是通過 nova-conductor 實現數據的訪問。

這樣做有兩個顯著好處:

更高的系統安全性

更好的系統伸縮性

3)nova-scheduler

nova-scheduler的作用是選擇在哪個計算節點上啟動instance;

Filter scheduler 是 nova-scheduler 默認的調度器,調度過程分為兩步:

通過過濾器(filter)選擇滿足條件的計算節點(運行 nova-compute)

通過權重計算(weighting)選擇在最優(權重值最大)的計算節點上創建 Instance。

RetryFilter:刷掉之前已經調度過的節點

AvailabilityZoneFilter:為提高容災性和提供隔離服務,可以將計算節點劃分到不同的Availability Zone中

RamFilter: 將不能滿足 flavor 內存需求的計算節點過濾掉

DiskFilter: 將不能滿足 flavor 磁盤需求的計算節點過濾掉

CoreFilter: 將不能滿足 flavor vCPU 需求的計算節點過濾掉

ComputeFilter: 保證只有 nova-compute 服務正常工作的計算節點才能夠被 nova-scheduler調度。

……

Weight

經過前面一堆 filter 的過濾,nova-scheduler 選出了能夠部署 instance 的計算節點。

如果有多個計算節點通過了過濾,那麽最終選擇哪個節點呢?

Scheduler 會對每個計算權重值, 目前 nova-scheduler 的默認實現是根據計算節點空閑的內存量計算權重值

空閑內存越多,權重越大,instance 將被部署到當前空閑內存最多的計算節點上。

4)nova-compute

nova-compute 在計算節點上運行,負責管理節點上的 instance。

OpenStack 對 instance 的操作,最後都是交給 nova-compute 來完成的。

nova-compute 與 Hypervisor 一起實現 OpenStack 對 instance 生命周期的管理。

nova-compute 的功能可以分為兩類:

定時向 OpenStack 報告計算節點的狀態;

實現 instance 生命周期的管理(launch、shutdown、reboot、suspend、resume、terminate、resize、migration、snapshot等);

nova-compute 創建 instance 的過程可以分為 4 步:

(1)為 instance 準備資源

分配內存、磁盤空間和 vCPU 網絡資源

(2)創建 instance 的鏡像文件

首先將該 image 下載到計算節點(沒有命中緩存的時候)

然後將其作為 backing file(可能需要格式轉化) 創建 instance 的鏡像文件。

(3)創建 instance 的 XML 定義文件

(4)創建虛擬網絡並啟動虛擬機


openstack組件之nova