以前的文章中相繼介紹了OpenStack中關於Keystone以及Nova組件的概念、架構、原理等內容,那麼本文繼續講述OpenStack中的Glance組件的相關理論要點。html
對於Glance組件的理解仍是須要對OpenStack總體概念和組件構成有所掌握,而且在OpenStack這一大項目中,對於各個組件之間的聯繫的梳理仍是尤其重要的。筆者給出下面的幾篇文章,對於初學者而言理解起來有所幫助。mysql
友情連接:sql
OpenStack概念以及核心組件概述shell
OpenStack部署節點類型和架構 數據庫
OpenStack核心組件Novaapi
Glance是OpenStack中提供的服務的,用戶能夠上傳和發現與其餘服務一塊兒使用的數據資源。本文主要從Glance組件的概念及做用、主要的功能模塊、基本的架構組成、以及其支持虛擬機鏡像的格式類型四個方面進行闡述,最後對Glance項目作一個總結。服務器
對於Glance項目,筆者在以前的文章(參考上述連接文章)中有基本介紹,從中能夠了解Glance項目是OpenStack中用來經過Image Service(鏡像服務)的。架構
所謂Image能夠理解爲包含了這些基本操做系統和其餘軟件的模板,這種模板稱爲鏡像,若是對於鏡像還沒法理解的朋友能夠將其理解爲咱們生活中使用的光盤,或者暫時能夠認爲是副本(例如VMware中的快照)。下文會具體講述關於鏡像服務支持的鏡像文件格式類型。負載均衡
那麼OpenStack中爲何須要這項服務呢?或者說Glance項目的做用是什麼呢?
Glance項目主要負責Image(鏡像)的註冊和查詢傳送服務,這些Image能夠是用戶本身製做上傳的鏡像,也能夠是當前實例進行快照(能夠理解爲複製、備份的意思)後的副本,這兩種類型的鏡像均可以快速用於實例部署(能夠經過Dashboard操做)(這也體現出雲環境所帶來的便利與優點)。
那麼,用戶或管理員是如何使用Glance項目所提供的鏡像服務的呢?
OpenStack的用戶或管理員能夠經過Glance提供的RESTful API接口在多臺服務器上進行並行查詢和訪問Glance存儲的鏡像文件,這些鏡像文件默認狀況下存儲在部署Glance服務的主機目錄/var/lib/glance/images上。
而要理解Glance具體的服務請求響應和服務過程,首先須要瞭解它的功能模塊以及做用。
本小節將詳細介紹Glance的功能模塊組成,爲下面對Glance的基本架構理解作鋪墊。
glance-api是系統後臺運行的服務進程,可使用ps -ef | grep glance-api查看進程信息。對外提供REST API,用於響應image的查詢、獲取和存儲的調用,可是其並不會真正處理請求。而是將請求完成的操做交給相應的其餘模塊去完成。
所以,glance-api的做用就是接收請求,可是自身不處理請求,能夠聯想一下服務器集羣中負載均衡服務器的做用來類比理解。
查看進程代碼例:
[root@ct ~(keystone_admin)]# ps -e | grep glance-api 1256 ? 00:00:02 glance-api 2381 ? 00:00:00 glance-api 2385 ? 00:00:00 glance-api 2388 ? 00:00:00 glance-api 2391 ? 00:00:00 glance-api
glance-registry也是系統後臺運行的服務進程,可使用ps -e | grep glance-registry查看進程信息。該進程主要負責處理和存取image和metadata,例如image的大小和類型(下文會具體介紹)。
注意:registry是一個內部服務接口,不會暴露給普通用戶。
查看進程代碼例:
[root@ct ~(keystone_admin)]# ps -e | grep glance-registry 1253 ? 00:00:02 glance-registry 2365 ? 00:00:00 glance-registry 2366 ? 00:00:00 glance-registry 2367 ? 00:00:00 glance-registry 2368 ? 00:00:00 glance-registry
補充:官網給出說明,對於glance-registry以及其API可能將在S版本的開發時刪除,由於在Q版本中已經棄用了該服務組件。不過筆者所部署的R版本中是具備該組件的。
Glance中的數據庫,通常是MySQL,或者Mariadb以及SQLite數據庫。主要是用於保存image的metdata信息的。上篇文章筆者將實驗環境中OpenStack多節點部署的R版本的一鍵安裝的流程詳細給出了,其中在真正執行一鍵部署前是對應答文件進行修改的,並且是使用的sed工具修改了ip地址以及密碼(全局問題)。其中對密碼的修改仍是很是有必要的,假設您並未對密碼進行修改,那麼要使用數據庫時就須要查看一下用戶名和密碼了。
下面給出如何登陸該實驗的數據庫流程:
一、使用vi編輯器打開應答文件;
[root@ct ~]# source keystonerc_admin [root@ct ~(keystone_admin)]# vi openstack.txt
二、末行模式搜索MARIADB;
三、按"n"進行next查找操做,找到對應帳號及密碼;
四、登陸數據庫,查看有哪些數據庫,主要看一下glance數據庫中有哪些表
[root@ct ~(keystone_admin)]# mysql -uroot -pb437a94478394d62 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 6962 Server version: 10.1.20-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases; #數據庫清單 +--------------------+ | Database | +--------------------+ | cinder | | glance | | gnocchi | | information_schema | | keystone | | mysql | | neutron | | nova | | nova_api | | nova_cell0 | | nova_placement | | performance_schema | | test | +--------------------+ 13 rows in set (0.00 sec) MariaDB [(none)]> use glance; #使用glance數據庫 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [glance]> show tables; #查看glance數據庫中的表 +----------------------------------+ | Tables_in_glance | +----------------------------------+ | alembic_version | | image_locations | | image_members | | image_properties | | image_tags | | images | | metadef_namespace_resource_types | | metadef_namespaces | | metadef_objects | | metadef_properties | | metadef_resource_types | | metadef_tags | | migrate_version | | task_info | | tasks | +----------------------------------+ 15 rows in set (0.00 sec) MariaDB [glance]> exit Bye
經過對應的英文名稱也能夠驗證該服務的做用。
該服務是實際用於存儲的,由於glance自身並不存儲image的,而是將image存放在backend中的,通常是後端的服務器,專門負責存儲工做的,例如Swift、Cinder、Amazon的S三、Ceph存儲、Sheepdog等等。在官方文檔給出的glance架構中,是將這些不一樣的存儲類型都歸於glance_store源中(用於管理glance與各類存儲服務的交互的)。
具體如何規定某種類型的backend要經過對其配置文件進行設置,本文不進行深究,該配置文件默認爲:/etc/glance/glance-api.conf。參考下圖:
以上就是Glance組件中主要的功能模塊了。相較於Nova並不複雜,或許您已經能夠在腦海中有了Glance的架構圖了,下面就來介紹Glance的基本架構圖。
對於Glance基本架構,首先能夠參考官方文檔:Glance的基本架構
可是結合上述的主要構成,加之考慮到官方的架構圖對於初學者而言並不容易理解,所以筆者經過一個簡化版本的架構圖進行說明。
該架構看上去是否很是簡單,下面來簡述Glance的工做流程(這裏不考慮與其餘服務之間的交互):
一、glance-api接收到對應的服務請求,該服務進行響應;
二、此時glance-api服務將會對請求進行判斷,假設是與metadata相關的操做則會將該任務交給glance-registry進行處理,對應數據庫操做;若是是與image自身相關的操做,則會將請求發給對應的store backend進行處理,對應與之相連的存儲服務的相關操做。
前文屢次提到鏡像,那麼本小節就是來介紹有關Glance中支持的鏡像的格式類型的。先來談談鏡像格式這個詞是怎麼來的。這個問題涉及到虛擬化技術,簡單來說,不一樣的商家使用的虛擬化技術都不同,你們所熟悉的可能就是VMware,或者Hyper-V了,對應不一樣的虛擬化技術,那麼各個廠家對應虛擬機磁盤格式的定義就有着本身的標準。所以,不一樣鏡像格式的鏡像(可能就是一個文件)是因爲不一樣的虛擬化技術而產生的。
下面列出在OpenStack中常見的幾種鏡像格式。
RAW是一種沒有格式或裸格式的磁盤文件類型,屬於非結構化的鏡像格式。RAW對數據不作任何修飾和處理,直接保存最原始的狀態,因此在性能方面很是出色。因爲RAW格式保存原始數據,所以更容易和其餘鏡像格式進行轉換。
QCOW2是QCOW的升級版本,支持QEMU而且支持動態磁盤鏡像擴展和寫時複製的格式。其主要特性是磁盤文件大小能夠動態按需增加,而且不會佔用全部的實際磁盤空間大小。例如建立了100GB的QCOW2格式的磁盤,而實際只保存了2GB數據,那麼將只佔用了實際物理磁盤的2GB空間。與RAW相比,使用這種格式能夠節省磁盤容量,但性能較差。
VHD是微軟公司產品使用的磁盤格式。 Virtual PC(微軟早期虛擬化產品)和 Hyper-V使用的就是VHD格式 VirtualBox也提供了對VHD的支持。如需在 OpenStack上使用 Hyper-V類型的虛擬化,就應上傳VHD格式的鏡像文件
這個你們都比較熟悉了吧。使用過VMware的都見過。
VMDK是 VMware公司產品使用的磁盤格式,支持多種Hypervisor。目前也是一個開放的通用格式,除了 VMware自家的產品外,QEM和 Virtualbox也提供了對VMDK格式的支持。
VDI是Oracle公司的 VirtualBox虛擬軟件所使用的格式。
這個你們也比較熟悉了,不管按照Windows仍是Linux系統都見過。這是一種存檔數據文件在光盤上的格式,例如CD-ROM。
該鏡像格式是AWS的Kernel鏡像格式。
該鏡像格式是AWS的Ramdisk鏡像格式。
該鏡像格式是AWS的虛擬機鏡像格式。
補充:本文關於Glance的容器格式不作介紹。
本文主要講述OpenStack中核心組件之一的Glance項目。其中重點在於Glance所提供的服務、其基本架構和服務流程。Glance的關鍵還在於鏡像格式的類型,這裏強調的RAW與QCOW2,要了解它們之間的區別。
筆者能力有限,如有疏漏之處還望指出,感謝您的閱讀與支持!