前言前端
前天晚上沒睡覺,因此昨天睡得很早,致使今天4點就起來了mysql
時間是人最寶貴的財富,因而我打消了鑽在被子裏刷劇的念頭,爬起來整理一下在Openstack中新建一個雲主機的流程。web
Openstack可讓你在登陸dashboard以後只須要點一下」建立主機「的按鈕,選擇相應配置,在幾十秒內就能夠建立好一臺雲主機供你使用,這麼牛逼的事情是怎麼作到的呢?算法
彆着急,聽我跟你慢慢道來sql
新建一個雲主機流程總覽圖數據庫
首先你訪問dashboard以後,顯示的是一個登陸頁面,人家horizon告訴你:想用Openstack新建雲主機?那你先把你的帳號密碼交給我,等我找我大哥keystone確認你的身份以後才能放你進去django
原來我還一直覺得這裏登陸的時候只是一個簡單的django框架使用pymysql直接查詢數據庫,而實際上這裏的表單信息是提交到了keystone,而後經過keystone查詢數據庫進行驗證的api
keystone接收到前端表單傳過來的域、用戶、密碼信息之後,查詢了數據庫,確認身份後將一個token(就像是辦了身份證~~~)返回給該用戶,讓這個用戶之後再進行操做的時候不須要再提供帳號密碼,而是拿出token來網絡
horizon拿到token以後,實際上這裏在web頁面上的顯示就是登陸成功了,接着找到建立雲主機的按鈕並點擊框架
填寫雲主機相關配置信息
填了這麼一大堆配置信息,點擊啓動實例以後,horizon就帶着三樣東西去找nova-api了:
1.建立雲主機的請求
2.雲主機相關配置信息
3.剛剛keystone返回給的token
你horizon來找我nova-api辦事可我也不認識你啊,這樣,你把身份證給我,我去找我大哥keystone問問(這些組件都有一個共同的大哥keystone,但他們本身之間卻不認識)。而後他就帶着horizon的token去找keystone
keystone一看nova-api帶來的token,這不就是本身剛發的那個麼,但程序可沒這麼聰明,它還得乖乖查一次數據庫,而後告訴nova-pai,這兄弟信得過,你就照它說的作吧
nova-api從大哥那回來,接收了horizon提供的兩樣東西,一是雲主機配置信息,二是建立請求,這nova-api手底下也有一幫小兄弟,這幫人之間溝通可不太方便都得經過一塊小黑板(mq消息隊列),把本身的需求寫在小黑板上,能作的了這事的人天然就去作了。但配置信息如今還不能寫在小黑板上,得找到肯定去幹活的人以後才行啊,因此nova-api就把配置信息放到數據庫裏
數據庫把配置信息收好以後,對nova-api說了聲,我放好了
放好配置信息後nova-api就在小黑板上寫「如今要建立一臺雲主機,配置信息我已經放到數據庫了,小s你給安排安排吧」
這個小s就是nova-schedular,他就像是nova-api的祕書,nova-api的有事都是經過它交代給其餘人的,這一步就是他從小黑板上看到了nova-api的信息
小s如今知道了要建立雲主機,但它要看一看雲主機都要什麼配置,纔好決定該把這事交給誰去作(這裏是指多個nova-compute的狀況,各個計算節點的資源使用狀況都在小s這裏),因此他讓數據庫把雲主機配置信息發給他看看
數據庫收到請求以後,把雲主機配置信息發給小s
小s拿到配置信息後,使用調度算法決定了要讓nova-compute去幹這個事,就在小黑板上寫「nova-compute你給建立個雲主機,配置都在數據庫裏了」
nova-compute看到小黑板上的東西以後,本應該直接去數據庫拿取配置信息,但由於nova-compute的特殊身份,nova-compute所在計算節點上全是雲主機,萬一有一臺雲主機被黑客入侵從而控制計算節點,直接拖庫是很危險的。因此不能讓nova-compute知道數據庫在什麼地方
nova-compute沒辦法去數據庫取東西難道就不工做了嗎?那可不行啊,他不知道去哪取,但他哥們知道啊,因而他在小黑板上寫「nova-conductor,你幫我去數據庫取一下配置信息」
nova-conductor從小黑板上看到了nova-compute的請求
nova-conductor告訴數據庫我要查看某某雲主機的配置信息
數據庫把雲主機配置信息發送給nova-conductor
nova-conductor把配置信息寫在小黑板上
nova-compute從小黑板上讀取雲主機的配置信息
nova-compute拿到了雲主機配置信息一看,人家但是專業的,立馬就知道該怎麼作了,先去找glance-api拿鏡像吧,剛纔講了那麼多,可都是在nova組件內部的,此次去找別的組件可不是寫在小黑板上了,它得帶着本身的身份證去,告訴glance-api,我要xxx鏡像
glance-api看nova-compute過來,他可不認識nova-compute,讓nova-compute拿出身份證,拿着人家身份證找到本身大哥keystone看看這人靠不靠譜,keystone一看,沒問題,按他說的作吧(在nova驗證horizon被當作兩步,這裏化作一步,是爲了簡化重複的流程)
glance-api把鏡像資源信息返回給nova-compute(這裏主要說建立雲主機的過程,除nova外其餘組件內部先不提)
接着nova-compute找到neutron-server(圖裏畫錯了,由於是偷別人的圖,本身的圖畫了半天畫很差。。。),告訴他我要xxx網絡資源
neutron-server也不認識他,拿着他的身份證找keystone確認了一下身份
nuetron-server把網絡資源信息返回給nova-compute
nova-compute找到cinder-api要存儲資源,雲主機得有硬盤啊,得存東西啊(一樣,這裏圖中也有錯誤)
cinder-api也不認識他,拿着他的身份證找keystone確認了一下身份
cinder-api把存儲資源信息返回給nova-compute
nova-compute拿到了全部資源以後,他其實也只是個收集信息的,他把工做全都交給了真正建立虛擬機的Hypervisor(kvm,zen等虛擬化技術)
到此爲止,你已經擁有了一臺雲主機了,流程看似複雜實際上在幾十秒就完成了