3.4 控制节点部署Nova

系列 - OpenStack云平台部署
目录
摘要
本文档将指导你在 OpenStack 控制节点上部署和配置 Nova 计算服务。Nova 是 OpenStack 的核心组件之一,负责管理和调度虚拟机实例的生命周期。我们将完成数据库配置、服务凭证创建、核心组件安装及数据库同步等关键步骤。
实验架构

Nova组件简介
Nova 主要由以下几个核心组件构成:
- nova-api:接收并响应外部计算 API 的请求。
- nova-scheduler:决定将虚拟机实例分配到哪个计算节点上运行。
- nova-conductor:充当
nova-compute与数据库之间的中间层,提高系统安全性。 - nova-novncproxy:提供通过 Web 浏览器访问虚拟机控制台的功能。
- placement-api:负责跟踪和管理资源(如 CPU、内存、存储)的使用情况。
部署过程
一、数据库创建及授权
在安装配置 Nova 前,我们需要先为它创建相应的数据库。Nova 及相关服务共需要使用四个数据库:nova_api、 nova、nova_cell0 和 placement。创建完毕后,还需为这些数据库分配相应的访问权限。
- 以
root用户身份连接到数据库服务器。连接时请使用你在环境准备阶段安装 MariaDB 时设置的密码(默认密码是admin123):
mysql -uroot -p

- 创建以下四个数据库:
create database nova_api;
create database nova;
create database nova_cell0;
create database placement;

- 创建
nova和placement两个数据库用户,并为它们授予对应数据库的所有权限。你可以参考下表了解用户与数据库的对应关系:
| 用户名 | 密码 | 允许访问的数据库 |
|---|---|---|
| nova | nova | nova_api, nova, nova_cell0 |
| placement | placement | placement |
grant all privileges on nova_api.* to 'nova'@'%' identified by 'nova';
grant all privileges on nova.* to 'nova'@'%' identified by 'nova';
grant all privileges on nova_cell0.* to 'nova'@'%' identified by 'nova';
grant all privileges on placement.* to 'placement'@'%' identified by 'placement';

- 完成数据库的创建和授权后,退出数据库命令行:
exit
二、创建服务凭证
提示
在执行以下 OpenStack 命令行操作前,必须先加载管理员的凭证文件,以便获取执行命令所需的权限。
- 运行
admin-openstack.sh脚本,获取管理员命令行执行权限:
source admin-openstack.sh
- 在
default域内创建名为nova的用户,并按照提示将密码设置为nova:
openstack user create nova --domain default --password-prompt

验证:你可以使用以下命令查看 default 域内的所有用户,确认 nova 用户是否创建成功。

- 为
nova用户赋予service项目的admin(管理员)权限:
openstack role add admin --project service --user nova
- 创建
nova的计算服务(compute service)实体:
openstack service create compute --name nova --description "OpenStack Compute"

验证:你可以查看所有的服务列表,确认 nova 服务是否创建成功。

- 为计算服务创建 API 端点。端点分为公共(public)、内部(internal)和管理(admin)三种类型,分别用于不同场景的访问。
公共端点:
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1

内部端点:
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1

管理端点:
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1

验证:查看计算服务的端点是否创建成功。

- 创建
placement用户,并按照提示将密码设置为placement:
openstack user create placement --domain default --password-prompt

- 将
placement用户加入到service项目,并设置admin权限:
openstack role add admin --project service --user placement
- 在服务目录中创建
placement的 API 实体:
openstack service create placement --name placement --description "Placement API"

- 为
placement服务创建对应的 API 端点:
公共端点:
openstack endpoint create --region RegionOne placement public http://controller:8778

内部端点:
openstack endpoint create --region RegionOne placement internal http://controller:8778

管理端点:
openstack endpoint create --region RegionOne placement admin http://controller:8778

验证:你可以使用以下命令查看 placement 服务的端点信息。
openstack endpoint list --service placement

三、安装并配置 Nova 组件
- 安装 Nova 及 Placement 相关的软件包:
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler openstack-nova-placement-api
- 编辑
/etc/nova/nova.conf配置文件。请根据以下内容修改或添加配置:
注意
请谨慎修改配置文件,确保每一项都在正确的配置块(例如
[DEFAULT]、[api_database])下。# 仅启用计算和元数据 API
[DEFAULT]
enabled_apis = osapi_compute,metadata
# 配置数据库访问
[api_database]
connection = mysql+pymysql://nova:nova@controller/nova_api
[database]
connection = mysql+pymysql://nova:nova@controller/nova
[placement_database]
connection = mysql+pymysql://placement:placement@controller/placement
# 配置 RabbitMQ 消息队列访问
[DEFAULT]
transport_url = rabbit://openstack:openstack@controller
# 配置身份服务访问
[api]
auth_strategy = keystone
[keystone_authtoken]
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = nova
# 配置 IP 地址
[DEFAULT]
my_ip = 192.168.30.100 # 请将其替换为你自己控制节点的 IP 地址
# 启用对网络服务的支持
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
# 配置 VNC 代理以使用控制器节点的管理接口 IP 地址
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
# 配置 Image 服务 API 的位置
[glance]
api_servers = http://controller:9292
# 配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
# 配置 Placement API
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = placement
- 由于某些软件包存在的 Bug,我们需要将以下配置追加到
/etc/httpd/conf.d/00-nova-placement-api.conf文件的末尾,以允许对 Placement API 的正常访问:
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
- 重启
httpd服务,使刚才的配置生效:
信息
使用 systemctl 命令管理服务:
start启动enable开机自动启动restart重启status查看状态
自己写出命令
四、数据库同步
- 同步
nova-api和placement数据库:
su -s /bin/sh -c "nova-manage api_db sync" nova
- 注册
cell0数据库:
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
- 创建
cell1单元:
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
- 同步
nova数据库:
su -s /bin/sh -c "nova-manage db sync" nova
- 验证
nova的cell0和cell1是否已成功注册:
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

- 检查各数据库下是否能正常显示数据表,以验证数据库同步是否正确。
技巧
你可以使用 Navicat 等数据库可视化工具连接到数据库,查看
nova、nova_api、nova_cell0 和 placement 数据库中是否已经自动生成了相应的数据表。五、启动服务并设置开机自启
- 启动 Nova 相关的五个核心服务:
systemctl start \
openstack-nova-api.service \
openstack-nova-consoleauth \
openstack-nova-scheduler \
openstack-nova-conductor \
openstack-nova-novncproxy
- 将这些服务设置为随系统开机自动启动:
systemctl enable \
openstack-nova-api.service \
openstack-nova-consoleauth \
openstack-nova-scheduler \
openstack-nova-conductor \
openstack-nova-novncproxy

- 最后,检查这些服务的运行状态,确保它们都已正常启动:
systemctl status \
openstack-nova-api.service \
openstack-nova-consoleauth \
openstack-nova-scheduler \
openstack-nova-conductor \
openstack-nova-novncproxy

结果自测
登录 http://192.168.192.205:3050,进入“自助服务——Web SSH”功能模块,连接服务器后执行“3.4 控制节点部署Nova”脚本

