什么是Glance
glance即image service(鏡像服務),是為虛擬機的創建提供鏡像服務
為什么要有Glance
我們基於openstack是構建基本的Iaas平台對外提供虛機,而虛機在創建的時候必須為其選擇操作系統,glance服務器就是為該選擇提供不同的系統鏡像
Glance的功能
glance服務使用戶能夠發現,注冊,檢索虛擬機的鏡像,它提供一個能夠查詢虛擬機鏡像元數據和檢索真實鏡像的REST API
具體的:REST API的體現就是一個URI,而在glance中通過一個URI地址來唯一標示一個鏡像的形式如下
<Glance Server Location>/v1/images/<ID>
<Glance Server Location>:glance服務安裝的位置
/v1:使用v1版本
/images:請求的類型為鏡像
/<ID>:一個uuid,在glance中全局唯一
Glance的兩個版本
在Newton之前的版本中,glance支持兩種REST API V1和V2,兩者區別還是很明顯的:
1.V1只提供了基本的image和member操作功能:創建鏡像、刪除、下載、列表、查詢、更新,以及鏡像tenant成員的創建、刪除和列表。
2.V2除了支持V1的所有功能外,主要還增加了如下功能:
鏡像location的添加、刪除和修改等操作
metadata namespace操作
image tag操作
3.V1和V2對image store的支持是相同的。
Newton版本中V1已經屬於老版本了,以后終將被移除
鏡像上傳的存儲方式有多種:Swift、File system、 Amazon S3、HTTP、Ceph、Cinder等
鏡像的數據存放
鏡像的數據包括:鏡像元數據和鏡像本身
其中鏡像的元數據是通過glance中的一個glance-registry模塊保存的數據庫中,而鏡像本身則是通過glance中的Glance store Divers存放到各種存儲設備中。
這次試驗我使用的是file system作為后端的存儲,即將鏡像存放到本地文件系統中。上傳或存儲鏡像的目錄位於安裝glance服務的機器上的默認目錄:/var/lib/glance/images/,我們應該確認該目錄有足夠大的空間可以使用。
需要特別強調的一點是:file后端通常位於控制節點本身,因而這種后端並不適用於多節點部署
鏡像的訪問權限
public 公共的:可以被所有的項目使用。
private 私有的/項目的:只能被image owner所在的project使用(即只能在一個項目中使用)
shared 共享的:一個非共享的image可以共享給其他project。
protected 受保護的:protected的image不能被刪除
鏡像及任務的各種狀態
下圖為官網圖
注解:
queued:沒有上傳image數據,只有db中的元數據
saving:正在上傳image data。
active:當鏡像上傳完畢,鏡像就可以被使用,此時屬於active
deactivated:表示任何非管理員用戶都無權訪問鏡像數據,禁止下載鏡像,也禁止鏡像導出和鏡像克隆之類的操作(請求鏡像數據的操作)
killed:表示上傳過程中發生錯誤,並且鏡像不可讀
deleted:glance已經保存了該鏡像的數據,但是該鏡像不在可用,處於該狀態的鏡像將在不久后被自動刪除
pending_delete:與delete想說,glance還沒有清除鏡像數據,處於該狀態的鏡像不可恢復
PS:上面的一些含義簡單了解下就可以。在命令行中不常見,只有在安裝的horizon后出現圖形化界面后會有顯示
glance包含的組件
glance-api
接受api請求,並提供相應操作,包括發現、檢索、存儲
glance-registry
存儲、處理、檢索鏡像的元數據,元數據包括例如鏡像大小、類型等
Database
可以選擇組件喜歡的數據庫存儲進行元數據,大多數使用MySQL或者SQLite.
Storage repository for image files
指的是存儲鏡像文件的倉庫或者稱為backend,可以是:
1本地文件存儲(或者任何掛載到glance-api控制節點的文件系統)
2.對象存儲Object Stroage(Swift)
3.塊存儲RADOS(ceph)
4.VMware數據存儲
5.HTTP
Glance與Openstack與其他服務的關系
對glance來說,他的客戶端Glance Cli可以是:
1.glance的命令行工具
2.Horizon
3.nova
同keystone一樣,glance是Iass的另外一個中心,keystone是關於權限的中心,而glance是關於鏡像的中心。glance可以被終端用戶或者nova服務訪問:接受磁盤或者鏡像的API請求和定義鏡像元數據的操作
Glance工作流程詳解
管網圖
注解:
A client
使用glance服務的應用程序,可以是命令行工具,horizon,nova等
REST API
glance是一個client-server架構,提供一個REST API,而使用者就是通過REST API來執行關於鏡像的各種操作
Glance Domain Controller
glance內主要的中間件實現,相當於調度員,作用是將glance內部服務的操作分發到各層(Auth認證,Notifier,Policy策略,Quota,Location,DB數據庫連接)具體任務由每個層實現。
第一層:Auth
驗證鏡像自己或者它的屬性是否可以被修改,只有管理員和鏡像的擁有者才可以執行修改操作,否則保存。
第二層:Property protection
由glance domain controller控制的七層組件
可選層,只有在glance的配置文件中設置了property_protection_file參數才會生效,它提供了兩種類型的鏡像屬性:
1.核心屬性,是在鏡像參數中指定的;
2元數據屬性,是任意可以被附加到一個鏡像上的key/value
該層的功能就是通過調用glance的public API來管理對meta屬性的訪問,你也可以在它的配置文件中限定這個訪問
第三層:Notifier
把下列信息添加到queue隊列中
1.關於所有鏡像修改的通知
2.在使用過程中發生的所有的異常和警告
第四層:Policy
1.定義操作鏡像的訪問規則rules,這些規則都定義在/etc/policy.json文件中
2.監控rules的執行
第五層:Quota
如果針對一個用戶,管理員為其規定好他能夠上傳的所有鏡像的大小配額,此處的Quota層就是用來檢測用戶上傳是否超出配額限制:
1.如果沒有超出配額限制,那么添加鏡像的操作成功
2.如果超出了配額,那么添加鏡像的操作失敗並且報錯。
第六層:Location
與Glance Store交互,如上傳下載等。由於可以有多個存儲后端,不同的鏡像存放的位置都被該組件管理。
1.當一個新的鏡像位置被添加時,檢測該URI是否正確。
2.當一個鏡像位置被改變時,負責從存儲中刪除該鏡像。
3.阻止鏡像位置的重復
第七層:DB
1.實現了與數據庫API的交互
2.將鏡像轉換為相應的格式以記錄在數據庫中。並且從數據庫接收的信息轉換為可操作的鏡像對象。
Registry Layer
可選層,用來組織安全
通過使用這個單獨的服務,來控制Glance Domain Controller與Glance DB之間的通信
Clance DB
glance服務使用同一一個核心庫Glance DB,該庫對glance內部所有依賴數據庫的組件來說是共享的。
Glance Store
用來組織處理Glance和各種存儲后端的交互
所有有的進行文件操作都是通過調用Glance Store庫執行的,它負責與外部存儲端和(或)本地文件存儲系統的交互。
Glance Store提供了一個統一的接口來訪問后端的存儲
Disk和Container格式
當我們添加一個鏡像到glance時,你必須指定虛擬機的disk格式和container格式,關於disk格式請自行研究kvm等虛擬。
disk和container格式是每個部署的基本配置,常用的格式如下:
1.Disk Format
不同的虛擬化應用的廠針有不同的虛擬機鏡像的disk格式:
-
raw
This is an unstructured disk image format
-
vhd
This is the VHD disk format, a common disk format used by virtual machine monitors from VMware, Xen, Microsoft, VirtualBox, and others
-
vhdx
This is the VHDX disk format, an enhanced version of the vhd format which supports larger disk sizes among other features.
-
vmdk
Another common disk format supported by many common virtual machine monitors
-
vdi
A disk format supported by VirtualBox virtual machine monitor and the QEMU emulator
-
iso
An archive format for the data contents of an optical disc (e.g. CDROM).
-
ploop
A disk format supported and used by Virtuozzo to run OS Containers
-
qcow2
A disk format supported by the QEMU emulator that can expand dynamically and supports Copy on Write
-
aki
This indicates what is stored in Glance is an Amazon kernel image
-
ari
This indicates what is stored in Glance is an Amazon ramdisk image
-
ami
This indicates what is stored in Glance is an Amazon machine image
2.Container Format
容器container格式是指虛擬機映像是否包含一個文件格式,該文件格式還包含有關實際虛擬機的元數據。
需要注意的是:容器格式字符串在當前並不會被glance或其他OpenStack組件的使用,所以如果你不確定,簡單的將容器格式指定bare是安全的。
你可以設置如下容器格式:
-
bare
This indicates there is no container or metadata envelope for the image
-
ovf
This is the OVF container format
-
aki
This indicates what is stored in Glance is an Amazon kernel image
-
ari
This indicates what is stored in Glance is an Amazon ramdisk image
-
ami
This indicates what is stored in Glance is an Amazon machine image
-
ova
This indicates what is stored in Glance is an OVA tar archive file
-
docker
This indicates what is stored in Glance is a Docker tar archive of the container filesystem