3.5 计算节点部署Nova

准备工作
在开始部署 Nova 计算节点之前,我们需要先进行一些基础配置,确保系统环境正常。
1. 基础安全设置
为了避免实验过程中受到防火墙和安全策略的干扰,我们需要先关闭计算节点的防火墙和 SELinux。
在计算节点上执行以下命令:
# 关闭防火墙并设置开机不启动
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭 SELinux
setenforce 0
# 修改配置文件,永久关闭 SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2. 配置主机名解析
为了让控制节点和计算节点能够互相找到对方,我们需要在两个节点的 /etc/hosts 文件中添加互相的 IP 地址和主机名映射。
首先,在控制节点上更新 /etc/hosts 文件,把下面命令中的 192.168.192.92 改成你自己的计算节点 IP 地址:
echo "192.168.192.92 compute" >> /etc/hosts
然后,在计算节点上设置主机名,并更新 /etc/hosts 文件(注意修改为你实际的 IP 地址):
# 设置主机名为 compute
hostnamectl set-hostname compute
# 添加解析记录
echo "192.168.192.199 controller" >> /etc/hosts
echo "192.168.192.92 compute" >> /etc/hosts
设置完成后,可以通过 ping 命令测试两个节点是否能够通过主机名互相连通:

3. 配置 NTP 时间同步
OpenStack 的各个组件之间对时间同步要求非常严格,如果时间不一致会导致很多服务无法正常运行。因此我们需要将计算节点的时间同步到控制节点。
- 安装 chrony 时间同步工具:
yum install chrony -y
- 修改配置文件:
打开 /etc/chrony.conf 文件,设置 compute 节点向 controller 节点同步时间。将原本的默认外网服务器注释掉,并添加 server controller iburst。
server controller iburst
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

- 启动 NTP 服务并设置开机自启:
systemctl enable chronyd
systemctl start chronyd
验证服务是否正常启动:

- 验证时间同步状态:
使用以下命令查看时间同步源:
chronyc sources
如果在输出结果中看到 ^* controller,说明时间已经成功同步。

