O02六、Nova組件詳解

 
本節開始,咱們將詳細講解 Nova 的各個子服務。
 
前面架構概覽一節知道 Nova 有若干 nova-* 的子服務,下面咱們將依次學習最重要的幾個,今天先討論 nova-api 和 nova-conductor
 
nova-api
 
nova-api 是整個Nova 組件的門戶,全部對Nova 的請求都首先由 nova-api 處理。nova-api 向外界暴露若干 HTTP REST API 接口在 keystone 中咱們能夠查詢  nova-api 的Endpoints 。
 
stack@DevStack-Controller:~$ openstack endpoint list
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------+
| ID                               | Region    | Service Name | Service Type   | Enabled | Interface | URL                                        |
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------+
| 049dd4418f404aa2aeec29e40304efbe | RegionOne | placement    | placement      | True    | admin     | http://10.12.31.241/placement              |
| 056967662ca84ce4b7dab7e359589fdc | RegionOne | nova_legacy  | compute_legacy | True    | internal  | http://10.12.31.241:8774/v2/$(project_id)s |
| 0b9fcb6aebc646329c2bded5cb36c7dc | RegionOne | cinderv3     | volumev3       | True    | admin     | http://10.12.31.241:8776/v3/$(project_id)s |
| 2da3118ef0d34484a7713fd9ef56d5dd | RegionOne | keystone     | identity       | True    | public    | http://10.12.31.241/identity               |
| 2ff4467621f940d1976b4e16e17b4b04 | RegionOne | cinder       | volume         | True    | public    | http://10.12.31.241:8776/v1/$(project_id)s |
| 341516faf7e54e249cae4ec9c1d1c88d | RegionOne | neutron      | network        | True    | internal  | http://10.12.31.241:9696/                  |
| 391357dbc3524dad95449782a77b5337 | RegionOne | nova_legacy  | compute_legacy | True    | admin     | http://10.12.31.241:8774/v2/$(project_id)s |
| 54843389b1c649c88ca49fdee7719682 | RegionOne | keystone     | identity       | True    | admin     | http://10.12.31.241/identity_admin         |
| 58c5fe6431164f4d98c9250be679a657 | RegionOne | glance       | image          | True    | admin     | http://10.12.31.241:9292                   |
| 684ec2e22ad04efe9e1e8b540bae8f50 | RegionOne | placement    | placement      | True    | public    | http://10.12.31.241/placement              |
| 75f31134111c4b92b0fcc910f68a6edc | RegionOne | glance       | image          | True    | public    | http://10.12.31.241:9292                   |
| 7a2f035863b64b39ac2901cb88514bbb | RegionOne | cinderv2     | volumev2       | True    | internal  | http://10.12.31.241:8776/v2/$(project_id)s |
| 8525b0bef2b54eb38d5a0037c12f17c8 | RegionOne | cinderv3     | volumev3       | True    | internal  | http://10.12.31.241:8776/v3/$(project_id)s |
| 8724dd7cd92840d2963ae134c2eecf74 | RegionOne | keystone     | identity       | True    | internal  | http://10.12.31.241/identity               |
| 8ffdbac8f8b04932b40e747b70088a69 | RegionOne | nova_legacy  | compute_legacy | True    | public    | http://10.12.31.241:8774/v2/$(project_id)s |
| a85081f7ce584514b32fa316dfcfd2aa | RegionOne | cinderv2     | volumev2       | True    | public    | http://10.12.31.241:8776/v2/$(project_id)s |
| c96779b3470e40fb863b9700991b2aca | RegionOne | nova         | compute        | True    | public    | http://10.12.31.241:8774/v2.1              |
| ce9d8d864d6e42d3bf546701d0f58b45 | RegionOne | cinder       | volume         | True    | internal  | http://10.12.31.241:8776/v1/$(project_id)s |
| d06366d0bd2e47079a0cbf6bd5442190 | RegionOne | neutron      | network        | True    | admin     | http://10.12.31.241:9696/                  |
| d3c30e081aa04b1885f474691b63b4fd | RegionOne | cinderv2     | volumev2       | True    | admin     | http://10.12.31.241:8776/v2/$(project_id)s |
| d7e5984fb8ec4d719db22f17e2b586c2 | RegionOne | glance       | image          | True    | internal  | http://10.12.31.241:9292                   |
| dabe6791b50d492f8c916fe6fd513723 | RegionOne | neutron      | network        | True    | public    | http://10.12.31.241:9696/                  |
| de07de6e84d3425fb4d23dce70827c49 | RegionOne | cinderv3     | volumev3       | True    | public    | http://10.12.31.241:8776/v3/$(project_id)s |
| e2d270b641374843af533f33626f783f | RegionOne | placement    | placement      | True    | internal  | http://10.12.31.241/placement              |
| ed2772c4265048f1bf03ff55637eeb15 | RegionOne | cinder       | volume         | True    | admin     | http://10.12.31.241:8776/v1/$(project_id)s |
| fa7b4db6d8dd43df8c0639bedade9e45 | RegionOne | nova         | compute        | True    | admin     | http://10.12.31.241:8774/v2.1              |
| fc88f5f0bc184a57abff510c0c941db0 | RegionOne | nova         | compute        | True    | internal  | http://10.12.31.241:8774/v2.1              |
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------+
 
