Openstack之Nova建立虛機流程分析
前言
Openstack作為一個虛擬機器管理平臺,核心功能自然是虛擬機器的生命週期的管理,而負責虛機管理的模組就是Nova。
本文就是openstack中Nova模組的分析,所以本文重點是以下三點:
先了解Openstack的整體架構,搞清楚為什麼要用這樣的架構;
然後再瞭解架構中的各個元件,元件提供的主要功能與各個元件之間的互動;
瞭解虛機的啟動過程,能在遇到問題時發現問題出在哪個模組中的哪個元件。
Nova元件介紹
接下來進行詳細介紹,如有錯誤,歡迎拍磚!
下圖為建立虛擬機器的一個大概流程圖。
客戶端:可以認為是web頁面op或者Horizonl;也可以是命令列的nova client。
Nova Api:用於接收和處理客戶端傳送的HTTP請求;
Nova Scheduler:nova的排程宿主機的服務,決定虛擬機器建立在哪個節點上。
Nova compute:Nova中最和新的服務,負責虛擬機器的生命週期的管理。
nova conductor:資料訪問許可權的控制操作,可以理解為資料庫代理服務。
其他服務:nova cert管理證照,為了相容aws;nova vncproxy和consoleauth控制檯服務。
不同的模組之間是透過HTTP請求REST API服務
同一個模組不同元件之間(如nova-scheduler請求nova-compute)是RPC遠端呼叫,透過Rabbmq來實現。
虛機建立流程梳理
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的。
http://www.cnblogs.com/zhoumingang/p/5522463.html
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檔案啟動虛擬機器。
總結:
1、Openstack這種分散式的架構,各個模組之間松耦合,可以很容易的新增模組,而且配置靈活,服務可以安裝在不同節點,即使部分服務掛了也不會影響。
2、虛擬機器建立簡單說來三步,nova api接受建立虛機請求,nova scheduler為建立虛機指定宿主機,nova compute啟動虛擬機器。如果能夠理解上面的所有步驟,那麼對於定位問題可以精準,甚至有些問題可以自己解決,譬如虛機error了,如果你看到虛機的資訊已經有host資訊了,那基本能從nova-compute的日誌中看到問題所在,如果沒有,基本是scheduler會有錯誤資訊提示。
轉自:http://www.cnblogs.com/zhoumingang/p/5532409.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4550/viewspace-2803638/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深挖Openstack Nova - 例項建立(2)
- 深挖Openstack Nova - 例項建立(3)
- 深挖Openstack Nova - 例項建立(4)
- 雲端計算管理平臺之OpenStack計算服務nova
- openstack命令建立雲主機例項
- CentOS7.0+OpenStack+kvm雲平臺部署—配置NovaCentOS
- 雲端計算管理平臺之OpenStack啟動虛擬機器例項虛擬機
- 手動在虛擬機器之間建立信任虛擬機
- Centos7安裝部署openstack--nova計算服務CentOS
- 虛擬化技術之kvm虛擬機器建立工具virt-install虛擬機
- 虛擬化技術之kvm虛擬機器建立工具qemu-kvm虛擬機
- openStack核心元件的工作流程元件
- springboot 事務建立流程原始碼分析Spring Boot原始碼
- 三分鐘帶你入門瞭解openstack的Nova專案
- OpenStack建立Win10例項Win10
- 使用 Cockpit 建立虛擬機器KPI虛擬機
- 建立新的虛擬機器虛擬機
- kvm純命令建立虛擬機器虛擬機
- VMware Workstation Pro建立虛擬機器虛擬機
- Ubuntu虛擬機器進入虛擬環境的流程Ubuntu虛擬機
- OpenStack-雲端計算,虛擬化技術,初步認識OpenStack,瞭解OpenStack的結構部署以及OpenStack核心專案
- Laravel nova 建立動態資源配置欄位Laravel
- 測試開發之系統篇-按需建立測試虛擬機器虛擬機
- Hyper-V批次建立虛擬機器虛擬機
- 在vmare中建立centos虛擬機器CentOS虛擬機
- Shiro中Subject物件的建立與繫結流程分析物件
- OpenStack學習系列之十二:安裝ceph並對接OpenStack
- 在 Fedora 中使用 Cockpit 建立虛擬機器KPI虛擬機
- 在CentOS上建立虛擬機器以及RedisCentOS虛擬機Redis
- 效率工具 | 快速建立虛擬機器,Vagrant真香!虛擬機
- ? 抓包分析 TCP 建立和斷開連線的流程TCP
- Android 關機、重啟、recovery流程分析Android
- 死磕以太坊原始碼分析之挖礦流程分析原始碼
- Laravel Nova 入門建立一個簡單的部落格Laravel
- Android原始碼分析之View繪製流程Android原始碼View
- 深入理解虛擬機器之虛擬機器類載入機制虛擬機
- GPU虛擬機器建立時間深度優化GPU虛擬機優化
- VMware Workstaion-從零建立centos虛擬機器AICentOS虛擬機