天天看點

雲計算openstack核心元件--glance-鏡像服務(6)

glance做什麼

OpenStack 由 Glance 提供 Image 服務

擷取鏡像位置

https://docs.openstack.org/image-guide/obtain-images.html#centos

了解 Image

要了解 Image Service,先得搞清楚什麼是 Image 以及為什麼要用 Image?

在傳統 IT 環境下,安裝一個系統要麼從安裝 CD 從頭安裝,要麼用 Ghost 等克隆工具恢複。這兩種方式有如下幾個問題:

  1. 如果要安裝的系統多了效率就很低
  2. 時間長,工作量大
  3. 安裝完還要進行手工配置,比如安裝其他的軟體,設定 IP 等
  4. 備份和恢複系統不靈活

雲環境下需要更高效的方案,這就是 Image。 Image 是一個模闆,裡面包含了基本的作業系統和其他的軟體。

舉例來說,有家公司需要為每位員工配置一套辦公用的系統,一般需要一個 Win7 系統再加 MS office 軟體。 OpenStack 是這麼玩的:

  1. 先手工安裝好這麼一個虛機
  2. 然後對虛機執行 snapshot,這樣就得到了一個 image
  3. 當有新員工入職需要辦公環境時,立馬啟動一個或多個該 image 的 instance(虛機)就可以了

在這個過程中,第 1 步跟傳統方式類似,需要手工操作和一定時間,但第 2、3 步非常快,全自動化,一般都是秒級别。而且 2、3 步可以循環做。 比如公司新上了一套 OA 系統,每個員工的 PC 上都得有用戶端軟體。 那麼可以在某個現有虛機中先手工安裝好 OA 用戶端,然後執行 snapshot 操作,得到新的 image,以後可以就直接使用新 image 建立虛機了。另外,snapshot 還有備份的作用,能夠非常友善的恢複系統。

了解Image Service

Image Service 的功能是管理 Image,讓使用者能夠發現、擷取和儲存 Image。在 OpenStack 中,提供 Image Service 的是 Glance,其具體功能如下:

  1. 提供 REST API 讓使用者能夠查詢和擷取 image 的中繼資料和 image 本身
  2. 支援多種方式存儲 image,包括普通的檔案系統、Swift、Amazon S3 等
  3. 對 Instance 執行 Snapshot 建立新的 image

Glance 架構

雲計算openstack核心元件--glance-鏡像服務(6)

glance-api

glance-api 是系統背景運作的服務程序。 對外提供 REST API,響應 image 查詢、擷取和存儲的調用。

glance-api 不會真正處理請求。 如果操作是與 image metadata(中繼資料)相關,glance-api 會把請求轉發給 glance-registry; 如果操作是與 image 自身存取相關,glance-api 會把請求轉發給該 image 的 store backend。

在控制節點上可以檢視 glance-api 程序

雲計算openstack核心元件--glance-鏡像服務(6)

glance-registry

glance-registry 是系統背景運作的服務程序。 負責處理和存取 image 的 metadata,例如 image 的大小和類型。在控制節點上可以檢視 glance-registry 

雲計算openstack核心元件--glance-鏡像服務(6)

Glance 支援多種格式的 image,包括

雲計算openstack核心元件--glance-鏡像服務(6)

(1)RAW即常說的裸格式,它其實就是沒有格式,最大的特點就是簡單,資料寫入什麼就是什麼,不做任何修飾,是以在性能方面很不錯,甚至不需要啟動這種鏡像的虛拟機,隻需要把檔案挂載,即可直接讀寫内部資料。并且由于RAW格式簡單,是以RAW和其他格式之間的轉換也更容易。在KVM的虛拟化環境下,有很多使用RAW格式的虛拟機。

(2)qcow2

qcow2是qcow的更新版本,它是QEMU的CopyOn Write特性的磁盤格式,主要特性是磁盤檔案大小可以随着資料的增加而增長。譬如建立一個10GB的虛拟機,實際虛拟機内部隻用了5GB,那麼初始的qcow2磁盤檔案大小就是5GB。與RAW相比,使用這種格式可以節省一部分空間資源。

(3)VHD

VHD也是一種通用的磁盤格式。微軟公司的Virtual PC和Hyper-V使用的就是VHD格式。VirtualBox也提供了對VHD格式的支援。如果要在OpenStack上使用Hyper-V的虛拟化,就應該上傳VHD格式的鏡像檔案。

