1、官方文档
OpenStack Installation Guidehttps://docs.openstack.org/install-guide/
本次安装是在Ubuntu 22.04上进行,基本按照OpenStack Installation Guide顺序执行,主要内容包括:
- 环境安装 (已完成)
- OpenStack服务安装
- keyston安装(已完成)
- glance安装 (本篇文档安装)
- 启动一个实例
参考OpenStack Yoga版最小化部署(Minimal deployment for Yoga),顺序安装必须的核心服务,本次安装glance服务。
2、Image service overview
2.1 镜像服务概述
OpenStack镜像服务,代号glance。通过镜像服务,用户可以查询、注册、下载虚拟机镜像。利用镜像服务的REST API接口,用户能够查询虚拟机镜像的元数据(即虚拟机镜像信息)、下载虚拟机镜像。虚拟机镜像可以存储在简单的文件系统,或者对象存储系统(比如OpenStack对象存储)等多种位置,并通过镜像服务进行访问。
本次安装为了简化操作,将镜像上传并存储在托管镜像服务的控制节点上的一个目录中。默认情况下,这个目录是
/var/lib/glance/images/
。
OpenStack的镜像服务是基础设施即服务(IaaS)的核心组成部分。它处理来自终端用户或OpenStack计算组件的存取镜像的API请求,以及对镜像元数据进行定义的API请求。此外,它还能在多种存储类型中存储镜像,包括OpenStack对象存储。
这意味着OpenStack镜像服务提供了一个集中的平台,用于管理云环境中的镜像。用户和OpenStack计算组件可以通过API与镜像服务交互,上传、下载镜像或查询镜像信息。镜像服务支持多种后端存储,使得用户可以根据需要选择合适的存储解决方案,例如使用OpenStack对象存储服务来存储大规模的镜像数据。这为云服务提供商和用户提供了灵活性和扩展性。
2.2 镜像服务的缓存功能
在OpenStack镜像服务中,运行着一些周期性进程,以支持缓存功能。复制服务(Replication services )确保集群一致性和可用性。其他周期性进程包括审计器(auditors)、更新器(updaters)和收割者(reapers)。
-
缓存:缓存机制可以提高镜像服务的性能,通过在本地存储或内存中保存镜像的副本,减少对原始存储位置的访问次数,从而加快镜像的检索和分发速度。
-
复制服务:复制服务用于在不同的节点或数据中心之间同步镜像数据,以确保数据的高可用性和灾难恢复能力。即便某个节点发生故障,其他节点仍然可以提供服务。
-
审计器:审计器进程负责检查镜像服务的状态和一致性,确保所有组件都按照预期运行,并且数据没有损坏或丢失。
-
更新器:更新器进程用于定期更新镜像元数据或属性,以确保镜像信息的准确性和最新性。
-
收割者:清理进程负责清理不再需要的镜像或数据,例如删除过期的缓存副本或未被使用的镜像版本,以释放存储空间并保持系统的整洁。
这些周期性进程共同工作,确保OpenStack镜像服务的稳定性、效率和可靠性。
2.3 镜像服务主要组件
OpenStack镜像服务(通常称为Glance)包括以下几个主要组件:
2.3.1 glance-api
接受镜像查询、镜像存取的API调用请求。
2.3.2 Database
存储镜像的元数据。元数据包括了关于镜像的各种信息,比如镜像的名称、大小、状态、创建时间、标签等。这些信息通常存储在数据库中,以便 Glance-api 可以快速检索和更新。
2.3.3 Storage repository for image files
存储镜像。真正的镜像存放在后端存储中。OpenStack 镜像服务支持多种存储类型,包括:
- 普通文件系统:可以是任何挂载到 glance-api 控制节点上的文件系统。这是最基本的存储方式,适用于小规模部署。
- OpenStack Object Storage(Swift)
- OpenStack Block Storage(Cinder)
- RADOS 块设备:RADOS 是 Ceph 存储后端使用的一种分布式对象存储系统,它可以为 OpenStack 提供持久化块存储。
- VMware 数据存储:如果 OpenStack 与 VMware 环境集成,可以使用 VMware 的数据存储作为镜像的存储位置。
- HTTP:通过 HTTP 协议,可以远程存储和检索镜像,这种方式适用于需要从外部源引入镜像的场景。
需要注意的是,并非所有存储库类型都支持读写操作。有些存储库可能仅支持只读,这意味着你可以从这些存储库中检索镜像,但不能直接将镜像上传或修改。例如,通过 HTTP 存储的镜像如果是从外部源下载的,可能就不支持写操作。选择存储库类型时,需要考虑镜像的使用方式和存储库的特性。
2.3.4 Metadata definition service
OpenStack Glance服务的元数据定义服务是一个共用的API,它允许供应商(开发商)、管理员、服务和用户有针对性地自定义元数据。这些元数据可以应用于多种类型的资源,例如镜像、工件、卷、配置选项和聚合体。一个元数据自定义通常包括新属性的键、描述、约束条件以及它可以关联的资源类型。
“这些元数据可以应用于多种类型的资源,例如镜像、工件、卷、配置选项和聚合体。”这句话意味着元数据(metadata)可以应用于多种类型的资源。在这里,“资源”是指在OpenStack Glance服务中可以被管理和操作的对象。这些资源包括:
- 镜像(Images):在OpenStack中,镜像是虚拟机实例的模板,包含了启动虚拟机所需的所有信息。
- 工件(Artifacts):指的是软件构建过程中生成的文件,如编译后的程序或库文件。
- 卷(Volumes):在云环境中,卷是持久化存储的单元,可以附加到虚拟机上,用作数据存储。
- 配置选项(Flavors):定义了虚拟机实例的硬件配置,如CPU、内存和存储容量。
- 聚合体(Aggregates):指的是一组具有共同特征的资源,例如具有相同硬件配置的服务器集群。
3、Install and configure (Ubuntu)
注意glance安装版本为:glance 24.2.1.dev1
3.1 Prerequisites
在安装和配置image service之前,需要先创建数据库、服务凭证(用户名/密码)、服务API端点。
1、Create the glance database:
root@controller:~# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.18-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE glance;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
-> IDENTIFIED BY 'openstack';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
-> IDENTIFIED BY 'openstack';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]>
MariaDB [(none)]> quit
Bye
root@controller:~#
2、以admin user操作OpenStackClient:
ubcode@osclient:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:ff:20:81 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 10.0.20.100/24 brd 10.0.20.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feff:2081/64 scope link
valid_lft forever preferred_lft forever
ubcode@osclient:~$ cat admin-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='\u@\h \W(admin/amdin)\$ '
ubcode@osclient:~$ . admin-openrc
ubcode@osclient ~(admin/amdin)$
3、Create the service credentials:
ubcode@osclient ~(admin/amdin)$ openstack user create --domain default --password-prompt glance
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | b7849907a23b4604a3e3940f4034326b |
| name | glance |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
ubcode@osclient ~(admin/amdin)$ openstack role add --project service --user glance admin
ubcode@osclient ~(admin/amdin)$ openstack service create --name glance \
> --description "OpenStack Image" image
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Image |
| enabled | True |
| id | d6a3dadf92e542289c5ebd37e3553cdd |
| name | glance |
| type | image |
+-------------+----------------------------------+
ubcode@osclient ~(admin/amdin)$
4、Create the Image service API endpoints:
ubcode@osclient ~(admin/amdin)$ openstack endpoint create --region RegionOne \
> image public http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | e047382ce61740bf9dc4219c97eff2f8 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | d6a3dadf92e542289c5ebd37e3553cdd |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
ubcode@osclient ~(admin/amdin)$ openstack endpoint create --region RegionOne \
> image internal http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | ae98462c8f4346f3991d693232a108d3 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | d6a3dadf92e542289c5ebd37e3553cdd |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
ubcode@osclient ~(admin/amdin)$ openstack endpoint create --region RegionOne \
> image admin http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 56d1454571064cb3ad3c749d18fb57e6 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | d6a3dadf92e542289c5ebd37e3553cdd |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
ubcode@osclient ~(admin/amdin)$
3.2 Install and configure components
1、安装glance软件包
root@controller:~# apt install glance
2、Edit the /etc/glance/glance-api.conf
。[database]
[database]
# connection = sqlite:var/lib/glance/glance.sqlite
connection = mysql+pymysql://glance:openstack@controller/glance
backend = sqlalchemy
[database]
:这行指定了接下来的配置项属于数据库部分。
# connection = sqlite:var/lib/glance/glance.sqlite
:这行被注释掉了,意味着它目前不会被使用。它原本的目的是设置数据库连接到一个SQLite数据库文件,路径是/var/lib/glance/glance.sqlite
。SQLite是一个轻量级的数据库,它将数据库存储在一个单一的文件中。
connection = mysql+pymysql://glance:openstack@controller/glance
:这行设置了数据库连接到一个MySQL数据库。mysql+pymysql
是指定使用pymysql作为MySQL的Python适配器。glance:openstack
是数据库用户名和密码,controller
是数据库服务器的主机名或IP地址,glance
是数据库的名称。
backend = sqlalchemy
:这行指定了后端存储使用的是SQLAlchemy。SQLAlchemy是一个Python的SQL工具包和对象关系映射(ORM)系统,它提供了一个全功能的SQL表达式语言以及一个丰富的集合,用于映射Python类到数据库表。简而言之,这段配置将数据库的后端从SQLite更改为MySQL,并且使用了SQLAlchemy作为ORM工具来管理数据库操作。
。[keystone_authtoken]和[paste_deploy]
[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 = openstack
...
[paste_deploy]
...
flavor = keystone
。[glance_store]
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
。[oslo_limit](未配置)
。[DEFAULT](未配置)
3、初始化glance数据库
root@controller:~# su -s /bin/sh -c "glance-manage db_sync" glance
3.3 Finalize installation
root@controller:~# service glance-api restart
root@controller:~# glance-manage --version
24.2.1
4、Verify operation
在controller node上操作
1、以admin user操作OpenStackClient:
root@controller:~# vi admin-openrc <--在controller node上创建admin-openrc
root@controller:~# cat admin-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='\u@\h \W(admin/amdin)\$ '
root@controller:~# . admin-openrc
2、下载cirros镜像
root@controller ~(admin/amdin)# wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
3、上传cirros镜像
root@controller ~(admin/amdin)# glance image-create --name "cirros" \
> --file cirros-0.4.0-x86_64-disk.img \
> --disk-format qcow2 --container-format bare \
> --visibility=public
+------------------+----------------------------------------------------------------------------------+
| Property | Value |
+------------------+----------------------------------------------------------------------------------+
| checksum | 443b7623e27ecf03dc9e01ee93f67afe |
| container_format | bare |
| created_at | 2024-07-06T13:54:01Z |
| disk_format | qcow2 |
| id | 429decdd-9230-49c0-b735-70364c226eb5 |
| min_disk | 0 |
| min_ram | 0 |
| name | cirros |
| os_hash_algo | sha512 |
| os_hash_value | 6513f21e44aa3da349f248188a44bc304a3653a04122d8fb4535423c8e1d14cd6a153f735bb0982e |
| | 2161b5b5186106570c17a9e58b64dd39390617cd5a350f78 |
| os_hidden | False |
| owner | ee65b6c3961747b988ab8bd1cc19fb93 |
| protected | False |
| size | 12716032 |
| status | active |
| tags | [] |
| updated_at | 2024-07-06T13:54:02Z |
| virtual_size | 46137344 |
| visibility | public |
+------------------+----------------------------------------------------------------------------------+
root@controller:~#
参数解释:
--disk-format qcow2
: 指定磁盘格式为qcow2。qcow2是一种流行的QEMU磁盘镜像格式,支持多种特性,如快照、压缩等。
--container-format bare
: 指定容器格式为bare,意味着这个镜像是裸机镜像,不是封装在任何容器格式中的。
--visibility=public
: 设置镜像的可见性为公共,这意味着所有用户都可以访问这个镜像。
4、检查cirros镜像
root@controller ~(admin/amdin)# glance image-list
+--------------------------------------+--------+
| ID | Name |
+--------------------------------------+--------+
| 429decdd-9230-49c0-b735-70364c226eb5 | cirros |
+--------------------------------------+--------+
root@controller ~(admin/amdin)# openstack image list
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| 429decdd-9230-49c0-b735-70364c226eb5 | cirros | active |
+--------------------------------------+--------+--------+
root@controller ~(admin/amdin)# openstack service list
+----------------------------------+----------+----------+
| ID | Name | Type |
+----------------------------------+----------+----------+
| 75fe01049ec648b69e48d200971bf601 | keystone | identity |
| d6a3dadf92e542289c5ebd37e3553cdd | glance | image |
+----------------------------------+----------+----------+
root@controller ~(admin/amdin)#
5、关闭虚机,拍摄快照