4. 配置软件源
为了能够顺利安装 OpenStack 的相关软件包,我们需要安装 OpenStack 的软件源,并将其替换为国内的镜像站(例如阿里云),以提升下载速度。
- 安装 OpenStack Rocky 版本的官方源:
yum install centos-release-openstack-rocky -y
- 替换为阿里云镜像源:
由于 CentOS 7 的官方源已经停止维护,我们需要通过以下脚本将其替换为阿里云的归档源:
# 1. 禁用所有 CentOS 相关仓库的动态镜像列表 (mirrorlist)
sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo
# 2. 启用所有 CentOS 相关仓库的基础地址 (baseurl)
sed -i 's|^#baseurl=|baseurl=|g' /etc/yum.repos.d/CentOS-*.repo
# 3. 将默认的官方失效地址,统一精确替换为阿里云的 7.9.2009 归档路径
sed -i 's|http://mirror.centos.org/centos/7|https://mirrors.aliyun.com/centos-vault/7.9.2009|g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|http://mirror.centos.org/$contentdir/7|https://mirrors.aliyun.com/centos-vault/7.9.2009|g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|http://mirror.centos.org/centos/$releasever|https://mirrors.aliyun.com/centos-vault/7.9.2009|g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|http://mirror.centos.org/$contentdir/$releasever|https://mirrors.aliyun.com/centos-vault/7.9.2009|g' /etc/yum.repos.d/CentOS-*.repo
# 4. 修复部分扩展组件(如 QEMU-EV)自带的构建日志服务器地址
sed -i 's|http://buildlogs.centos.org/centos/7|https://mirrors.aliyun.com/centos-vault/7.9.2009|g' /etc/yum.repos.d/CentOS-*.repo
- 清理并重建 YUM 缓存:
执行以下命令使配置生效,测试镜像源是否能够正常连通:
yum clean all
yum makecache
部署过程
基础环境准备好之后,我们就可以开始在计算节点上安装 Nova 组件了。
1. 安装并配置 Nova 计算组件
- 安装
openstack-nova-compute软件包:
在计算节点上执行:
yum install openstack-nova-compute -y
- 编辑
/etc/nova/nova.conf配置文件:
打开配置文件,修改以下内容。请特别注意其中的 IP 地址需要替换为你自己环境中的实际 IP。
[DEFAULT]
# 启用计算和元数据 API
enabled_apis = osapi_compute,metadata
# 配置 RabbitMQ 消息队列访问
transport_url = rabbit://openstack:openstack@controller
# 配置计算节点的管理 IP 地址,注意修改为你自己的 compute 节点 IP
my_ip = 192.168.16.200
# 启用 Neutron 网络服务支持
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api]
# 配置身份服务访问策略
auth_strategy = keystone
[keystone_authtoken]
# Keystone 认证相关配置
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]
# 配置 VNC 代理以使用控制节点的管理接口 IP 地址
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
# 注意修改此处的 IP 地址为控制节点的 IP(即提供 VNC 代理的节点)
novncproxy_base_url = http://192.168.16.100:6080/vnc_auto.html
[glance]
# 配置 Image(镜像)服务 API 的位置
api_servers = http://controller:9292
[oslo_concurrency]
# 配置并发锁定路径
lock_path = /var/lib/nova/tmp
[placement]
# 配置 Placement API(资源分配服务)
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
在上面的配置文件中:
my_ip应该配置为当前计算节点的管理 IP 地址。novncproxy_base_url中的 IP 地址应该配置为控制节点的 IP 地址,因为 VNC 代理服务通常运行在控制节点上。 请根据你实际的网络规划进行替换,不要直接照抄示例!
- 配置硬件加速:
我们需要确认计算节点是否支持虚拟机的硬件加速功能。在计算节点执行:
egrep -c '(vmx|svm)' /proc/cpuinfo
如果该命令返回值大于或等于 1,说明计算节点支持硬件加速,不需要做任何修改;
如果返回值为 0,说明计算节点不支持硬件加速,此时必须在 /etc/nova/nova.conf 配置文件中,找到 [libvirt] 部分,将虚拟化类型修改为 qemu(软件模拟)。
[libvirt]
virt_type = qemu
- 启动计算服务:
启动计算服务及其依赖的虚拟化服务(libvirtd),并设置为开机自启:
systemctl start libvirtd openstack-nova-compute
systemctl enable libvirtd openstack-nova-compute
验证服务运行状态,确保没有报错:

2. 将计算节点添加到 Cell 数据库
完成计算节点的配置后,我们需要将其注册到 Nova 的数据库中,让控制节点能够“发现”并管理这个新的计算节点。
- 加载管理员环境变量:
source admin-openstack.sh
- 确认计算服务已经注册:
检查控制节点是否已经能看到计算节点上的 nova-compute 服务:
openstack compute service list --service nova-compute
如果配置正确,你会看到列表中显示了新的计算节点。

- 发现并添加计算节点:
执行以下命令,让 Nova 扫描并把新的计算节点添加到 Cell 数据库中:
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

默认情况下,每次添加新的计算节点时,都必须在控制节点上手动运行一次注册命令。如果你希望系统能自动发现,可以在控制节点的 /etc/nova/nova.conf 中配置定时扫描(例如每 300 秒扫描一次):
[scheduler]
discover_hosts_in_cells_interval = 300
3. 验证部署结果
最后,我们在控制节点上进行全面的检查,确保各项服务都正常工作。
- 检查所有计算服务组件状态:
确保所有的服务(包括 controller 上的 3 个服务和 compute 上的 1 个服务)状态(State)都是 up。
openstack compute service list

- 检查与 Identity (Keystone) 服务的连接:
列出所有的 API 端点,确认服务目录正常。
openstack catalog list

- 检查与 Image (Glance) 服务的连接:
列出系统中的镜像,确认能获取到之前上传的镜像列表。
openstack image list

- 检查整体运行状态:
使用 Nova 自带的检查工具确认 Cells 和 Placement 等 API 是否运行正常。
nova-status upgrade check
如果所有的检查项结果都是 Success,那么恭喜你,计算节点的 Nova 部署已经顺利完成!
