您好,登錄后才能下訂單哦!
? 上篇文章我們從概念到原理,層層遞進深入講述了Keystone項目,而本文旨在繼續介紹OpenStack核心組件之一的Nova組件項目。
? 相對于Keystone項目,Nova項目是作為OpenStack這個大開源項目最早也是最成熟的項目,從這一層面上也體現出Nova項目所提供的計算服務從始至終都是OpenStack最為核心的部分,筆者在之前的文章中談到OpenStack這一開源項目所提供和管理的三大資源就是計算、網絡和管理。這同樣也是云計算的核心部分。
? 從筆者個人理解和觀點來看的話,對于OpenStack而言,其真正的靈魂(可以理解為OpenStack中組件的復雜程度、使用概率以及故障出現概率等方面)一是在于宏觀(這里“宏觀的意思是相對早期版本的OpenStack平臺而言”)的Nova(計算服務),二是在于相對其他服務最為復雜的Neutron網絡服務(之后的文章也會針對該組件進行詳細介紹),這里不包括CEPH分布式存儲,因為CEPH本身就是可以認為是一個獨立的大項目,其作用不僅僅是OpenStack中Swift(對象存儲服務)的高效分布式集群存儲的替代,還包括與其他技術的結合和支持等作用。但是無論在實驗環境還是生產環境部署OpenStack云平臺基本上選擇CEPH作為分布式存儲服務,當然在此個人補充一下,若是要進行OpenStack實驗環境部署的話,對PC所配的硬件資源要求還是比較高的,包括CPU、內存、存儲(最好是SSD),筆者所配的基礎硬件資源是i79代CPU、32G內存(三級緩存達到9M)、1T的SSD M.2接口的固態盤,網絡是家用百兆寬帶,當然在實驗環境中未必需要過高的配置,可以相對降低一些要求,不過如果要想體驗感較好的話還是高配比較好,如果是決定從事這一方向的工作人員,可以購置服務器來模擬生產環境,這對初學者并不推薦哈。
?閑話就不再多說了,接下來筆者將從其概念概述、主要組件、架構模式、工作原理四個方面介紹Nova項目。
? Nova項目,作為OpenStack核心項目,提供著十分重要的計算服務,雖說在其發展過程中,部分核心組件在后來獨立成為其他的核心項目及服務,但是Nova自身的核心地位也是非常之高的,因為了解OpenStack基礎理論的朋友都知道OpenStack作為一種IaaS(基礎設施即服務)的云計算服務,其最為核心的服務資源就是計算、存儲和網絡,而計算服務居于首位,在OpenStack云平臺部署上,則正是通過Nova項目實現其計算服務的。
? 之所以前言部分從宏觀角度說Nova項目對于OpenStack是最核心也的項目之一是有其具體原因的。在早期的OpenStack版本中,項目并不是一次規劃好的,而Nova項目在初期就將存儲和網絡包含于自身,及nova-volume和nova-network模塊,即后期獨立出的Cinder(塊存儲服務)和Neutron(網絡服務)。
? Nova項目從最初為云供應商提供實現IaaS服務的解決方案的初衷,到如今聚焦于大規模可擴展、高可用、可彈性伸縮服務和自助服務的目標,Nova一直在被優化改進升級。在2010年OpenStack項目成立之初,Nova項目主要分為Nova-Compute、Nova-volume和Nova-network三大功能模塊。在2012年9月OpenStack的Folsom版本發行時,OpenStack社區才將Nova-volume和Nova-network獨立出來分別構建了Cinder和Quantum項目(后因商標原因更名為Neutron項目)。
? 綜上而言,Nova作為核心項目,在Linux服務器上作為一組守護程序運行。當然也需要依賴其他服務從而實現功能,下面講解原理會著重介紹。其具體的功能主要是:負責管理實例虛擬機的生命周期、網絡管理、存儲卷管理。Nova支持創建虛擬機、裸機服務器(通過使用ironic),并且Nova計算資源的使用限額以項目為單位進行限制。
?
? Nova同Keystone一樣,有組成自身的功能模塊。其是由負責不同功能的服務進程構成,Nova對外提供的服務接口為REST API,其內部組件模塊之間的通信基于RPC(遠程過程調用)消息傳遞機制的。
? 下面來看一下組成Nova的一些主要組件:
? Nova API服務組件。接收并響應最終用戶的計算API調用請求,當其接收到請求后,通常將請求轉發給Nova的其他組件進行處理,例如Nova-scheduler。
? 其遵循特定的策略并初始化大部分的編排操作,例如創建實例。
? Nova API服務組件。Nova-API-Metadata服務主要是用于接收來自實例的元數據請求。
? Nova核心服務組件。Nova-Compute是一個通過Hypervisor API創建和終止實例的工作進程(在后面的架構中將涉及Hypervisor)。先前筆者對OpenStack節點類型介紹過程中有所提及,當時考慮到理解程度問題,沒有細說。這里做一下詳細說明。
? 在我們部署OpenStack的計算服務時,通常選擇將Nova-Compute單獨部署在支持虛擬化的物理服務器上,我們將這個物理服務器稱作為計算節點。而常見的Hypervisor API有支持KVM/QEMU虛擬化引擎的Libvirt API、適用于XenServer / XCP虛擬化引擎的XenAPI以及支持VMware虛擬化引擎的VMware API。一般情況下,OpenStack默認使用的是KVM虛擬化引擎,因此在Nova-Compute中最常用的還是Libvirt API。
? 總之,Nova-Compute主要功能就是接收來自消息隊列的請求,然后執行對應的系統命令的。例如啟動KVM實例并更新其在數據庫中的狀態。
? Nova核心服務組件。主要負責從隊列中獲取虛擬機實例請求,并確定其在哪臺計算節點主機上運行。其采用的是過濾計算節點算法,即根據計算節點的CPU、內存和磁盤等參數進行篩選過濾。用戶也可以通過自定義編輯nova.conf文件來指定過濾算法。
? Nova核心服務組件。Nova-Conductor 主要是為了使Nova-Compute服務與數據庫(云數據庫)之間進行交互。也就是說,有了Nova-Conductor,在實際運行中,消除了Nova-Compute服務對云數據庫的直接訪問,而是通過Nova-Conductor實現對數據庫的訪問。
? 此外,該組件支持水平擴展到多個節點上同時運行(Nova在水平擴展時采用的是Cell的部署方式),但是不能將之部署到運行Nova-Compute的計算節點上,否則無法實現Nova-Compute與數據庫之間的隔離。
? Nova核心服務組件。Nova-Cert是服務器守候進程,主要為基于X509認證的Nova Cert提供服務。
? 屬于虛擬機控制臺服務。主要是提供用于通過VNC連接訪問正在運行的實例的代理。支持基于瀏覽器的NoVNC客戶端。
? 屬于虛擬機控制臺服務。主要提供用于通過SPICE連接訪問正在運行的實例的代理。支持基于瀏覽器的HTML5客戶端。Spice是Redhat開源虛擬化桌面的主要組件之一,能夠提供與物理桌面完全相同的最終用戶體驗,Open-Stack官方文檔默認使用的虛擬機桌面訪問方式為NoVNC,如果用戶需要開啟SPICE協議,則需要將NoVNC關閉。
? Nova之外的核心組件。組件進程間消息交換傳遞的中心,一般用RabbitMQ實現。
? Nova之外的核心組件。存儲基礎架構中對象的創建時和運行時的狀態,包括:
? 從理論上講,OpenStack Compute可以支持SQLAlchemy支持的任何數據庫。常見的數據庫是用于測試和開發工作的SQLite3,MySQL,MariaDB和PostgreSQL。
? 溫馨提示:對于初學者理解Nova組件,重點在于理解前面的6個組件。
? 上兩小節主要介紹了Nova項目的概念作用以及組成,本小節來看一下這些組成之間的聯系,即Nova的邏輯架構示意圖。
? 該架構圖表示的是OpenStack 提供的計算服務,該服務是由Nova項目的各個功能組件模塊一起支持的。
? 其中大部分組件在上一小節進行了介紹,其中,nova-consoleauth也是屬虛擬機控制臺的服務,主要為虛擬機控制臺連接提供認證授權服務的,萬萬不要將其與右上角的nova-console混淆,nova-console是XenAPI風格的控制臺服務,對于多數VNC代理軟件,該組件幾乎不再使用。
? 針對上圖可能對其中右下角的Hypervisor有所迷惑。同上文提及的Cell一樣,這里不可能三言兩語將這兩者解釋清楚,筆者在這里主要針對其作用進行說明。
? Hypervisor呢,是運行于物理服務器和操作系統之間的軟件層,主要是調度客戶機系統對共享的物理硬件資源的使用請求,是虛擬化的基礎,也是云計算的核心基礎。所以上述的Nova-Compute組件就是依賴于Hypervisor API的調用來實現實例的創建以及終止的。
? 而cell呢,該功能模塊主要是為了解決大規模Nova計算節點部署過程中的集群瓶頸問題,該問題涉及到傳統集群架構與云計算架構之間的區別了,有興趣的朋友可以進行資料查閱。該問題就是共享消息隊列系統的性能在大規模的計算節點部署集群(上百個,500個以上)大大降低。而有了Cell模塊,就基具備支持OpenStack計算節點水平擴展和大規模部署的能力,本文重點并不再次,關于Cell的具體原理和實現的過程在這里就不做詳細介紹了。
? 此外,通過該架構邏輯圖,可以發現,在Nova通過相應的服務的時候,各個組件服務之間的通信都是經過QUEUE實現的,一般默認是RabbitMQ。其實,通過前面的幾篇文章,不難發現一些規律(個人的理解或者說是發現),在OpenStack中,大多數情況下,通信一般默認使用的的是消息隊列進行的,數據庫默認為Mariadb數據庫,調用接口一般基于REST風格的RESTful API進行調用。
? 上圖僅僅是Nova項目自身的架構圖,那么Nova和其他服務是怎樣的架構呢?其實上篇文章在講述Keystone工作響應流程時所舉案例包含了Nova所提供的服務功能。這里不多敘述。
? 這里穿插一些關于Cinder和Neutron項目的結構和組件來說明一下Nova與這兩者之間的邏輯架構。
? 為什么將這三者的邏輯架構在這里給出呢?一方面是加深對Nova的理解,理解其與其他一些項目之間的聯系,例如通信方式等等,另一方面就是Nova的發展了,前文說過最初的OpenStack項目,Nova是包含塊存儲和網絡的,如今將這二者獨立出來,成為兩個項目,分別對應OpenStack Block Service 和 OpenStack Networking服務。
? 如果對Cinder和Neutron組件不熟悉也沒關系,這邊主要理解上圖中的三根虛線的含義即可。第四小節將會通過案例來簡述Nova的工作原理。
? 其中,最上面的一條虛線表示的是Nova-Compute與網絡服務Neutron-server之間的通信關系,Neutron-server是OpenStack網絡服務提供相應的API作為訪問Neutron的入口,這表示Nova需要使用Neutron提供的網絡服務為虛擬機實例之間和虛擬機實例與外網之間的通信提供服務;
? 下面兩條虛線表示的是Nova服務與塊存儲服務之間的通信方式,由cinder中volume和scheduler提供接口與之通信,這表示Nova需要使用Cinder服務提供塊存儲服務作為虛擬機實例的磁盤。筆者后期持續更新對各個核心項目的文章中,將會詳細介紹Cinder以及Neutron項目等其他項目的相關知識。
?
溫馨提示:AMPQ :高級消息隊列協議,可以理解為一種通信協議。
? 其實上文也多多少少涉及了Nova的工作流程以及些許原理,這里通過一個案例結合圖示來講述理解Nova內部的工作機制。
? 假設需要用戶需要創建一個虛擬機的場景,這里涉及到的其他項目提供的服務就盡量跳過了,方便理解:
? 通過上面的案例將Nova的組件之間的關系梳理的同時,針對其內部工作原理進行理解。
? 不過在實際的OpenStack系統運行過程中,Nova計算服務是需要和其他的服務進行交互的,例如通過與認證授權服務Keystone交互從而實現身份權限的識別認證過程,并通過OpenStack的鏡像服務Glance為實例提供系統鏡像,而用戶和云管理員則通過OpenStack的控制面板服務Horizon與Nova進行交互等等。
? 本文主要介紹了Nova項目的概念概述、發展歷程,詳細介紹了Nova中核心組件的概念以及作用,給出了Nova自身的邏輯架構圖以及其與塊存儲服務和網絡服務的邏輯架構關系,最后通過一個簡單案例介紹Nova內部的工作原理和工作過程。
?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。