摘要

Nova 是 OpenStack 的核心组件之一,负责管理和调度虚拟机实例的生命周期。本文档将指导你在 OpenStack 控制节点上部署 Nova 计算服务。

实验架构
实验架构

本实验基于 CentOS 7.9 和 OpenStack Rocky,采用全新部署的 Cells v2 架构。

Nova 组件简介

Nova 主要由以下几个核心组件构成:

  • nova-api:接收并响应外部计算 API 的请求。
  • nova-scheduler:决定将虚拟机实例分配到哪个计算节点上运行。
  • nova-conductor:充当 nova-compute 与数据库之间的中间层,提高系统安全性。
  • nova-novncproxy:提供通过 Web 浏览器访问虚拟机控制台的功能。
  • placement-api:负责跟踪和管理资源(如 CPU、内存、存储)的使用情况。

Nova计算服务
Nova计算服务

准备工作

部署流程
部署流程

  1. 打开宿主机上的 VMnet1 和 VMnet8 网卡;
  2. 使用 MobaXterm 连接虚拟机;
  3. 执行以下脚本完成实验环境准备:
curl -s http://192.168.192.205/scripts/env3-3-local.sh | bash

一、数据库创建及授权

在安装配置 Nova 前,我们需要先为它创建相应的数据库。Nova 及相关服务共需要使用四个数据库:nova_api、 nova、nova_cell0 和 placement。创建完毕后,还需为这些数据库分配相应的访问权限。

1、以 root 用户身份连接到数据库服务器

连接时请使用你在环境准备阶段安装 MariaDB 时设置的密码(默认密码是 123456):

mysql -u root -p

连接数据库
连接数据库

2、创建以下四个数据库:

create database nova_api;
create database nova;
create database nova_cell0;
create database placement;

创建数据库
创建数据库

3、创建 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';

数据库授权
数据库授权

4、完成数据库的创建和授权后,退出数据库命令行:

exit

二、创建服务凭证

1、运行 admin-openstack.sh 脚本,获取管理员命令行执行权限:

source admin-openstack.sh
提示

在执行以下 OpenStack 命令行操作前,必须先加载管理员的凭证文件,以便获取执行命令所需的权限。

2、在 default 域内创建名为 nova 的用户,并按照提示将密码设置为 nova:

openstack user create nova --domain default --password-prompt 

创建服务凭证(OpenStack用户)
创建服务凭证(OpenStack用户)

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

验证
验证

3、为 nova 用户赋予 service 项目的 admin(管理员)权限:

openstack role add admin --project service --user nova

4、创建 nova 的计算服务(compute service)实体:

openstack service create compute --name nova --description "OpenStack Compute"

WRXNvG
WRXNvG

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

Pl8GN3
Pl8GN3

5、为计算服务创建 API 端点。端点分为公共(public)、内部(internal)和管理(admin)三种类型,分别用于不同场景的访问。

公共端点:

openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1

isOoSV
isOoSV

内部端点:

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

EIESDN
EIESDN

管理端点:

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

kcyk6V
kcyk6V

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

gnkGvT
gnkGvT

6、创建 placement 用户,并按照提示将密码设置为 placement:

openstack user create placement --domain default --password-prompt

jBxZP9
jBxZP9

7、将 placement 用户加入到 service 项目,并设置 admin 权限:

openstack role add admin --project service --user placement 

8、在服务目录中创建 placement 的 API 实体:

openstack service create placement --name placement --description "Placement API" 

0UwizG
0UwizG

9、为 placement 服务创建对应的 API 端点:

公共端点:

openstack endpoint create --region RegionOne placement public http://controller:8778

daBnkB
daBnkB

内部端点:

openstack endpoint create --region RegionOne placement internal http://controller:8778

VdIGTs
VdIGTs

管理端点:

openstack endpoint create --region RegionOne placement admin http://controller:8778

cvdGPx
cvdGPx

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

openstack endpoint list --service placement

0qEWOt
0qEWOt

三、安装并配置 Nova 组件

1、安装 Nova 及 Placement 相关的软件包:

yum install openstack-nova-api \
openstack-nova-conductor \
openstack-nova-novncproxy \
openstack-nova-scheduler \
openstack-nova-placement-api

2、编辑 /etc/nova/nova.conf 配置文件,用以下内容替换原文件内容:

[DEFAULT]
# 配置 IP 地址,将其替换为你自己控制节点的 IP 地址
my_ip = 192.168.30.129
# 启用对网络服务的支持
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
# 启用计算和元数据 API
enabled_apis = osapi_compute,metadata
# 配置 RabbitMQ 消息队列访问
transport_url = rabbit://openstack:openstack@controller

# 配置数据库访问
[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

# 配置身份服务访问
[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

# 配置 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

3、由于某些软件包存在的 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>

4、重启 httpd 服务,使刚才的配置生效:

提示

使用 systemctl 命令管理服务:

  • start 启动
  • enable 开机自动启动
  • restart 重启
  • status 查看状态
systemctl restart httpd

四、同步数据库

1、同步 nova_api 和 placement 数据库:

su -s /bin/sh -c "nova-manage api_db sync" nova

2、 注册 cell0 数据库:

su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

3、创建 cell1 单元:

su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

4、同步 nova 数据库:

su -s /bin/sh -c "nova-manage db sync" nova

5、验证 nova 的 cell0 和 cell1 是否已成功注册:

su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

bJMVh5
bJMVh5

6、检查各数据库下是否能正常显示数据表,以验证数据库同步是否正确。

技巧

你可以使用 Dataflare 等数据库可视化工具连接到数据库,查看 nova、nova_api、nova_cell0 和 placement 数据库中是否已经自动生成了相应的数据表。

五、启动服务并设置开机自启

1、启动 Nova 相关的四个核心服务:

systemctl start \
openstack-nova-api \
openstack-nova-scheduler \
openstack-nova-conductor \
openstack-nova-novncproxy

2、将这些服务设置为随系统开机自动启动:

systemctl enable \
openstack-nova-api.service \
openstack-nova-scheduler \
openstack-nova-conductor \
openstack-nova-novncproxy

N2Leom
N2Leom

3、最后,检查这些服务的运行状态,确保它们都已正常启动:

systemctl status \
openstack-nova-api.service \
openstack-nova-scheduler \
openstack-nova-conductor \
openstack-nova-novncproxy

Zxk5Fk
Zxk5Fk

检查完成情况

已部署的组件
已部署的组件

执行以下命令,对操作结果进行检测:

curl -s http://192.168.192.205/scripts/3.4.sh | bash