久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

nova創(chuàng)建虛擬機(jī)的過程是怎樣的

163次閱讀
沒有評論

共計(jì) 7219 個(gè)字符,預(yù)計(jì)需要花費(fèi) 19 分鐘才能閱讀完成。

這篇文章給大家介紹 nova 創(chuàng)建虛擬機(jī)的過程是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1. 初衷

時(shí)常被問及“nova 創(chuàng)建虛擬機(jī)的過程”,雖然大致是知道里面的過程的,但在某些場合之下,說“大致”知道往往決定了一場對話的無疾而終。要把這詳細(xì)的內(nèi)容給完整地說出來,有邏輯地說出來,還是需要細(xì)細(xì)斟酌一番的,那種“大致”的說辭就顯得蒼白了。畢竟作為從業(yè)者,詳細(xì)地,深入地了解內(nèi)部的整個(gè)過程應(yīng)該是必須的基本功,這算是初衷吧。

2. 由一條命令引起的風(fēng)波

nova --debug boot ubuntu_test --flavor 2 \
 --image cde1d850-65bb-48f6-8ee9-b990c7ccf158 \
 --num-instance 1 \
--nic net-id=cfa25cef-96c3-46f1-8522-d9518eb5a451

這是一條創(chuàng)建虛擬機(jī)(實(shí)例)的命令,在命令中指定了新實(shí)例的名稱:ubuntu_test,云主機(jī)類型:2,鏡像:cde1d850-65bb-48f6-8ee9-b990c7ccf158,數(shù)量:1 臺,指定網(wǎng)絡(luò):cfa25cef-96c3-46f1-8522-d9518eb5a451。

這里要說明一下鏡像和網(wǎng)絡(luò):

命令中的鏡像網(wǎng)絡(luò)通過這兩個(gè)命令查詢而來。

正如所看到的,命令中加了 –debug 參數(shù),這可以讓我們清楚看到在執(zhí)行這個(gè)命令的過程中做了哪些具體操作。

下圖就是我們執(zhí)行創(chuàng)建實(shí)例后的過程

這里信息有點(diǎn)多啊,因此只好截了部分的圖。詳細(xì)信息整理后放在下面。并逐一分析。

3. debug 輸出的主要的請求

這里主要說明下面最重要的四條

3.1. 向 keystone 取得 token

REQ: 
curl \
 -i  http://ubuntu80:35357/v2.0/tokens  -X POST -H  Accept: application/json  \
 -H  Content-Type: application/json  -H  User-Agent: python-novaclient  \
 -d  {auth : { tenantName :  admin ,  passwordCredentials : { username :  admin ,  password :  {SHA1}5705cc2e5fda0ab7529d5093c5e389fffe45d615 }}}

3.2. 通過 nova-api 驗(yàn)證鏡像

REQ: 
curl 
 -i  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e/images/cde1d850-65bb-48f6-8ee9-b990c7ccf158  \
 -X GET \
 -H  Accept: application/json  \
 -H  User-Agent: python-novaclient  \
 -H  X-Auth-Project-Id: admin  \
-H  X-Auth-Token: {SHA1}e87219521f61238b143fbb323b962930380ce022

3.3. 通過 nova-api 驗(yàn)證云主機(jī)類型

REQ: 
curl 
 -i  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e/flavors/2  \
 -X GET -H  Accept: application/json  -H  User-Agent: python-novaclient  \
 -H  X-Auth-Project-Id: admin  \
-H  X-Auth-Token: {SHA1}e87219521f61238b143fbb323b962930380ce022

3.4. 創(chuàng)建實(shí)例

REQ: 
curl 
 -i  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e/servers  \
 -X POST -H  Accept: application/json  \
 -H  Content-Type: application/json  \
 -H  User-Agent: python-novaclient  \
 -H  X-Auth-Project-Id: admin  \
 -H  X-Auth-Token: {SHA1}e87219521f61238b143fbb323b962930380ce022  \
-d  {server : { name :  ubuntu_test ,  imageRef :  cde1d850-65bb-48f6-8ee9-b990c7ccf158 ,  flavorRef :  2 ,  max_count : 1,  min_count : 1,  networks : [{ uuid :  cfa25cef-96c3-46f1-8522-d9518eb5a451}]}}

4. 從如何取得 token 說起

我們都知道 35357 是 keystone 的端口,問我為啥知道是 keystone,好吧,我是通過端口查到的。

