1. Tổng quan.
Glance là một dịch vụ quản lý image trong OpenStack. Nó cho phép bạn tạo, quản lý và chia sẻ các image, snapshot của các máy ảo (VMs) hoặc các ứng dụng.
Trong OpenStack, Glance cung cấp khả năng quản lý các image để triển khai các máy ảo. Với Glance, bạn có thể tải lên các image của hệ điều hành, ứng dụng và các dịch vụ cần thiết khác như một hình ảnh để triển khai các máy ảo. Glance cung cấp API RESTful để quản lý các image.
Khi một image được tải lên Glance, nó sẽ được lưu trữ trong một backend image store, có thể là một local file system, hoặc một hệ thống lưu trữ đám mây như Swift hoặc Ceph. Khi một instance máy ảo được khởi động, nó sẽ sử dụng image được lưu trữ trong Glance để tạo ra một bản sao của hệ điều hành và các ứng dụng cần thiết.
Việc cài đặt và cấu hình Glance cho phép các image của hệ điều hành và các ứng dụng được tải lên và lưu trữ một cách hiệu quả, giúp việc triển khai các máy ảo trên OpenStack trở nên dễ dàng hơn.
2. Cấu hình.
2.1. Tạo Database.
Đầu tiên hãy tạo Database glance và phân quyền cho nó.
sudo mysql -u root -pHoanghd164 -e "CREATE DATABASE glance;"
sudo mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';"
sudo mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';"
sudo mysql -u root -pHoanghd164 -e "FLUSH PRIVILEGES;"
2.2. Tạo một người dùng cho dịch vụ Glance.
Sử dụng lệnh . admin-openrc
để kích hoạt môi trường của OpenStack Admin.
. admin-openrc
Tiếp theo, tạo một người dùng Glance với lệnh openstack user create --domain default glance --password "GLANCE_PASS"
, trong đó:
- “–domain default”: đặt domain cho người dùng là
default
. - “glance”: tên của người dùng.
- “–password”: mật khẩu cho người dùng Glance.
$ openstack user create --domain default glance --password "GLANCE_PASS"
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 3f4e777c4062483ab8d9edd7dff829df |
| name | glance |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
Sử dụng lệnh openstack role add --project service --user glance admin
để gán vai trò admin
cho người dùng Glance
trên project service
.
openstack role add --project service --user glance admin
2.3. Tạo dịch vụ Glance.
Tạo một dịch vụ Glance với lệnh openstack service create --name glance --description "OpenStack Image" image
, trong đó:
- “–name glance”: đặt tên cho dịch vụ là
glance
. - “–description “OpenStack Image””: đặt mô tả cho dịch vụ là
OpenStack Image
. - “image”: loại dịch vụ là
image
.
$ openstack service create --name glance --description "OpenStack Image" image
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Image |
| enabled | True |
| id | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| name | glance |
| type | image |
+-------------+----------------------------------+
2.4. Tạo Endpoint Glance.
Trong OpenStack, mỗi dịch vụ thường có ba loại endpoint: admin, public và internal. Mỗi loại endpoint này được sử dụng cho một mục đích cụ thể:
- Admin endpoint: Được sử dụng cho các yêu cầu quản trị từ các dịch vụ khác trong hệ thống OpenStack. Ví dụ, một dịch vụ có thể sử dụng admin endpoint để thực hiện các thao tác quản lý như tạo hoặc xóa tài nguyên.
- Public endpoint: Được sử dụng cho các yêu cầu từ người dùng cuối hoặc các ứng dụng bên ngoài hệ thống OpenStack. Ví dụ, một ứng dụng web có thể sử dụng public endpoint để tạo một máy ảo mới hoặc lấy danh sách các image.
- Internal endpoint: Được sử dụng cho các yêu cầu giữa các dịch vụ trong hệ thống OpenStack. Ví dụ, dịch vụ Nova có thể sử dụng internal endpoint của Glance để lấy một image khi tạo một máy ảo mới.
Việc tạo cả ba loại endpoint cho phép bạn tinh chỉnh quyền truy cập và hiệu suất cho mỗi loại yêu cầu.
Ví dụ, bạn có thể cấu hình mạng để chỉ cho phép các yêu cầu quản trị đi qua admin endpoint, hoặc bạn có thể đặt internal endpoint trên một mạng riêng để tăng hiệu suất cho các yêu cầu giữa các dịch vụ.
Để tạo endpoint cho dịch vụ Glance bằng cách sử dụng các lệnh sau:
- Tạo endpoint public cho dịch vụ Glance, trong đó:
- “–region RegionOne”: đặt khu vực của endpoint là
RegionOne
. - “image”: đặt loại dịch vụ cho endpoint là
image
. - “public”: đặt endpoint cho môi trường
public
. - “http://controller:9292“: đặt URL cho endpoint.
- “–region RegionOne”: đặt khu vực của endpoint là
openstack endpoint create --region RegionOne image public http://controller:9292
Tương tự, tạo endpoint internal cho dịch vụ Glance với các thông số tương tự endpoint public.
openstack endpoint create --region RegionOne image internal http://controller:9292
Và tạo endpoint admin cho dịch vụ Glance với các thông số tương tự endpoint public.
openstack endpoint create --region RegionOne image admin http://controller:9292
Ví dụ.
$ openstack endpoint create --region RegionOne image public http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 340be3625e9b4239a6415d034e98aace |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
$ openstack endpoint create --region RegionOne image internal http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | a6e4b153c2ae4c919eccfdbb7dceb5d2 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
$ openstack endpoint create --region RegionOne image admin http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 0c37ed58103f4300a84ff125a539032d |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
2.5. Cài đặt Glance.
Trên một Controller Node bất kỳ, bạn hãy cài đặt Glance Service bằng lệnh dưới.
apt install glance -y
2.6. Cấu hình Glance.
Cấu hình Database.
Chỉnh sử dòng lệnh [database]
đặt trong file /etc/glance/glance-api.conf
để xác định đường dẫn tới CSDL mà Glance sử dụng để lưu trữ các thông tin về các image.
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
Trong đó:
mysql+pymysql
Chỉ định loại cơ sở dữ liệu và driver sử dụng và trong trường hợp này, Glance sử dụng cơ sở dữ liệu MySQL và driver PyMySQL để kết nối đến cơ sở dữ liệu.glance:GLANCE_DBPASS
Chỉ định tên người dùng và mật khẩu để kết nối đến cơ sở dữ liệu. Trong trường hợp này, tên người dùng làglance
và mật khẩu tương ứng được đặt làGLANCE_DBPASS
. Chú ý rằng mật khẩu này phải được đặt trước khi thực thi lệnh này.@controller/glance
Chỉ định địa chỉ và CSDL. Trong trường hợp này, Glance sử dụng cơ sở dữ liệu có tên làglance
trên máy chủcontroller
.
Cấu hình Keystone Authtoken.
Phần cấu hình [keystone_authtoken]
trong file cấu hình của Glance (hoặc bất kỳ dịch vụ OpenStack nào khác) được sử dụng để xác thực dịch vụ với Keystone, dịch vụ xác thực chính của OpenStack.
Việc xác thực với Keystone quan trọng vì nó cho phép OpenStack kiểm soát quyền truy cập vào các dịch vụ. Khi một yêu cầu đến Glance, Glance sẽ sử dụng thông tin trong phần [keystone_authtoken]
để yêu cầu Keystone xác thực yêu cầu. Nếu yêu cầu được xác thực, Glance sẽ tiếp tục xử lý yêu cầu. Nếu không, Glance sẽ từ chối yêu cầu.
Chỉnh sử dòng lệnh [keystone_authtoken]
đặt trong file /etc/glance/glance-api.conf
.
www_authenticate_uri
vàauth_url
: địa chỉ của Identity service (Keystone) để xác thực các yêu cầu từ Glance.memcached_servers
: địa chỉ của memcached, một dịch vụ cache, sử dụng để lưu trữ thông tin phi trạng thái giữa các yêu cầu xác thực.auth_type
: loại xác thực, được thiết lập làpassword
để sử dụng xác thực bằng tài khoản và mật khẩu.project_domain_name
,user_domain_name
,project_name
,username
, vàpassword
: thông tin xác thực để Glance có thể đăng nhập và gửi yêu cầu tới Keystone. Cụ thể, tài khoản được sử dụng làglance
, thuộc projectservice
với mật khẩu làGLANCE_PASS
.
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS
Cấu hình Keystone Authtoken.
Chỉnh sử dòng lệnh [
đặt trong file paste_deploy
]/etc/glance/glance-api.conf
.
[paste_deploy]
là một section trong file /etc/glance/glance-api.conf
được sử dụng để cấu hình các tùy chọn triển khai. Trong trường hợp này, flavor = keystone
chỉ định triển khai keystone cho Glance API. Keystone là dịch vụ xác thực và ủy quyền của OpenStack, được sử dụng để quản lý quyền truy cập vào các dịch vụ OpenStack. Bằng cách sử dụng Keystone, Glance API có thể xác thực và phân quyền người dùng để truy cập vào hệ thống.
[paste_deploy]
flavor = keystone
[glance_store]
là một section trong file /etc/glance/glance-api.conf
và được sử dụng để cấu hình các tùy chọn lưu trữ (storage options) cho Glance Image Service.
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
Trong đó:
stores
: Cho phép bạn chọn các driver lưu trữ khác nhau mà Glance Image Service sẽ sử dụng. Ví dụ: file, http, rbd, swift, ceph, vsphere, …default_store
: Tùy chọn này xác định driver lưu trữ mặc định sẽ được sử dụng nếu tùy chọn “store” không được chỉ định. Trong ví dụ này,file
được chọn làm driver lưu trữ mặc định.filesystem_store_datadir
: Tùy chọn này chỉ định thư mục sẽ được sử dụng để lưu trữ các image file. Trong ví dụ này,/var/lib/glance/images/
được sử dụng.
Cấu hình kiểm soát số lượng tài nguyên mà một dịch vụ có thể sử dụng.
Trong OpenStack, oslo.limit
được sử dụng để kiểm soát số lượng tài nguyên mà một dịch vụ có thể sử dụng. Ví dụ, oslo.limit
có thể được sử dụng để giới hạn số lượng máy ảo mà một khách hàng có thể tạo hoặc giới hạn băng thông mà một máy chủ có thể sử dụng.
Trong file cấu hình /etc/glance/glance-api.conf
, bạn sử dụng endpoint của dịch vụ Glance. Trong trường hợp của bạn, có 3 endpoint cho dịch vụ Glance, tương ứng với 3 giao diện khác nhau: admin, public và internal.
admin
: Dùng cho các yêu cầu quản trị từ các dịch vụ khác trong hệ thống OpenStack.public
: Dùng cho các yêu cầu từ bên ngoài hệ thống OpenStack.internal
: Dùng cho các yêu cầu giữa các dịch vụ trong hệ thống OpenStack.
Trong hầu hết các trường hợp, bạn sẽ sử dụng endpoint admin
hoặc internal
cho file cấu hình glance-api.conf
. Tuy nhiên, điều này cũng phụ thuộc vào cách bạn muốn cấu hình hệ thống của mình.
Bạn có thể lấy danh sách các endpoint trong hệ thống OpenStack của bạn bằng cách sử dụng lệnh openstack endpoint list
.
shell> openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------+
| 0eec09c2a3e94d68b873544ef782d9ff | RegionOne | glance | image | True | admin | http://controller:9292 |
| 293364677ed043be9f3575950f71200c | RegionOne | keystone | identity | True | public | http://controller:5000/v3/ |
| 954119d22e4d49ee9be2e02d4dad614e | RegionOne | keystone | identity | True | admin | http://controller:5000/v3/ |
| c3f48acadfc249818bf8a3ea0501f418 | RegionOne | glance | image | True | public | http://controller:9292 |
| d0532e2e9f0648f38536a327573690ff | RegionOne | glance | image | True | internal | http://controller:9292 |
| dee3ed09d4bd4c9b83ccc3b36d764765 | RegionOne | keystone | identity | True | internal | http://controller:5000/v3/ |
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------+
Dưới đây là ID của các endpoint Glance tương ứng:
- Admin:
0eec09c2a3e94d68b873544ef782d9ff
- Public:
c3f48acadfc249818bf8a3ea0501f418
- Internal:
d0532e2e9f0648f38536a327573690ff
Bạn có thể chọn một trong những ID này để sử dụng trong file cấu hình glance-api.conf
. Vui lòng thay thế MY_SERVICE
, MY_PASSWORD
và ENDPOINT_ID
với các giá trị thực tế trong cấu hình của bạn.
[oslo_limit]
auth_url = http://controller:5000
auth_type = password
user_domain_id = default
username = glance
system_scope = all
password = GLANCE_PASS
endpoint_id = 0eec09c2a3e94d68b873544ef782d9ff
region_name = RegionOne
Các thông số cấu hình bao gồm:
auth_url
: URL của service Keystone để xác thựcauth_type
: Phương thức xác thực được sử dụng, ở đây làpassword
user_domain_id
: ID của user domain được sử dụng để xác thựcusername
: Tên người dùng được sử dụng để xác thực với Keystonesystem_scope
: Phạm vi hệ thống được sử dụng cho tài nguyên Glance, ở đây làall
password
: Mật khẩu được sử dụng để xác thực với Keystoneendpoint_id
: ID của endpoint được sử dụng để truy cập vào dịch vụ Glanceregion_name
: Tên của khu vực mà dịch vụ Glance đang chạy, ở đây làRegionOne
Thêm vai trò reader
cho người dùng glance
trên tất cả các hệ thống.
Trong OpenStack, một “vai trò” (role) là một tập hợp các quyền truy cập mà bạn có thể gán cho người dùng. Ví dụ, một người dùng với vai trò admin
có thể tạo và xóa tài nguyên, trong khi một người dùng với vai trò reader
chỉ có thể xem tài nguyên nhưng không thể thay đổi chúng.
Lệnh openstack role add --user glance --user-domain Default --system all reader
gán vai trò reader
cho người dùng glance
trên toàn hệ thống (--system all
).
Trong trường hợp này, bạn đang gán vai trò reader
cho người dùng glance
. Điều này có nghĩa là người dùng glance
có thể xem tất cả các tài nguyên trên hệ thống, nhưng không thể tạo, chỉnh sửa hoặc xóa chúng. Điều này có thể hữu ích nếu bạn muốn người dùng glance
có quyền truy cập đọc vào các tài nguyên nhưng không muốn họ thay đổi chúng.
openstack role add --user glance --user-domain Default --system all reader
Đồng bộ hóa cơ sở dữ liệu của Glance với schema mới nhất.
Lệnh su
được sử dụng để thay đổi người dùng trong terminal. Trong trường hợp này, chúng ta muốn chuyển đổi sang người dùng glance
. Tham số -s /bin/sh
xác định shell được sử dụng khi đăng nhập vào tài khoản glance
. Sau khi chuyển đổi người dùng sang glance
, lệnh glance-manage db_sync
được sử dụng để đồng bộ hóa cơ sở dữ liệu của Glance với schema mới nhất. Các bảng CSDL mới được tạo ra và các CSDL hiện có được cập nhật để đảm bảo hệ thống Glance hoạt động đúng cách.
su -s /bin/sh -c "glance-manage db_sync" glance
Ví dụ về đầu ra của lệnh su -s /bin/sh -c "glance-manage db_sync" glance
.
shell> su -s /bin/sh -c "glance-manage db_sync" glance
2024-02-24 07:09:27.446 49686 INFO alembic.runtime.migration [-] Context impl MySQLImpl.
2024-02-24 07:09:27.446 49686 INFO alembic.runtime.migration [-] Will assume non-transactional DDL.
2024-02-24 07:09:27.459 49686 INFO alembic.runtime.migration [-] Context impl MySQLImpl.
2024-02-24 07:09:27.459 49686 INFO alembic.runtime.migration [-] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade -> liberty, liberty initial
INFO [alembic.runtime.migration] Running upgrade liberty -> mitaka01, add index on created_at and updated_at columns of 'images' table
INFO [alembic.runtime.migration] Running upgrade mitaka01 -> mitaka02, update metadef os_nova_server
INFO [alembic.runtime.migration] Running upgrade mitaka02 -> ocata_expand01, add visibility to images
INFO [alembic.runtime.migration] Running upgrade ocata_expand01 -> pike_expand01, empty expand for symmetry with pike_contract01
INFO [alembic.runtime.migration] Running upgrade pike_expand01 -> queens_expand01
INFO [alembic.runtime.migration] Running upgrade queens_expand01 -> rocky_expand01, add os_hidden column to images table
INFO [alembic.runtime.migration] Running upgrade rocky_expand01 -> rocky_expand02, add os_hash_algo and os_hash_value columns to images table
INFO [alembic.runtime.migration] Running upgrade rocky_expand02 -> train_expand01, empty expand for symmetry with train_contract01
INFO [alembic.runtime.migration] Running upgrade train_expand01 -> ussuri_expand01, empty expand for symmetry with ussuri_expand01
INFO [alembic.runtime.migration] Running upgrade ussuri_expand01 -> wallaby_expand01, add image_id, request_id, user columns to tasks table"
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
Upgraded database to: wallaby_expand01, current revision(s): wallaby_expand01
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
Database migration is up to date. No migration needed.
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade mitaka02 -> ocata_contract01, remove is_public from images
INFO [alembic.runtime.migration] Running upgrade ocata_contract01 -> pike_contract01, drop glare artifacts tables
INFO [alembic.runtime.migration] Running upgrade pike_contract01 -> queens_contract01
INFO [alembic.runtime.migration] Running upgrade queens_contract01 -> rocky_contract01
INFO [alembic.runtime.migration] Running upgrade rocky_contract01 -> rocky_contract02
INFO [alembic.runtime.migration] Running upgrade rocky_contract02 -> train_contract01
INFO [alembic.runtime.migration] Running upgrade train_contract01 -> ussuri_contract01
INFO [alembic.runtime.migration] Running upgrade ussuri_contract01 -> wallaby_contract01
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
Upgraded database to: wallaby_contract01, current revision(s): wallaby_contract01
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
Database is synced successfully.
Khởi động lại Glance.
Cuối cùng ta khởi động lại các dịch vụ của image service.
service glance-api restart
Thêm một image trên Glance.
Sau khi hoàn thành config, chúng ta hãy verify lại dịch vụ. Đầu tiên, sử dụng lệnh . admin-openrc
để kích hoạt môi trường của OpenStack Admin.
. admin-openrc
Download file image test về máy chủ, cụ thể mình sử dụng cirros-0.4.0-x86_64-disk.img
.
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
Sử dụng lệnh openstack image create
để tạo một image trên Glance, dịch vụ quản lý image trong OpenStack.
Cụ thể, lệnh này tạo ra một image có tên là cirros
bằng cách:
$ openstack image create "cirros" \
--file cirros-0.4.0-x86_64-disk.img \
--disk-format qcow2 --container-format bare \
--public
+------------------+------------------------------------------------------+
| Field | Value |
+------------------+------------------------------------------------------+
| checksum | 133eae9fb1c98f45894a4e60d8736619 |
| container_format | bare |
| created_at | 2015-03-26T16:52:10Z |
| disk_format | qcow2 |
| file | /v2/images/cc5c6982-4910-471e-b864-1098015901b5/file |
| id | cc5c6982-4910-471e-b864-1098015901b5 |
| min_disk | 0 |
| min_ram | 0 |
| name | cirros |
| owner | ae7a98326b9c455588edd2656d723b9d |
| protected | False |
| schema | /v2/schemas/image |
| size | 13200896 |
| status | active |
| tags | |
| updated_at | 2015-03-26T16:52:10Z |
| virtual_size | None |
| visibility | public |
+------------------+------------------------------------------------------+
--file cirros-0.4.0-x86_64-disk.img
: Chỉ định đường dẫn đến file image, ở đây làcirros-0.4.0-x86_64-disk.img
.--disk-format qcow2
: Chỉ định định dạng của file image, ở đây làqcow2
.--container-format bare
: Chỉ định định dạng của container image, ở đây làbare
.--public
: Chỉ định rằng image này sẽ được public và có thể được truy cập bởi tất cả người dùng trong hệ thống OpenStack.
Với lệnh này, Glance sẽ tạo ra một image mới với tên là cirros
và sử dụng file cirros-0.4.0-x86_64-disk.img
để tạo ra image này. Image sẽ được lưu trữ trong Glance và có thể được sử dụng để tạo máy ảo.
Sử dụng lệnh dưới để xác nhận rằng image đã được thêm thành công.
$ openstack image list
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| 38047887-61a7-41ea-9b49-27987d5e8bb9 | cirros | active |
+--------------------------------------+--------+--------+
Phần tiếp theo, chúng ta sẽ cài đặt và cấu hình Placement service.