openstack組件之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