恩,是的,就是 keystone,我們回到我們的主題,這里向 keystone 發(fā)送請求的時(shí)候,組織了這樣的一個(gè)數(shù)據(jù)

{
  auth : {
  tenantName :  admin , 
  passwordCredentials : {
  username :  admin , 
  password :  {SHA1}5705cc2e5fda0ab7529d5093c5e389fffe45d615 
 }
 }
}

把這個(gè)數(shù)據(jù)發(fā)給 keystone,目的是為了獲取一個(gè) token,就是一個(gè)鑰匙,有了它,我們后面的操作就可以憑借這個(gè)鑰匙暢通無阻了。那 keystone 是怎么處理的呢。

找到 keystone 的源碼

看到 token 了吧,嗯嗯,就在那里面

nano token/controllers.py

找到 Auth 類的 authenticate 方法

是不是跟上面給 keystone 的參數(shù)類似。這個(gè)方法一切順利的話,在最后它會返回一個(gè) token(鑰匙)。

keystone 回復(fù)的是什么呢。

REQ: 
curl \
 -i  http://ubuntu80:35357/v2.0/tokens  \ 
 -X POST -H  Accept: application/json  \
 -H  Content-Type: application/json  \
 -H  User-Agent: python-novaclient  \
-d  {auth : { tenantName :  admin ,  passwordCredentials : { username :  admin ,  password :  {SHA1}5705cc2e5fda0ab7529d5093c5e389fffe45d615 }}} 
INFO (connectionpool:259) Starting new HTTP connection (1): ubuntu80
DEBUG (connectionpool:390) Setting read timeout to 600.0
DEBUG (connectionpool:430)  POST /v2.0/tokens HTTP/1.1  200 1744
RESP: [200] {date :  Mon, 18 Jan 2016 01:58:37 GMT ,  vary :  X-Auth-Token ,  content-length :  1744 ,  content-type :  application/json ,  x-distribution :  Ubuntu}
RESP BODY: {access : { token : { issued_at :  2016-01-18T01:58:37.093849 ,  expires :  2016-01-18T02:58:37Z ,  id :  {SHA1}e87219521f61238b143fbb323b962930380ce022 ,  tenant : {enabled : true,  description :  Admin Tenant ,  name :  admin ,  id :  0e962df9db3f4469b3d9bfbc5ffdaf7e},  audit_ids : [RugmwI0_R3ysmpJ3zF8k4Q]},  serviceCatalog : [{endpoints_links : [],  endpoints : [{adminURL :  http://ubuntu80:9292 ,  region :  regionOne ,  publicURL :  http://ubuntu80:9292 ,  internalURL :  http://ubuntu80:9292 ,  id :  4794a2d722ab4f6bbda00d779c1410d1}],  type :  image ,  name :  glance }, {endpoints_links : [],  endpoints : [{adminURL :  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e ,  region :  regionOne ,  publicURL :  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e ,  internalURL :  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e ,  id :  a8ccc19100934fc1ae7c899dc5e17bdd}],  type :  compute ,  name :  nova }, {endpoints_links : [],  endpoints : [{adminURL :  http://ubuntu80:9696 ,  region :  regionOne ,  publicURL :  http://ubuntu80:9696 ,  internalURL :  http://ubuntu80:9696 ,  id :  656371fd3163415c95ff2fc0facbe5e1}],  type :  network ,  name :  neutron }, {endpoints_links : [],  endpoints : [{adminURL :  http://ubuntu80:35357/v2.0 ,  region :  regionOne ,  publicURL :  http://ubuntu80:5000/v2.0 ,  internalURL :  http://ubuntu80:5000/v2.0 ,  id :  4f1d53f12dc6485cb5816c83f68b7053}],  type :  identity ,  name :  keystone }],  user : {username :  admin ,  roles_links : [],  id :  96a7c834b3f8485c87d79df7b6480c92 ,  roles : [{name :  _member_}, {name :  admin}],  name :  admin },  metadata : {is_admin : 0,  roles : [ 9fe2ff9ee4384b1894a90878d3e92bab ,  fc2574382dd74936b1bc85cc2110c3c2]}}}

太亂了,整理一下,把回復(fù)的 json 抽出來

{
  access : {
  token : {
  issued_at :  2016-01-18T01:58:37.093849 , 
  expires :  2016-01-18T02:58:37Z , 
  id :  {SHA1}e87219521f61238b143fbb323b962930380ce022 , 
  tenant : {
  enabled : true, 
  description :  Admin Tenant , 
  name :  admin , 
  id :  0e962df9db3f4469b3d9bfbc5ffdaf7e 
 }, 
  audit_ids : [
  RugmwI0_R3ysmpJ3zF8k4Q 
 ]
 }, 
  serviceCatalog : [
 {  endpoints_links : [ ], 
  endpoints : [
 {
  adminURL :  http://ubuntu80:9292 , 
  region :  regionOne , 
  publicURL :  http://ubuntu80:9292 , 
  internalURL :  http://ubuntu80:9292 , 
  id :  4794a2d722ab4f6bbda00d779c1410d1 
 }
 ], 
  type :  image , 
  name :  glance 
 }, 
 {  endpoints_links : [ ], 
  endpoints : [
 {
  adminURL :  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e , 
  region :  regionOne , 
  publicURL :  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e , 
  internalURL :  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e , 
  id :  a8ccc19100934fc1ae7c899dc5e17bdd 
 }
 ], 
  type :  compute , 
  name :  nova 
 }, 
 {  endpoints_links : [ ], 
  endpoints : [
 {
  adminURL :  http://ubuntu80:9696 , 
  region :  regionOne , 
  publicURL :  http://ubuntu80:9696 , 
  internalURL :  http://ubuntu80:9696 , 
  id :  656371fd3163415c95ff2fc0facbe5e1 
 }
 ], 
  type :  network , 
  name :  neutron 
 }, 
 {  endpoints_links : [ ], 
  endpoints : [
 {
  adminURL :  http://ubuntu80:35357/v2.0 , 
  region :  regionOne , 
  publicURL :  http://ubuntu80:5000/v2.0 , 
  internalURL :  http://ubuntu80:5000/v2.0 , 
  id :  4f1d53f12dc6485cb5816c83f68b7053 
 }
 ], 
  type :  identity , 
  name :  keystone 
 }
 ], 
  user : {
  username :  admin , 
  roles_links : [ ], 
  id :  96a7c834b3f8485c87d79df7b6480c92 , 
  roles : [
 {
  name :  _member_ 
 }, 
 {
  name :  admin 
 }
 ], 
  name :  admin 
 }, 
  metadata : {
  is_admin : 0, 
  roles : [
  9fe2ff9ee4384b1894a90878d3e92bab , 
  fc2574382dd74936b1bc85cc2110c3c2 
 ]
 }
 }
}

看到了 token 中的 id({SHA1}e87219521f61238b143fbb323b962930380ce022)。后面的操作都是要帶上它。

5. 驗(yàn)證鏡像和云主機(jī)類型

在第 3 節(jié)中可以看到這兩條驗(yàn)證的請求,分別是驗(yàn)證鏡像和云主機(jī)類型

3.2. 通過 nova-api 驗(yàn)證鏡像

REQ: 
curl \
-i  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e/images/cde1d850-65bb-48f6-8ee9-b990c7ccf158  \
-X GET -H  Accept: application/json  \
-H  User-Agent: python-novaclient  \
-H  X-Auth-Project-Id: admin  \
-H  X-Auth-Token: {SHA1}e87219521f61238b143fbb323b962930380ce022

3.3. 通過 nova-api 驗(yàn)證云主機(jī)類型

REQ: 
curl \
-i  http://ubuntu80:8774/v2/0e962df9db3f4469b3d9bfbc5ffdaf7e/flavors/2  \
-X GET \
-H  Accept: application/json  \
-H  User-Agent: python-novaclient  \
-H  X-Auth-Project-Id: admin  \
-H  X-Auth-Token: {SHA1}e87219521f61238b143fbb323b962930380ce022

這兩條請求,是類似的,它們的代碼位于 nova.api.openstack.compute 中的 images.py 和 flavors.py 中的 Controller。

關(guān)于 nova 創(chuàng)建虛擬機(jī)的過程是怎樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計(jì)7219字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 海门市| 福贡县| 酒泉市| 三原县| 陇南市| 历史| 元氏县| 婺源县| 银川市| 柘荣县| 手游| 冷水江市| 府谷县| 通化县| 正安县| 电白县| 沅陵县| 临沂市| 九江市| 襄垣县| 嫩江县| 铜鼓县| 广汉市| 七台河市| 庄浪县| 伊宁县| 双流县| 宣恩县| 米林县| 孟连| 松桃| 波密县| 三门峡市| 砚山县| 福贡县| 滨州市| 略阳县| 呼和浩特市| 奉化市| 沅陵县| 贵溪市|