根據官方提供的流程圖,我我的將OpenStack雲主機的建立步驟分爲四個階段:算法
KeyStone驗證階段數據庫
Nova服務組件交換api
OpenStack其它服務交換微信
執行建立網絡
第一階段:KeyStone驗證ide
1. 用戶使用Dashboard Horizon或者命令行CLI,經過REST API給Identity 服務Keystone發送用戶憑據(credentials)並驗證(authenticates)。Keystone使用用戶憑據進行驗證,而後返回一個auth-token。而後後續操做就能夠使用這個auth-token經過REST調用請求OpenStack其餘的組件。spa
2. Horizon或者CLI將launch instance 或者nova-boot轉換造成爲一個REST API的請求發送給nova-api。命令行
3. nova-api接到這個請求後,首先向keystone發送一個請求來確認auth-token是否有效和是否有訪問權限。Keystone確認auth-token後,發送一個包含角色和權限的更新後的認證頭。orm
4. nova-api和Nova數據庫交互,將用戶的建立虛擬機的請求在nova 數據庫裏記錄下來。server
第二階段:Nova服務組件交互
5. nova-api以rpc.call的方式發送一個請求給nova-schedule,讓nova-scheduler去選擇一個計算節點來建立虛擬機。注意是經過消息隊列發送給nova-scheduler。
6. nova-schedule調度服務會偵聽Scheduler隊列,從隊列中獲取數據。
7. nova-scheduler和Nova數據庫交互,經過調度算法,也就是filtering 和weighing最終選擇一臺運行nova-compute的計算節點,而後nova-schedule將虛擬機信息使用rpc.cast的模式發送至nova-compute.計算節點隊列。讓nova-compute在選擇好的計算節點中去建立實例。
8. Nova-Compute從隊列獲取請求。
9. nova-compute發送一個rpc.call 請求給nova-conductor,去獲取實例的信息,好比host ID和選擇的Flavor(CPU、內存和磁盤)。
10. nova-conductor從隊列中獲取請求。
11. nova-conductor與nova的數據庫進行交互。nova-conductor返回實例的信息。nova-compute從隊列中獲取實例的信息。
第三階段:OpenStack其它服務交互
在第二階段nova-compute爲了獲取到建立實例所須要的資源,好比鏡像、網絡、存儲。會使用在第一階段用戶驗證後獲取到的auth-tokon分別和鏡像服務Glance的glance-api,網絡服務Neutron的neutron-server已經塊存儲服務Cinder的cinder-api進行交互。並且每次對方收到請求後都須要到keystone上去驗證auth-token是否有效。
12. nova-compute使用驗證後獲取的auth-token發起一個REST調用給glance-api獲取鏡像。而後nova-compute使用使用鏡像ID。從鏡像服務中獲得Image URI。從(p_w_picpath storage)鏡像存儲中加載鏡像。
13.glance-api去Keystone上驗證auth-token是否有效。若是有效,nova-compute就能夠獲取鏡像的元數據metadata。
14.nova-compute使用驗證後獲取的auth-token執行一個REST調用給neutron-server,讓neutron-server給分配和配置網絡,爲實例分配IP地址。
15.neutron-Server去Keystone驗證auth-token是否有效。若是有效,nova-compute就能夠獲取到網絡的相關信息。
16.nova-compute使用驗證後獲取的auth-token執行一個REST調用給cinder-api,給實例附加捲存儲,也就是雲硬盤。
17.cinder-api去Keystone驗證auth-token是否有效,若是有效,那麼nova-compute就能夠獲取到塊存儲的相關信息。
第四階段:執行建立
在第三階段,nova-compute已經經過Glance、Neutron和Cinder分別獲取到了鏡像、網絡和存儲相關的信息。那麼在第四階段nova-compute就開始建立虛擬機了。
18.nova-compute爲hypervisor的驅動生成數據,而且經過libvirt或者其餘API讓hypervisor執行請求來建立虛擬機。這樣虛擬機建立的交互流程基本結束,剩下的步驟就是hypervisor最終建立虛擬機的流程。
而後nova-api去輪訓nova database,查看虛擬機的狀態是否變成正確建立虛擬機的狀態(Active,none,sunning),若狀態正確,則虛擬機建立正常成功。
轉載自趙班長微信:
http://mp.weixin.qq.com/s?__biz=MzIxMDAwOTcwMA==&mid=2247483688&idx=1&sn=e9f5b6d8131320e4b74905a10311a221&scene=1&srcid=0821aruPgZflt9bsqw4sYXH6#wechat_redirect