(4)VMDK

VMware建立的一個虛拟機磁盤格式,目前也是一個開放的通用格式,除了VMware自家的産品外,QEMU和VirtualBox也提供了對VMDK格式的支援。

(5)VDI

Oracle公司的VirtualBox虛拟軟體所使用的格式。

(6)ISO

ISO是指一種存檔資料檔案在CD光牒上的格式。

(7)AKI、ARI、AMI

Amazon公司的AWS所使用的鏡像格式。

Database

Image 的 metadata 會保持到 database 中,預設是 MySQL。 在控制節點上可以檢視 glance 的 database 資訊

雲計算openstack核心元件--glance-鏡像服務(6)

Store backend

Glance 自己并不存儲 image。 真正的 image 是存放在 backend 中的。 Glance 支援多種 backend,包括:

  1. A directory on a local file system(這是預設配置)
  2. GridFS
  3. Ceph RBD
  4. Amazon S3
  5. Sheepdog
  6. OpenStack Block Storage (Cinder)
  7. OpenStack Object Storage (Swift)
  8. VMware ESX

具體使用哪種 backend,是在 /etc/glance/glance-api.conf 中配置的

在我們的 devstack 環境中,image 存放在控制節點本地目錄 /var/lib/glance/images/中

雲計算openstack核心元件--glance-鏡像服務(6)

其他 backend 的配置可參考http://docs.openstack.org/liberty/config-reference/content/configuring-image-service-backends.html

檢視目前已經存在的 image

雲計算openstack核心元件--glance-鏡像服務(6)

檢視儲存目錄

[[email protected] ~]# ls /var/lib/glance/images/
a86d1a0c-c388-4702-aaa6-be045cb234c1
      

每個 image 在目錄下都對應有一個檔案,檔案以 image 的 ID 命名

通過 Web GUI 和 CLI 兩種方法建立 Image

OpenStack 為終端使用者提供了 Web UI(Horizon)和指令行 CLI 兩種交換界面。

可能有些同學覺得既然有更友好的 Web UI 了,幹嘛還要用 CLI? 這裡 給出下面的理由:

  1. Web UI 的功能沒有 CLI 全,有些操作隻提供了 CLI。 即便是都有的功能,CLI 可以使用的參數更多
  2. 一般來說,CLI 傳回結果更快,操作起來更高效
  3. CLI 可放在腳本中進行批處理
  4. 有些耗時的操作 CLI 更合适,比如建立鏡像(後面将涉及)

Web UI 建立 image

第一步:admin 登入後,Project -> Compute -> Images

雲計算openstack核心元件--glance-鏡像服務(6)

第二步:建立鏡像

  1. 這裡我們上傳一個 image。 點選浏覽,選擇鏡像檔案 cirros-0.3.5-x86_64-disk.img。 cirros 是一個很小的 linux 鏡像,非常适合測試用。 大家可以到 http://download.cirros-cloud.net/ 下載下傳。
  2. 格式選擇 QCOW2。
雲計算openstack核心元件--glance-鏡像服務(6)

如果勾選共有,該 image 可以被其他 Project 使用 如果勾選受保護的是,該 image 不允許被删除。

第三步:檢視建立的鏡像

雲計算openstack核心元件--glance-鏡像服務(6)

第四步:檢視cirros詳細資訊,點選cirros

雲計算openstack核心元件--glance-鏡像服務(6)

CLI 建立 image

cirros 這個 linux 鏡像很小,通過 Web UI 上傳很快,操作會很順暢。但如果我們要上傳的鏡像比較大(比如好幾個 G ),那麼操作會長時間停留在上傳的 Web 界面,我們也不知道目前到底處于什麼狀态。 對于這樣的操作,CLI 是更好的選擇。

  1. 将 image 上傳到控制節點的檔案系統中,例如 /tmp/cirros-0.3.5-x86_64-disk.img
  2. 執行建立指令
