glance系列一:glance基礎

linhaifeng發表於2017-02-12

一 什麼是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 的支援是相同的。

V1版本的實現,具有glance-api和glance-registry兩個WSGI服務,二者都提供REST API,但需要強調的一點是:glance-registry提供的REST API是給glance-api使用的,即The registry is a private internal service meant for use by OpenStack Image service. Do not expose this service to users。

v2的實現就是將glance-registry整合到了glance-api內部,這麼做的好處是減少了一箇中間的處理環節

特別需要注意的是(點選檢視開發手冊)

在Newton版本中V1已經是過時的了,並且V1最終將被移除。

v1

 

v2

 

五 映象的資料存放

映象的資料包括:1.映象後設資料;2.映象本身即chunk

其中映象的後設資料是通過glance-registry儲存到資料庫中,而映象的chunk資料是通過Glance store Drivers存放到各種bakcend store中。


為了讓大家快速地理解glance,在配置glance時我們使用file作為後端,即將映象存放於本地檔案系統中,上傳或者儲存映象的目錄位於按照glance服務的機器上(控制節點),預設目錄是:/var/lib/glance/images/,我們應該確認該目錄有足夠的空間可以使用。

需要特別強調的一點是:fileh後端通常位於控制節點本身,因而這種後端並不適用於多節點部署。

在glance服務上週星期的執行很多程式來支援快取。在做glance叢集時要考慮使用複製服務來確保一致性和可用性,其他的週期性的程式包括auditors, updaters, and reapers。

六 映象的訪問許可權

參照第七部分Glance Domain Controller之後的Auth服務是用來控制映象的訪問許可權的,此處我們需要了解映象的訪問許可權都有:

  • public 公共的:可以被所有的 tenant 使用。
  • private 私有的/專案的:只能被 image owner 所在的 tenant 使用。
  • shared 共享的:一個非共有的image 可以 共享給另外的 tenant,可通過member-* 操作來實現。
  • protected 受保護的:protected 的 image 不能被刪除。

七 映象及任務的各種狀態

7.1 映象的狀態:

下圖表示glance在處理映象時如何從一個狀態移動到下一個狀態。

 

註解:

  • queued:沒有上傳 image 資料,只有db 中的後設資料。
  • saving:正在上傳 image data,當註冊一個映象使用POST  /images並且當前攜帶了一個x-image-meta-location頭,這個映象將不會進入saving狀態(映象的資料已經是可以獲得的,不能重傳)
  • active:當映象資料上傳完畢,映象就可以被使用了(可獲得的),此時處於active狀態
  • deactivated:表示任何非管理員使用者都無權訪問映象資料,禁止下載映象,也禁止像映象匯出和映象克隆之類的操作(請求映象資料的操作)。
  • killed:表示上傳過程中發生錯誤,並且映象是不可讀的
  • deleted:glance已經儲存了該映象的資料,但是該映象不再可用,處於該狀態的映象將在不久後被自動刪除。
  • pending_delete: 與deleted相似,glance還沒有清除映象資料,只是處於該狀態的映象不可恢復。

小結:

'queued' => ('saving', 'active', 'deleted')
'saving' => ('active', 'killed', 'deleted', 'queued')
'active' => ('queued', 'pending_delete', 'deleted')
'killed' => ('deleted')
'pending_delete' => ('deleted')
'deleted' => ()

7.2 任務的狀態

pending

任務已經保留,但是還沒一開始處理

processing

正在執行

success

執行成功

failure

表示在執行任務的過程中發生了錯誤,並且不能繼續執行

八 glance包含的元件

對照第四部分的圖示,讓我們來詳解了解下glance的元件構成

glance-api
接受api請求,並提供相應操作,包括髮現,檢索,儲存
glance-registry
儲存、處理、檢索映象的後設資料,後設資料包括例如映象大小、型別等
Database
可以選擇自己喜歡的資料庫儲存映象後設資料,大多數使用 MySQL 或則 SQLite.
Storage repository for image files
指的是儲存映象檔案的倉庫或者稱為backend,可以是:
1.本地檔案系統(或者任何掛載到glance-api控制節點的檔案系統)
2.物件儲存Object Storage(swift)
3.塊儲存RADOS(ceph)
4.VMware資料儲存
5.HTTP
Metadata definition service
為廠商、管理員、openstack其他服務提供一個公用的API,並且使用者可以自定義自己的後設資料(有意義的)。
這個後設資料功能非常強大,可以被用在不同型別的資源
image 映象本身
artifacts
volumes 卷
flavors 套餐
aggregates 主機聚合
具體的可以拿主機聚合舉例,
主機集合即多臺物理主機的集合體,這個集合中的物理主機具有一個或多個硬體方面的優勢,比如說記憶體大,固態磁碟等,專門用來部署資料庫服務。

我們可以製作一個映象,然後在該映象內定義好後設資料:繫結上述的主機結合。這樣凡是用到該映象安裝系統的虛擬機器,都會被指定到該集合內,然後從該集合內選出一臺物理機建立出虛機.

九 glance與openstack其他服務的關係

對glance來說,它的客戶端Glance Cli可以是:

1.glance的命令列工具

2.Horizon

3.nova

同keystone一樣,glance是Iaas的另外一箇中心(見圖),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之間的通訊。

Glance 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

十二 常見的映象屬性及設定

當我們向glance中新增一個映象,我們指定一些常用的映象屬性,這對於使用者來說是非常有用的

在glance中常用映象屬性也被描述成一個JSON引數,可以在glance原始碼的etc/schema-image.json檔案中檢視

常用屬性如下:

architecture

作業系統架構,修改方式如下

openstack image set IMG-UUID --property architecture=x86_64

更多猛擊這裡

instance_uuid

是後設資料,可用於記錄與此映象關聯的例項。(僅提供資訊,不建立例項快照。)

kernel_id

The ID of image stored in Glance that should be used as the kernel when booting an AMI-style image.

ramdisk_id

The ID of image stored in Glance that should be used as the ramdisk when booting an AMI-style image.

os_distro

作業系統的發行版本 

詳情點選這裡

os_version

廠商指定的作業系統版本

十三:後設資料定義的概念

猛擊這裡

 

 

相關文章