OpenStack 入門 深入理解 Nova、Glance、Neutron
文/圖:何曉龍
在上一篇文章「OpenStack Newton 極速部署、快速入門」中,已經通過一個簡單的 Instance,接觸到了 OpenStack 的 Horizon 及其核心模組,第一個 Instance 執行時至少直接用到了 Nova、Glance 和 Neutron 這三大核心組件,只不過我們是通過 Web 界面建立的 Instance,對它們似乎沒有什麼概念,下面就開始以命令行的方式深入到上述這些核心組件,並且架設一個相同的全新 Instance,從而更加深入地掌握。
Nova、Neutron 和 Glance 是 OpenStack 核心組件,其中 Nova 是新星的意思,是 OpenStack 三大組件的中心,因為其他兩大組件如離開了 Nova,幾乎沒什麼價值。Nova 負責虛擬機器生命週期管理,如建立、管理、控制、安排及遷移虛擬機器 Instance(預設為 KVM 虛擬機器),還可以實現和 Amazon EC2 在 API 級別上的兼容。
Nova 核心組件
在 OpenStack 先前的版本,Nova 組件除了負責運算功能之外,還肩負網路的規劃和管理,稱之為 Nova-Network。隨著網路功能的逐步複雜和龐大,逐漸將網路功能單獨分出一個組件,開始叫 Quantum(量子),後來改名為 Neutron(中子)。Newton 中 Nova 的版本為 6.0,可以使用如下命令取得。
nova –version (ENTER)
6.0.0
版本很重要嗎?當然了,因為版本直接決定著功能和操作。Nova 由很多服務構成,可以執行如下命令探索(表1)。
nova service-list (ENTER)
名稱 | 功能 |
---|---|
nova-cert | 用於證書管理並負責身份認證。 |
nova-consoleauth | 為 VNC 代理提供 Token 認證服務。 |
nova-compute | 實現虛擬機器的生命週期管理。 |
nova-scheduler | 負責決定虛擬機器建立在哪台主機或計算節點上。 |
nova-conductor | 根據請求讀取資料庫,預設資料庫是 MariaDB。 |
表1:構成 Nova 的服務。
當中有一個叫 nova-api 的服務在 service-list 中並沒有列出,但此 API 是外部存取 Nova 的唯一途徑,遵循 RESTful 架構標準。所有對 Nova 運算資源的操作請求都以統一資源標識符 URI (Uniform Resource Identifier) 的形式發送給 Nova-API 進行處理,每個 URI 都是 Web 中的唯一標識,從表面看 URI 和大家常用的 URL 幾乎一樣,但 URI 更靈活,因為 URI 既是資源地址,又是資源唯一名稱,畢竟 URL 是 URI 的子集。Nova API 支援 OpenStack Compute API、Amazon Elastic Compute Cloud (Amazon EC2)API 和面向 admin 用戶的 Admin API。其他 OpenStack 組件大都採用了類似的設計,並給出了相應 API 的 URI,可以參閱第一個 Instance 執行成功執行的第一條 OpenStack 命令 openstack endpoint list,在返回結果中定位到 URI,那就是大家可以看到的請求入口。
技術常識:什麼是 RESTful? REST(Representational State Transfer,表述性狀態轉移)是目前一種流行和成熟的軟體規範和原則,尤其是實現 Web 服務及 API,如果一個架構符合 REST 規範和原則,就稱它為 RESTful 架構。RESTful 架構的核心概念就是資源,在 RESTful 的環境中,網路上的所有東西都是資源,每一個資源都對應一個獨一無二的 URI,並用它進行標記。用大家常用的上網這個過程為例,其實就是運用網站資源的 URI,取得網站各種資源,並按照一定方式呈現的過程。這就需要伺服器保存了資源的各種表現形式,客戶端可以使用 HTTP 的幾個基本操作,包括 GET、POST、PUT 等使服務端上的資源發生狀態轉化。此外 Google、Github 和 Amazon 等著名型互聯網企業的 API,也大多採用 RESTful 規範和原則架設。 |
技術常識:什麼是 WSGI? WSGI(Web Server Gateway Interface,Web 伺服器網關接口)是 Python 語言中所定義的 Web 伺服器和 Web 應用程式之間或框架之間的通用接口標準。可以將 WSGI 視為一座橋樑,其一端稱為服務端或網關端,另一端稱為應用端或者框架端,WSGI 的作用就是在協議之間進行轉化。WSGI 將 Web 組件分成了三類:Web 伺服器 (WSGI Server)、Web 中間件 (WSGI Middleware) 與 Web 應用程式 (WSGI Application)。Web Server 接收 HTTP 請求,封裝一系列環境變量,按照 WSGI 接口標準運用註冊的 WSGI Application,最後將回應送返給客戶端。 |
OpenStack 基於 RESTful 架構,並通過 Python 語言的 WSGI 接口,實現 nova-api、cinder-api 以及其他組件相應 API 接口與服務。雖然不是 OpenStack 開發者,但要知道 OpenStack 為開發者提供了開放的 API 以及組件大致的架構,可以方便企業用戶按自己的業務需求對 OpenStack 進行二次開發,更可深入對應用的理解。OpenStack 每個功能組件都採用類似架構,提供 RESTful 架構的API作為對外接口,OpenStack 的 API 服務進程接收到客戶端的 HTTP 請求時,Rails 路由模組就會將請求的 URL 定位到相應的資源,並路由到合適的操作函數實現所請求的功能。