目录
[1. 创建数据库、服务凭证和API端点](#1. 创建数据库、服务凭证和API端点)
[2. 创建服务证书](#2. 创建服务证书)
[3. 安装并配置glance组件](#3. 安装并配置glance组件)
[4. 上传镜像到镜像服务](#4. 上传镜像到镜像服务)
[1. 创建数据库服务的凭据以及 API endpoints](#1. 创建数据库服务的凭据以及 API endpoints)
[2. 在控制节点安装并配置nova组件](#2. 在控制节点安装并配置nova组件)
[3. 在计算节点配置nova组件](#3. 在计算节点配置nova组件)
[1. 配置关键步骤回顾](#1. 配置关键步骤回顾)
[2. 验证服务是否正常运行](#2. 验证服务是否正常运行)
配置镜像服务
镜像服务(Glance)是 OpenStack 中负责镜像注册、存储与分发的核心组件 。它对外提供统一的镜像管理 API,使计算服务(Nova)在创建虚拟机实例时能够按需获取对应的系统镜像。本节将按照从数据库准备、服务凭证创建、组件安装到镜像上传的完整流程,逐步完成镜像服务的配置。
1. 创建数据库、服务凭证和API端点
在安装镜像服务之前,需要先在数据库中为 Glance 创建独立的数据库和专用账号,并授予相应的访问权限。这样既能保证数据隔离,也便于后续通过统一的数据库连接串进行管理。下面在控制节点的 MariaDB 中执行创建操作。
cpp
[root@controller ~]# mysql -p001003
MariaDB [(none)]> CREATE DATABASE glance;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
-> IDENTIFIED BY 'glance';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';
Query OK, 0 rows affected (0.01 sec)
代码说明: 首先使用
mysql -p001003登录控制节点的 MariaDB 数据库。接着执行CREATE DATABASE glance;创建名为 glance 的镜像服务数据库。随后通过两条GRANT ALL PRIVILEGES语句,分别允许 glance 用户从本机(localhost)和任意主机(%)使用密码 glance 访问 glance 数据库,并授予全部权限,为后续 Glance 组件读写镜像元数据做好准备。
2. 创建服务证书
镜像服务需要与 Keystone 身份认证服务进行对接,因此必须先在 Keystone 中创建对应的用户、服务实体和 API 端点。这些凭证将用于 Glance 与其它 OpenStack 组件之间的相互认证与调用。下面按步骤依次完成创建。
2.1 创建 glance 用户
cpp
[root@controller ~]# source admin-openrc
[root@controller ~]# openstack user create --domain default --password-prompt glance
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | 30e46230611e4fb7b152e1adf37f3200 |
| enabled | True |
| id | 07a1e52a29f44fe69dcb2e192cb6493a |
| name | glance |
+-----------+----------------------------------+
代码说明: 先执行
source admin-openrc加载管理员环境变量,使后续命令具备 Keystone 管理权限。然后使用openstack user create创建 glance 用户,其中--domain default指定用户属于默认域,--password-prompt表示交互式输入密码。命令执行成功后,返回的用户信息表中可以看到 glance 用户的 id、名称和启用状态。
2.2 添加 admin 角色到 glance 用户和 service 项目上
cpp
[root@controller ~]# openstack role add --project service --user glance admin
代码说明: 该命令将 admin 角色添加到 glance 用户和 service 项目上。
--project service指定服务项目,--user glance指定目标用户,admin是要授予的角色。这样 glance 用户就拥有了在 service 项目中执行管理操作的权限,能够正常访问 Keystone 中的服务目录。
2.3 创建"glance"服务实体
cpp
[root@controller ~]# openstack service create --name glance \
--description "OpenStack Image" image
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Image |
| enabled | True |
| id | cd07e6b10ce145c492de5f4e5a434a71 |
| name | glance |
| type | image |
+-------------+----------------------------------+
代码说明: 该命令在 Keystone 中注册 glance 服务实体。
--name glance指定服务名称为 glance,--description "OpenStack Image"添加服务描述,最后的image是服务类型。创建成功后,返回信息中的 type 为 image,表示这是一个镜像服务,后续创建 API 端点时需要引用该服务的 id。
2.4 创建镜像服务的 API 端点
cpp
[root@controller ~]# openstack endpoint create --region RegionOne \
image public http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | a24d1a34f5004185a8e51628484fae74 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | cd07e6b10ce145c492de5f4e5a434a71 |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
代码说明: 该命令为 glance 服务创建 public(公共)类型的 API 端点。
--region RegionOne指定区域,image是服务类型,public表示端点类型,最后的 URL 是镜像服务的访问地址。创建成功后,外部用户即可通过http://controller:9292访问 Glance 的公共 API。
cpp
[root@controller ~]# openstack endpoint create --region RegionOne \
image internal http://controller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | dff2fb2c0349468e81fea37bd0f442c4 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | cd07e6b10ce145c492de5f4e5a434a71 |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
cpp
[root@controller ~]# openstack endpoint create --region RegionOne \
image admin http://cont oller:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | f694822bfa354a95ab37567e1f44413a |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | cd07e6b10ce145c492de5f4e5a434a71 |
| service_name | glance |
| service_type | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
3. 安装并配置glance组件
完成数据库和服务凭证的准备工作后,接下来在控制节点安装 Glance 组件,并修改其配置文件,使其能够正确连接数据库、对接 Keystone 认证服务,并指定镜像文件的本地存储路径。下面先安装软件包,再编辑两个核心配置文件。
cpp
[root@controller ~]# yum install openstack-glance
[root@controller ~]# vim /etc/glance/glance-api.conf
[database]
connection = mysql+pymysql://glance:glance@controller/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
[paste_deploy]
flavor = keystone
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
cpp
[root@controller ~]# vim /etc/glance/glance-registry.conf
[database]
connection = mysql+pymysql://glance:glance@controller/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
[paste_deploy]
flavor = keystone
写入镜像服务数据库
cpp
[root@controller ~]# su -s /bin/sh -c "glance-manage db_sync" glance
Option "verbose" from group "DEFAULT" is deprecated for removal. Its value may be silently ignored in the future.
/usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py:1056: OsloDBDeprecationWarning: EngineFacade is deprecated; please use oslo_db.sqlalchemy.enginefacade
expire_on_commit=expire_on_commit, _conf=conf)
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `ix_image_properties_image_id_name`. This is deprecated and will be disallowed in a future release.')
result = self._query(query)
启动镜像服务、配置
cpp
[root@controller ~]# systemctl enable openstack-glance-api.service \
openstack-glance-registry.service
[root@controller ~]# systemctl start openstack-glance-api.service \
openstack-glance-registry.service
4. 上传镜像到镜像服务
镜像服务配置完成后,即可通过命令行将系统镜像上传到 Glance 中。上传成功后,镜像会进入 active 状态,可供后续创建虚拟机实例时直接使用。下面以 CirrOS 测试镜像为例,演示上传和查看镜像列表的操作。
cpp
[root@controller ~]# openstack image create "cirros" \
> --file cirros-0.6.0-x86_64-disk.img \
> --disk-format qcow2 --container-format bare \
> --public
+------------------+------------------------------------------------------+
| Field | Value |
+------------------+------------------------------------------------------+
| checksum | f4027b89e99e238184e13089a3155b74 |
| container_format | bare |
| created_at | 2026-08-25T05:47:29Z |
| disk_format | qcow2 |
| file | /v2/images/d3dff337-1999-4c58-b07d-c899afb415c5/file |
| id | d3dff337-1999-4c58-b07d-c899afb415c5 |
| min_disk | 0 |
| min_ram | 0 |
| name | cirros |
| owner | ec476ad6630045538f632b5b8c3f39fc |
| protected | False |
| schema | /v2/schemas/image |
| size | 21149184 |
| status | active |
| tags | |
| updated_at | 2026-08-25T05:47:29Z |
| virtual_size | None |
| visibility | public |
+------------------+------------------------------------------------------+
[root@controller ~]# openstack image list
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| d3dff337-1999-4c58-b07d-c899afb415c5 | cirros | active |
+--------------------------------------+--------+--------+
配置计算服务
计算服务(Nova)是 OpenStack 中负责虚拟机实例生命周期管理的核心组件 ,涵盖实例的创建、调度、启动、停止与销毁等操作。它通过与镜像服务(Glance)、身份认证服务(Keystone)以及消息队列(RabbitMQ)协同工作,为上层提供弹性可扩展的计算能力。本节将按照从数据库准备、服务凭证创建、控制节点安装配置到计算节点安装配置的完整流程,逐步完成计算服务的部署。
首先需要部署一个节点作为计算节点,和配置控制节点的方法一致,必须配置好时间同步,解析,open stack包等等。从控制节点将mitaka目录同步到计算节点。
cpp
[root@controller ~]# ls
admin-openrc anaconda-ks.cfg cirros-0.6.0-x86_64-disk.img demo-openrc mitaka mitaka.tar
[root@controller ~]# scp -r mitaka/ compute1:/opt/
1. 创建数据库服务的凭据以及 API endpoints
与镜像服务类似,计算服务也需要在数据库中创建独立的数据库和专用账号,并在 Keystone 中注册对应的用户、服务实体和 API 端点。这些准备工作是 Nova 各组件之间以及 Nova 与其它 OpenStack 服务之间正常通信的基础。下面先在控制节点的 MariaDB 中创建数据库和授权账号。
cpp
[root@controller ~]# mysql -p001003
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.1.20-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE nova_api;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> CREATE DATABASE nova;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost'
-> IDENTIFIED BY 'nova';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost'
-> IDENTIFIED BY 'nova';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%'
-> IDENTIFIED BY 'nova';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> ^DBye
代码说明: 首先使用
mysql -p001003登录控制节点的 MariaDB 数据库。接着执行CREATE DATABASE nova_api;和CREATE DATABASE nova;分别创建 Nova 的 API 数据库和主数据库。随后通过四条GRANT ALL PRIVILEGES语句,分别允许 nova 用户从本机(localhost)和任意主机(%)使用密码 nova 访问 nova_api 和 nova 两个数据库,并授予全部权限,为后续 Nova 各组件的读写操作做好准备。
cpp
[root@controller ~]# source admin-openrc
[root@controller ~]# openstack user create --domain default \
> --password nova nova
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | 30e46230611e4fb7b152e1adf37f3200 |
| enabled | True |
| id | 8437c1d2c14d4ffd8cb3be480a8c0738 |
| name | nova |
+-----------+----------------------------------+
[root@controller ~]# openstack role add --project service --user nova admin
代码说明: 先执行
source admin-openrc加载管理员环境变量,使后续命令具备 Keystone 管理权限。然后使用openstack user create创建 nova 用户,其中--domain default指定用户属于默认域,--password nova直接指定密码为 nova。命令执行成功后,返回的用户信息表中可以看到 nova 用户的 id、名称和启用状态。最后通过openstack role add将 admin 角色添加到 nova 用户和 service 项目上,使 nova 用户拥有在 service 项目中执行管理操作的权限。
cpp
[root@controller ~]# openstack service create --name nova \
> --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | aec887d5874f4cf6a59dbd80f6b52030 |
| name | nova |
| type | compute |
+-------------+----------------------------------+
代码说明: 该命令在 Keystone 中注册 nova 服务实体。
--name nova指定服务名称为 nova,--description "OpenStack Compute"添加服务描述,最后的compute是服务类型。创建成功后,返回信息中的 type 为 compute,表示这是一个计算服务,后续创建 API 端点时需要引用该服务的 id。
cpp
[root@controller ~]# openstack endpoint create --region RegionOne \
> compute public http://controller:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | e04a408b66614004956812f8c5e66954 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | aec887d5874f4cf6a59dbd80f6b52030 |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne \
> compute internal http://controller:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | a1ec7d856f6a45bc867eab08aea07e01 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | aec887d5874f4cf6a59dbd80f6b52030 |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne \
> compute admin http://controller:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | 004204dc72e749eba11f9b808ec5d641 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | aec887d5874f4cf6a59dbd80f6b52030 |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+
代码说明: 这三条命令分别为 nova 服务创建 public(公共)、internal(内部)和 admin(管理)三种类型的 API 端点。
--region RegionOne指定区域,compute是服务类型,最后的 URL 是计算服务的访问地址,其中%(tenant_id)s是项目 ID 的占位符,会在实际请求时被替换。创建成功后,不同网络环境下的用户即可通过对应的端点地址访问 Nova 的计算 API。
2. 在控制节点安装并配置nova组件
完成数据库和服务凭证的准备工作后,接下来在控制节点安装 Nova 的核心服务组件,包括 API 服务、调度器、控制台服务和消息代理等。安装完成后,需要编辑 nova.conf 配置文件,使其能够正确连接数据库、对接 Keystone 认证服务、使用 RabbitMQ 消息队列,并指定与镜像服务的对接地址。下面先安装软件包,再修改配置文件。
cpp
[root@controller ~]# yum install openstack-nova-api openstack-nova-conductor \
> openstack-nova-console openstack-nova-novncproxy \
> openstack-nova-scheduler -y
[root@controller ~]# vim /etc/nova/nova.conf
[DEFAULT]
enabled_aipis = osapi_compute,metadata
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.223.161
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
connection = mysql+pymysql://nova:nova@controller/nova_api
[database]
connection = mysql+pymysql://nova:nova@controller/nova
[glance]
api_servers = http://controller:9292
[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 = nova
password = nova
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
代码说明: 首先使用
yum install安装 Nova 的核心服务组件,包括 API 服务(nova-api)、调度器(nova-scheduler)、控制台服务(nova-console、nova-novncproxy)和数据库同步工具(nova-conductor)。安装完成后,编辑/etc/nova/nova.conf配置文件:[DEFAULT]段设置消息队列后端为 rabbit、认证策略为 keystone,并指定本机 IP;[api_database]和[database]段分别配置 API 数据库和主数据库的连接串;[glance]段指定镜像服务的地址;[keystone_authtoken]段配置 Keystone 认证信息;[oslo_messaging_rabbit]段设置 RabbitMQ 的连接参数;[vnc]段配置 VNC 远程控制台服务。
cpp
[root@controller ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
[root@controller ~]# su -s /bin/sh -c "nova-manage db sync" nova
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `block_device_mapping_instance_uuid_virtual_name_device_name_idx`. This is deprecated and will be disallowed in a future release.')
result = self._query(query)
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `uniq_instances0uuid`. This is deprecated and will be disallowed in a future release.')
result = self._query(query)
cpp
[root@controller ~]# systemctl enable openstack-nova-api.service \
> openstack-nova-consoleauth.service openstack-nova-scheduler.service \
> openstack-nova-conductor.service openstack-nova-novncproxy.service
[root@controller ~]# systemctl start openstack-nova-api.service
> openstack-nova-consoleauth.service openstack-nova-scheduler.service
> openstack-nova-conductor.service openstack-nova-novncproxy.service
3. 在计算节点配置nova组件
控制节点上的 Nova 服务配置完成后,还需要在计算节点上安装并配置 nova-compute 组件。计算节点是实际承载虚拟机运行的物理主机,nova-compute 负责与底层的虚拟化技术(如 KVM)交互,执行实例的创建和运行。下面在计算节点上安装软件包并编辑对应的 nova.conf 配置文件。
首先使用
yum install openstack-nova-compute -y安装计算节点所需的 nova-compute 软件包。安装完成后,编辑
/etc/nova/nova.conf配置文件:[DEFAULT]段设置消息队列后端为 rabbit、认证策略为 keystone,并指定本机 IP 为 192.168.223.162;[oslo_messaging_rabbit]段配置 RabbitMQ 的连接参数,使计算节点能够与控制节点上的消息队列通信;[keystone_authtoken]段配置 Keystone 认证信息,用于计算节点向身份认证服务验证身份;[vnc]段启用 VNC 远程控制台,并指定代理客户端地址和访问入口;[oslo_concurrency]段设置锁文件路径;[glance]段指定镜像服务的地址,使计算节点能够从 Glance 获取系统镜像。
cpp
[root@computer1 ~]# yum install openstack-nova-compute -y
[root@computer1 ~]# vim /etc/nova/nova.conf
[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.223.162
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
[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 = nova
password = nova
[vnc]
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[glance]
api_servers = http://controller:9292
配置文件修改完成后,还需要检查 CPU 是否支持硬件虚拟化。执行
egrep -c '(vmx|svm)' /proc/cpuinfo,返回结果为 2,说明当前 CPU 支持虚拟化扩展(vmx 为 Intel 虚拟化技术,svm 为 AMD 虚拟化技术),可以正常使用 KVM 运行虚拟机。随后通过
systemctl enable和systemctl start启用并启动 libvirtd 和 openstack-nova-compute 服务,使 nova-compute 组件随系统开机自启并立即运行。
cpp
[root@computer1 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
2
[root@computer1 ~]# systemctl enable libvirtd.service openstack-nova-compute.service
Created symlink from /etc/systemd/system/multi-user.target.wants/openstack-nova-compute.service to /usr/lib/systemd/system/openstack-nova-compute.service.
[root@computer1 ~]# systemctl start libvirtd.service openstack-nova-compute.service
最后,回到控制节点执行
source admin-openrc加载管理员环境变量,再运行openstack compute service list查看计算服务的运行状态。从返回结果可以看到,nova-consoleauth、nova-conductor、nova-scheduler 运行在 controller 节点上,nova-compute 运行在 computer1 节点上,且所有服务的 Status 均为 enabled、State 均为 up,说明计算服务已成功部署并正常运行。
cpp
[root@controller ~]# source admin-openrc
[root@controller ~]# openstack compute service list
+----+------------------+------------+----------+---------+-------+----------------------------+
| Id | Binary | Host | Zone | Status | State | Updated At |
+----+------------------+------------+----------+---------+-------+----------------------------+
| 1 | nova-consoleauth | controller | internal | enabled | up | 2026-08-25T06:47:50.000000 |
| 2 | nova-conductor | controller | internal | enabled | up | 2026-08-25T06:47:51.000000 |
| 4 | nova-scheduler | controller | internal | enabled | up | 2026-08-25T06:47:51.000000 |
| 7 | nova-compute | computer1 | nova | enabled | up | 2026-08-25T06:47:58.000000 |
+----+------------------+------------+----------+---------+-------+----------------------------+
总结与验证
至此,镜像服务和计算服务的配置已全部完成。下面先回顾两个服务配置的关键步骤,再给出验证服务是否正常运行的方法。
1. 配置关键步骤回顾
**镜像服务(Glance)**的配置主要分为四步:首先在 MariaDB 中创建 glance 数据库和专用账号并授权;然后在 Keystone 中创建 glance 用户、服务实体和 API 端点;接着安装 openstack-glance 软件包,编辑 glance-api.conf 和 glance-registry.conf 配置文件,使其能够连接数据库、对接 Keystone 认证服务并指定镜像存储路径,最后执行数据库同步并启动服务;最后通过 openstack image create 命令将系统镜像上传到 Glance。
**计算服务(Nova)**的配置同样分为四步:先在 MariaDB 中创建 nova_api 和 nova 两个数据库及专用账号并授权;然后在 Keystone 中创建 nova 用户、服务实体和 API 端点;接着在控制节点安装 nova-api、nova-scheduler、nova-conductor 等核心组件,编辑 nova.conf 配置文件并同步数据库、启动服务;最后在计算节点安装 nova-compute 组件,编辑 nova.conf 配置文件,检查 CPU 虚拟化支持并启动 libvirtd 和 nova-compute 服务。
2. 验证服务是否正常运行
配置完成后,可以通过以下命令验证各服务是否正常运行。首先执行 source admin-openrc 加载管理员环境变量,然后依次执行以下命令检查服务状态。
cpp
[root@controller ~]# source admin-openrc
[root@controller ~]# openstack service list
+----------------------------------+-----------+---------+
| ID | Name | Type |
+----------------------------------+-----------+---------+
| cd07e6b10ce145c492de5f4e5a434a71 | glance | image |
| aec887d5874f4cf6a59dbd80f6b52030 | nova | compute |
+----------------------------------+-----------+---------+
执行 openstack service list 可以查看当前 Keystone 中注册的所有服务。如果列表中能看到 glance(类型为 image)和 nova(类型为 compute),说明两个服务的服务实体已正确注册。
cpp
[root@controller ~]# openstack image list
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| d3dff337-1999-4c58-b07d-c899afb415c5 | cirros | active |
+--------------------------------------+--------+--------+
执行 openstack image list 可以查看镜像服务中已上传的镜像。如果能看到 cirros 镜像且 Status 为 active,说明镜像服务运行正常,镜像已成功上传并可供使用。
cpp
[root@controller ~]# openstack compute service list
+----+------------------+------------+----------+---------+-------+----------------------------+
| Id | Binary | Host | Zone | Status | State | Updated At |
+----+------------------+------------+----------+---------+-------+----------------------------+
| 1 | nova-consoleauth | controller | internal | enabled | up | 2026-08-25T06:47:50.000000 |
| 2 | nova-conductor | controller | internal | enabled | up | 2026-08-25T06:47:51.000000 |
| 4 | nova-scheduler | controller | internal | enabled | up | 2026-08-25T06:47:51.000000 |
| 7 | nova-compute | computer1 | nova | enabled | up | 2026-08-25T06:47:58.000000 |
+----+------------------+------------+----------+---------+-------+----------------------------+
执行 openstack compute service list 可以查看计算服务各组件的运行状态。如果所有服务的 Status 均为 enabled、State 均为 up,说明 Nova 各组件运行正常。其中 nova-compute 运行在 computer1 节点上,说明计算节点已成功接入。
此外,还可以通过 systemctl status 命令检查各服务的系统服务状态,例如 systemctl status openstack-glance-api.service 和 systemctl status openstack-nova-compute.service。如果服务状态显示为 active (running),说明服务进程正常运行。通过以上验证方法,可以确认镜像服务和计算服务均已正确配置并正常运行。