客戶端能夠將請求發送到Endpoints 指定的地址,向 nova-api 請求操做。固然,做爲最終用戶咱們不會直接發送 REST API 請求。OpenStack CLI ,Dashboard 和其餘須要跟 Nova 交換的組件會使用這些API。
 
Nova-api 對接收到 HTTP API 請求會作以下處理:
 
    一、檢查客戶端傳入的參數是否合法有效
    二、調用Nova 其餘子服務處理客戶端的HTTP請求
    三、格式化Nova其餘子服務返回的結果並返回給客戶端
 
nova-api 接收哪些請求?
 
簡單的說,只要是跟虛擬機生命週期相關的操做,nova-api 均可以響應。大部分操做均可以在Dashboard上找到。
 
好比在 Project -> Compute -> Instance 中,咱們能夠對 instance 進行以下操做,這些操做就是 nova-api 能夠執行的操做
 
 
OpenStack 用術語 Instance 來表示虛擬機,後面咱們將統一用這一術語
 
nova-conductor
 
nova-compute 須要獲取和更新數據庫中instance 的信息。但nova-compute 並不會直接訪問數據庫,而是經過 nova-conductor實現數據的訪問
 
 
這樣作有兩個顯著的好處:
 
    一、更高的系統安全性
    二、更好的系統伸縮性
 
更高的安全性,在OpenStack 的早期版本中,nova-compute 能夠直接訪問數據庫,但這樣存在很是大的安全隱患。由於 nova-compute 這個服務是部署在計算節點上的,爲了可以訪問控制節點上的數據庫,就必須在計算節點的 /etc/nova/nova.conf 中配置訪問數據庫的鏈接信息(地址、協議、用戶名、密碼等)
 
試想一下任意一個計算節點被黑客入侵,都會致使部署在控制節點的數據庫面臨極大風險。爲了解決這個問題,從G 版本開始, Nova引入了 一個新服務 nova-conductor ,將 nova-compute 訪問數據庫的所有操做房啊到 nova-conductor 中,並且 nova-conductor 是部署在控制節點上的。這樣就避免了nova-compute 直接訪問數據庫,增長了系統的安全性。
 
更好的伸縮性  nova-conductor 將 nova-com 與數據庫解耦以後還帶來另外一個好處:提升了 nova 的伸縮性。nova-compute 與 nova-conductor 是經過消息中間件交互的。
 
這種鬆散的架構容許配置多個 nova-conductor 實例。在一個大規模的 OpenStack 部署環境裏,管理員能夠經過增長 nova-conductor 的數量來應對日益增加的計算節點對數據庫的訪問。
相關文章
相關標籤/搜索