Glance鏡像服務
它在OpenStack中的項目名稱為Glance。在早期的OpenStack版本中,Glance只有管理鏡像的功能,並不具備鏡像存儲功能。現在,Glance已發展成為集鏡像上傳、檢索、管理和存儲等多種功能的OpenStack核心服務。
鏡像
鏡像的英文為lmage,又譯為映象,通常是指一系列文件或一個磁盤驅動器的精確副本。鏡像文件其實和ZIP壓縮包類似,它將特定的一系列文件按照一定的格式制作成單一的文件,方便用戶下載和使用。
比如:Ghost是使用鏡像文件的經典軟件,其鏡像文件可以包含更多信息,如系統文件、引導文件、分區表信息等,這樣鏡像文件就可以包含一個分區甚至是一塊硬盤所有信息。Ghost可基於鏡像文件快速安裝操作系統和應用程序。
例如:VMware的虛擬機模板
鏡像服務
鏡像服務就是用來管理鏡像的,讓用戶能夠發現、獲取和保存鏡像。在OpenStack中提供鏡像服務的是Glance,其主要功能如下:
·查詢和獲取鏡像的元數據和鏡像本身
·注冊和上傳虛擬機鏡像,包括鏡像的創建、上傳、下載和管理
·維護鏡像信息,包括元數據和鏡像本身
·支持多種方式存儲鏡像,包括普通的文件系統、Swift、Amazon S3等
·對虛擬機實例執行創建快照命令來創建新的鏡像,或者備份虛擬機的狀態
lmages API的版本
Glance提供的RESTful API目前有兩個版本:API v1和API v2
·v1只提供基本的鏡像和成員操作功能,包括鏡像創建、刪除、下載、列表、詳細信息查詢、更新,以及鏡像租戶成員的創建、刪除和列表。
·v2除了支持v1的所有功能外,主要增加了鏡像位置的添加、刪除、修改,元數據和名稱空間操作,以及鏡像標記操作
兩個版本對鏡像存儲支持相同,v1從N版開始已經過時,遷移路徑使用v2進行替代
鏡像格式
虛擬機鏡像文件磁盤格式
·raw:無結構的磁盤格式
·vhd:該格式通用於VMware、Xen、VirtualBox以及其他虛擬機管理程序
·vhdx:vhd格式的增強版本,支持更大的磁盤尺寸
·vmdx:一種比較通用的虛擬機磁盤格式
·vdi:由VirtualBox虛擬機監控程序和QEMU仿真器支持的磁盤格式
·iso:用於光盤(CD-ROM)數據內容的檔案格式
·ploop:由Virtuozzo支持,用於運行OS容器的磁盤格式
·qcow2:由QEMU仿真支持,可動態擴展,支持寫時復制(Copy on Write)的磁盤格式
·aki:在Glance中存儲的Amazon內核格式
·ari:在Glance中存儲的Akazon虛擬內存盤(Ramdisk)格式
·ami:在Glance中存儲的Amazon機器格式
鏡像文件容器格式
·bare:沒有容器或元數據“信封”的鏡像
·ovf:開放虛擬化格式
·ova:在Glance中存儲的開放虛擬化設備格式
·aki:在Glance中存儲的Amazon內核格式
·Docker:在Glance中存儲的容器文件系統的Dockerd的tar檔案
如果不能確定選擇哪種容器格式,那么簡單地容器格式指定為bare是安全
鏡像狀態1
·queued:這是一種初始化狀態,鏡像文件剛被創建,在Glance數據庫只有其元數據,鏡像數據還沒有上傳至數據庫中
·saving:是鏡像的原始數據在上傳到數據庫中的一種過渡狀態,表示正在上傳鏡像
·uploading:指示已進行導入數據提交調用,此狀態下不允許調用PUT/file(saving狀態會執行PUT/file,這是另外一種上傳的方法)
·importing:指示已經完成導入調用,但是鏡像還未准備好使用
鏡像狀態2
·active:表示當鏡像數據成功上傳完畢,成為Glance中可用的鏡像
·deactivated:表示任何非管理員用戶都無權訪問鏡像數據,禁止下載鏡像,也禁止鏡像導出和鏡像克隆之類的操作
·killed:表示鏡像上傳過程中發生錯誤,鏡像不可讀
·deleted:鏡像將在不久后被自動刪除,該鏡像不可再用,但是目前Glance仍然保留該鏡像的相關信息和原始數據
·pending_delete:與deleted相似,Glance還沒有清除鏡像數據,但處於該狀態的鏡像不可恢復
訪問權限
·Public(公共的):可以被所有的項目使用
·Private(私有的):只有被鏡像所有者所在的項目使用
·Shared(共享的):一個非公共的鏡像可以共享給其他項目,這是通過項目成員(member-*)操作來實現的
·Protected(受保護的):這種鏡像不能被刪除
架構圖
·客戶端是Glance服務應用程序使用者,是OpenStack命令行工具、Horizon或Nova服務
·glance-api是系統后台運行的服務進程,是進入Glance的入口。它對外提供REST API,負責接收用戶的RESTful請求,響應鏡像查詢、獲取和存儲的調用。
·glance-registry是系統后台運行的glance注冊服務進程,負責處理與鏡像元數據相關的RESTful請求,元數據包括鏡像大小、類型等信息。Glance-api接收的請求如果是與鏡像的元數據相關的操作,glance-api會把請求轉發給glance-registry。glance-registry會解析請求內容,並與數據庫交互,存儲、處理、檢索鏡像的元數據。glance-api對外提供API,而glance-registry的API只由glance-api使用。
·Glance的DB模塊存儲的是鏡像的元數據,可以選用MYSQL、MariaDB、SQLite等數據庫。鏡像的元數據通過glance-registry存放在數據庫中。注意,鏡像本身(chunk數據)是通過glance存儲驅動存放到各種存儲后端中的。
·存儲后端(Store Backend)Glance自身並不存儲鏡像,它將鏡像存放在后端存儲系統中。鏡像本身的數據通過glance_store存放在各種后端,並可從中獲取。支持本地存儲、對象存儲、RBD塊設備、Sheepdog分布式存儲、Cinder塊存儲、VMware數據存儲。
·具體使用哪種backend,是在/etc/glance/glance-api.conf中配置
glance的工作流程
首先是對客戶端的安全認證流程:openstack的操作都需要經過keystone進行身份認證,並授權,glance也不例外,授權成功再去請求glance服務,glance服務接收到外部請求后,會去keystone進行認證,此請求是否已授權,認證通過后,才會將請求傳到后端處理。
glance domain controller 是API和后端功能模塊的中間件,相當於調度器,作用是將外部服務分發到下面的各個功能層去處理。
在調度時,遵循調度算法,首先有一個預選,排除不符合要求的節點,再進行優選,通過打分機制,對都能夠處理此功能的節點進行打分,考慮它們當前的負荷,處理能力和速度,選出最優的一個。
對於一些有污點的節點,調度器是直接跳過他們的,如果其余可用節點負擔都太大,無法處理外部請求,會有一個容忍機制,由運維人員控制,讓調度器接受污點,對污點再進行優選
調度器的子功能模塊:
auth授權:控制鏡像的訪問權限;
notifier消息通知:將鏡像變化信息和錯誤添加到 消息隊列
policy規則定義:定義鏡像操作的訪問權限,在policy.json中定義
quota限額:限制上傳鏡像的大小
location定位:通過glance store 與后台存儲進行交互,指明鏡像存儲位置,還可以檢查位置的URL是否正確
DB數據庫:將鏡像轉換為相應的格式以存儲在數據庫中,並將從數據庫讀取的信息轉換為可以操作的鏡像對象。
后端有兩種服務類型:一種是處理關於元數據的請求,另一種是關於鏡像數據的請求。由調度器將請求分配到對應的服務模塊。
當請求元數據時,glanceDB會與調度器進行交互提供服務,中間還可以通過 registry layer 注冊層進行一個安全交互。glanceDB存儲着元數據信息,並且對glance內部所有的組件都是共享的。
當請求的是關於鏡像本身服務時,glance store可以提供一個統一的接口訪問后端的存儲,並且有一個驅動模塊可以調用整個庫與外部服務進行交互。后端的存儲有多種存儲系統,對象存儲、文件存儲等。