Openstack私有云簡介之Nova

一、Nova主要作用

  • Nova是負責提供計算資源的模塊,也是openstack中的核心模塊,其主要功能是負責虛擬機實例的生命週期管理、網絡管理、存儲卷管理、用戶管理以及其他的相關雲平臺管理功能。

二、Nova的系統架構

在這裏插入圖片描述
部署架構特點:

  • 無中心結構
  • 各組件無本地持久化狀態
  • 可水平擴展
  • 通常將nova-api、nova-scheduler、nova-conductor組件合併部署在控制節點上
  • 通過部署多個控制節點實現HA和負載均衡
  • 通過增加控制節點和計算節點實現簡單方便的系統擴容

三、Nova的主要組件

Nova-api服務

  • 接收和相應來自最終用戶的計算API請求,對外提供一個與雲基礎設施交互的接口,也是外部可用於管理基礎設施的唯一組件。
  • nova-api 對接收到的 HTTP API 請求會做如下處理:
    1)檢查客戶端傳人的參數是否合法有效
    2)調用 Nova 其他子服務的處理客戶端 HTTP 請求
    3)格式化 Nova 其他子服務返回的結果並返回給客戶端
  • 只要是跟虛擬機生命週期相關的操作,nova-api 都可以響應。大部分操作都可以在 Dashboard 上找到

Nova-api-metadata服務

  • 接收來自虛擬機發送的元數據請求。nova-api-metadata一般在安裝nova-network服務的多主機模式下使用

Nova-compute(向外提供的端口爲8774)

  • OpenStack 對實例的操作,最後都是交給 nova-compute
    來完成。它是一個持續工作的守護進程,通過hypervisor的api來創建和銷燬虛擬機實例,nova-compute 與 Hypervisor 一起實現 OpenStack 對實例生命週期的管理。

  • nova-compute 的功能可以分爲兩類:
    1、定時向 OpenStack 報告計算節點的狀態
    每隔一段時間,nova-compute 就會報告當前計算節點的資源使用情況和
    nova-compute 服務狀態。可以查看日誌 /var/log/nova/nova-compute.log
    2、實現實例生命週期的管理
    OpenStack 對實例最主要的操作都是通過 nova-compute實現的,包括實例的啓動、關閉、重啓、暫停、恢復、刪除、調整實例大小、遷移、創建快照等。
    當 nova-scheduler 選定了部署實例的計算節點後,會通過消息中間件 RabbitMQ 向選定的計算節點發出創建實例的命令。
    該計算節點上運行的 nova-compute 收到消息後會執行實例創建操作。日誌 /var/log/nova/nova-compute.log 會記錄整個操作過程。

Nova-conductor

  • nova-compute 需要獲取和更新數據庫中實例的信息。但 nova-compute 並不會直接訪問數據庫,而是通過 nova-conductor 實現數據的訪問
  • nova-conductor模塊作用於nova-compute服務與數據庫之間,避免了由nova-compute服務對雲數據庫的直接訪問。他可以橫向擴展,但是,不要將它部署在運行nova-compute服務的主機節點上

Nova-scheduler

  • nova-scheduler 解決如何選擇在哪個計算節點上啓動實例的問題。
  • 當創建實例時,用戶會提出資源需求,例如 CPU、內存、磁盤各需要多少。OpenStack 將這些需求定義在 flavor中,用戶只需要指定用哪個 flavor 就可以了。nova-scheduler 會按照 flavor 去選擇合適的計算節點。
  • OpenStack 的虛擬機調度策略主要是由 FilterScheduler ChanceScheduler 和實現的,其中FilterScheduler作爲默認的調度器實現了基於主機過濾(filtering)和權值計算(weighing)的調度算法,而ChanceScheduler 則是基於隨機算法來選擇可用主機的簡單調度器。
  • FilterScheduler調度過程分爲兩步:
    1、通過過濾(filtering)選擇滿足條件的計算節點(運行
    nova-compute)。
    2、通過權重計算(weighting)選擇在最優(權重值最大)的計算節點上創建實例。

四、VM實例化流程

在這裏插入圖片描述

  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 負責數據庫訪問。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章