[[email protected] tmp]# glance image-create --name cirros1 --file /tmp/cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --progress      
[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | f8ab98ff5e73ebab884d80c9dc9c7290     |
| container_format | bare                                 |
| created_at       | 2019-06-07T16:19:58Z                 |
| disk_format      | qcow2                                |
| id               | a218e386-bd4d-43df-a7d4-2128cb906f51 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros1                              |
| owner            | 3c48d267eaa14f44a7cacd7e88bb46b7     |
| protected        | False                                |
| size             | 13267968                             |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2019-06-07T16:19:59Z                 |
| virtual_size     | None                                 |
| visibility       | shared                               |
+------------------+--------------------------------------+      

在建立 image 的 CLI 參數中我們用 –progress 讓其顯示檔案上傳的百分比 %,是不是比 Web UI更直覺呢?

在 /var/lib/glance/images/ 下檢視新的 Image

[[email protected] tmp]# ls /var/lib/glance/images/
a218e386-bd4d-43df-a7d4-2128cb906f51  fe4bca11-d413-4282-9dd6-08941cae5ba8      

web檢視

雲計算openstack核心元件--glance-鏡像服務(6)

如何使用 OpenStack CLI

OpenStack 服務都有自己的 CLI。

指令很好記,就是服務的名字,比如 Glance 就是 glance,Nova 就是 nova。

但 Keystone 比較特殊,現在是用 openstack 來代替老版的 keystone 指令。

不同服務用的指令雖然不同,但這些指令使用方式卻非常類似,可以舉一反三。

1. 執行指令之前,需要設定環境變量。

這些變量包含使用者名、Project、密碼等; 如果不設定,每次執行指令都必須設定相關的指令行參數

2. 各個服務的指令都有增、删、改、查的操作

其格式是

CMD <obj>-create [parm1] [parm2]…
CMD <obj>-delete [parm]
CMD <obj>-update [parm1] [parm2]…
CMD <obj>-list CMD <obj>-show [parm      

例如 glance 管理的是 image,那麼:

CMD 就是 glance,obj 就是 image,對應的指令就有

glance image-create
glance image-delete
glance image-update
glance image-list
glance image-show      

再比如 neutron 負責管理網絡和子網,那麼:

CMD 就是 neutron;obj 就是 net 和 subnet 對應的指令就有

網絡相關操作

neutron net-create
neutron net -delete
neutron net -update
neutron net -list
neutron net –show      

子網相關操作

neutron subnet-create
neutron subnet -delete
neutron subnet -update
neutron subnet -list
neutron subnet–show      

有的指令 <obj> 可以省略,比如 nova 下面的操作都是針對 instance

nova boot
nova delete
nova list 
nova show      

3. 每個對象都有 ID

delete,show 等操作都以 ID 為參數,例如

雲計算openstack核心元件--glance-鏡像服務(6)
雲計算openstack核心元件--glance-鏡像服務(6)

4. 可用 help 檢視指令的用法

除了 delete,show 等操作隻需要 ID 一個參數,其他操作可能需要更多的參數,用 help 檢視所需的參數,格式是

CMD help [SUB-CMD]      

例如檢視 glance 都有哪些 SUB-CMD

雲計算openstack核心元件--glance-鏡像服務(6)

檢視 glance image-update 的用法

雲計算openstack核心元件--glance-鏡像服務(6)

OpenStack 排查問題的方法

OpenStack 排查問題的方法主要是通過日志,Service 都有自己單獨的日志。Glance 主要有兩個日志,glance_api.log 和 glance_registry.log,儲存在/var/log/glance 目錄裡。

Glance配置檔案: vim /etc/glance/glance-api.conf

[DEFAULT]
 
[cors]
[cors.subdomain]
 
[database]
connection = mysql+pymysql://glance:[email protected]/glance
 
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
 
[image_format]
 
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance
 
[matchmaker_redis]
 
[oslo_concurrency]
 
[oslo_messaging_amqp]
 
[oslo_messaging_kafka]
 
[oslo_messaging_notifications]
 
[oslo_messaging_rabbit]
 
[oslo_messaging_zmq]
 
[oslo_middleware]
 
[oslo_policy]
 
[paste_deploy]
flavor = keystone
 
[profiler]
 
[store_type_location_strategy]
 
[task]
 
[taskflow_executor]      

vim /etc/glance/glance-registry.conf

[DEFAULT]
 
[database]
connection = mysql+pymysql://glance:[email protected]/glance
 
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance
 
[matchmaker_redis]
 
[oslo_messaging_amqp]
 
[oslo_messaging_kafka]
 
[oslo_messaging_notifications]
 
[oslo_messaging_rabbit]
 
[oslo_messaging_zmq]
 
[oslo_policy]
 
[paste_deploy]
flavor = keystone
 
[profiler]      

轉載于:https://www.cnblogs.com/Super-It/p/11368721.html