openstack系列文章(四)
學習 openstack 的系列文章 - Nova
- Nova 基本概念
- Nova 架構
- openstack Log
- Nova 元件介紹
- Nova 操作介紹
1. Nova 基本概念
Nova 是 openstack 最核心的服務,負責管理和維護雲環境的計算資源,虛擬機器的生命週期管理就是通過 Nova 來實現的 。
2. Nova 架構
2.1 Nova 基本元件
如上圖所示,Nova 由多個元件構成,這些元件以子服務的形式執行 。
舉例,通過 systemctl status openstack-nova-compute.service 判斷 nova - compute 服務是否執行:
Nova 主要元件:
- nova - api: 接收和響應客戶的 API 呼叫;
- nova - scheduler:虛機排程服務,負責決定在哪個計算節點上執行虛機;
- nova - compute: 管理虛機的核心服務,通過呼叫 Hypervisor API 實現虛機生命週期管理;
- hypervisor: 計算節點上的虛擬化管理程式,虛機管理最底層的程式,常用的 hypervisor 有 KVM 、 VMware 等;
- nova - conductor: nova - compute 並不會直接訪問資料庫,訪問資料庫的工作通過 nova - conductor 完成,這樣做的好處是使得系統具有更好的伸縮性和更高的安全性;
2.2 nova 服務部署
nova - compute 服務一般部署在計算節點上,其它子服務一般部署在控制節點上。
命令 nova service-list 顯示 nova 服務執行在哪個節點上:
登陸 controller 檢視 nova-scheduler 服務是否執行:
2.3 虛機建立步驟
這篇文章寫的非常好: ofollow,noindex">https://ilearnstack.com/2013/04/26/request-flow-for-provisioning-instance-in-openstack/ ,強烈推薦,這裡不做贅述 。
3. openstack Log
openstack nova 的 Log 存放路徑為 /var/log/nova/ 。
日誌格式為 <時間戳><日誌等級><程式碼模組><Request ID><日誌內容><原始碼位置>, 分別進行介紹:
- 時間戳: 日誌記錄的時間;
- 日誌等級,有 INFO、 WARNING 、 ERROR 、DEBUG 等,預設為 INFO,要檢視詳細資訊,可以將 /etc/nova/nova.conf 中的 debug 選項設為 true, 具體操作細節見 openstack 官網 介紹;
- 程式碼模組,當前執行的程式碼,舉例,如下圖所示:
程式碼模組為 nova.compute.manager, 找到該模組:
- find / -name compute 查詢程式碼所在的 compute 目錄;
- cd 到該目錄,在該目錄下有個 manager.py 的程式碼,即為執行的程式碼;
- 搜尋 VM 關鍵字,在 1052 行找到列印這條 Log 的程式碼:
- Request ID: 日誌會記錄連續不同的操作,為了便於區分和增加可讀性,每個操作都被分配唯一的Request ID,便於查詢;
- 日誌內容: 記錄當前正在執行的操作和結果等重要資訊;
- 原始碼位置: 日誌程式碼的位置,包括方法名稱,原始碼檔案的目錄位置和行號,不是所有日誌都有;
4. Nova 元件介紹
4.1 nova - api
nova - api 是 Nova 元件的門戶,所有對 Nova 的請求首先會由 nova - api 進行處理。
關於虛機生命週期相關的操作,nova - api 都可以處理, openstack dashboard 中 Instances 欄的下拉選單中記錄著 nova -api 可執行的操作。
4.2 nova - scheduler
nova - scheduler 根據使用者的資源需求進行呼叫,資源需求包括 VCPU, RAM, DISK 和 Metadata , 這些資源需求定義在 flavor 中。
如何根據 flavor 進行呼叫?
nova - scheduler 的預設排程器是 Filter scheduler , 當Filter scheduler 執行排程操作時,會讓 filter 選擇滿足 flavor 的計算節點,當選出滿足條件的計算節點之後計算各計算節點的權重以選擇最優的計算節點,在該計算節點上建立 instance。
/etc/nova/nova.conf 中指明瞭預設的 filter:
RetryFilter: 刷掉已經排程過的節點。
AvailabilityZoneFilter: 將不屬於指定 Availability Zone 的計算節點過濾掉,關於 Availability Zone 的介紹和設定可見這篇 博文 。
ComputeFilter: 保證只有 nova - compute 服務正常工作的計算階段才能夠被 nova - scheduler 排程。
ServerGroupAntiAffinityFilter: 儘量將 Instance 分散部署到不同的節點上,前提是將 Instance 要加入到 Group 中,如果沒有指定 server group, Filter 將不做任何過濾。
4.3 nova - compute
nova - compute 在計算節點上執行,負責管理節點上的 instance。
openstack 對 instance 的操作,最後都是交給 nova-compute 來完成的,nova-compute 與 Hypervisor 一起實現 OpenStack 對 instance 生命週期的管理。
nova-compute 的功能可以分為兩類:
- 定時向 openstack 報告計算節點的狀態;
- 實現 instance 生命週期的管理,包括為 instance 準備資源,建立 instance 的映象檔案,建立 instance 的 XML 檔案,建立虛擬網路並啟動虛機。
Hypervisor 最清楚計算節點的資訊,可以通過 virsh nodeinfo 和 virsh dominfo 命令檢視計算節點和instance的資訊:
注意要檢視計算節點上執行的 instance 資訊,需要切換到 root 使用者,否則什麼都顯示不出來。
通過這些命令,也可以計算出這個 instance 還能夠容納多大 flavor 的 instance 。
5. Nova 操作介紹
5.1 Create Instance
通過 log 來分析這一建立過程,Debug 選項沒開。
步驟如下:
1. 使用者向 nova - api 傳送請求: "create instance"
2. nova - scheduler 完成 排程,選擇 compute-0 作為 instance 部署的節點
3. nova - compute 首先根據 flavor 為 instance 分配記憶體,磁碟空間和 vCPU
flavor 所需的資源分配好了之後再分配網路資源給 instance:
為 instance 建立 image :
要注意的是 nova - compute 會檢查該 image 在 compute node 上是否存在,如果存在則直接使用,如果不存在,則 ssh 到 glance 通過 scp 下載 image 到本地:
將上傳的 image 下載到 /var/lib/nova/instances/_base/ 目錄下,下載下來的 image uuid 為 cce3aa2cd0a67c02306843a3523a997f632ee284, 通過 qemu-img info 命令檢視該 image 的格式為:
instance 的映象為 qcow2 格式,因此還需將 raw 格式的 image 轉換為 qcow2 的 image 給 instance 用,轉換後的 image 在 /var/lib/nova/instances 目錄下,uuid 為 17edd30c-bf61-4592-8784-8774e8156469,該uuid 即為 instance 的 uuid 。
同理,通過 qemu-img info 檢視該 image 是否為 qcow2 格式:
4. instance 建立成功
5.2 Rescue / Unrescue
Rescue: 故障恢復機制,由於誤操作或者突然斷電等操作使得作業系統起不來了,為了最大限度挽救資料,使用一張系統盤將系統引導起來,然後在嘗試恢復。 問題如果不太嚴重,可以通過這種方式讓系統重新正常工作。
5.3 Soft / Hard Reboot
Soft Reboot: 重啟作業系統,整個過程中,instance 依然處於執行狀態,相當於在 linux 中執行 reboot 命令。
Hard Reboot: 重啟 instance,相當於關機之後再開機 。
5.4 Migrate
Migrate: 將 instance 從當前的計算節點遷移到其他節點上,不要求源和目標節點必須共享儲存,Migrate 前必須滿足一個條件:計算節點間需要配置 nova 使用者無密碼訪問。
5.5 Live Migrate
Live Migrate: 線上遷移,instance 不會停機,分為共享儲存遷移和非共享儲存遷移。
關於共享儲存 NFS 的內容可見這篇博文。
5.6 Resize
Resize: 調整 instance 的 vCPU、記憶體和磁碟資源,Migrate 是特殊的 Resize,因為遷移過程中flavor未改變。