3.5 计算节点部署Nova

摘要
本实验手册将指导你完成 OpenStack 计算节点(Compute Node)的基础环境配置以及 Nova 计算服务的安装与部署。

在开始部署 Nova 计算节点之前,我们需要先进行一些基础配置,确保系统环境正常。

为了避免实验过程中受到防火墙和安全策略的干扰,我们需要先关闭计算节点的防火墙和 SELinux。

计算节点上执行以下命令:

bash

# 关闭防火墙并设置开机不启动
systemctl stop firewalld
systemctl disable firewalld

# 临时关闭 SELinux
setenforce 0

# 修改配置文件,永久关闭 SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

为了让控制节点和计算节点能够互相找到对方,我们需要在两个节点的 /etc/hosts 文件中添加互相的 IP 地址和主机名映射。

首先,在控制节点上更新 /etc/hosts 文件,把下面命令中的 192.168.192.92 改成你自己的计算节点 IP 地址:

bash

echo "192.168.192.92 compute" >> /etc/hosts

然后,在计算节点上设置主机名,并更新 /etc/hosts 文件(注意修改为你实际的 IP 地址):

bash

# 设置主机名为 compute
hostnamectl set-hostname compute

# 添加解析记录
echo "192.168.192.199 controller" >> /etc/hosts
echo "192.168.192.92 compute" >> /etc/hosts

设置完成后,可以通过 ping 命令测试两个节点是否能够通过主机名互相连通:

1778395551785

OpenStack 的各个组件之间对时间同步要求非常严格,如果时间不一致会导致很多服务无法正常运行。因此我们需要将计算节点的时间同步到控制节点。

  1. 安装 chrony 时间同步工具

bash

yum install chrony -y
  1. 修改配置文件

打开 /etc/chrony.conf 文件,设置 compute 节点向 controller 节点同步时间。将原本的默认外网服务器注释掉,并添加 server controller iburst

text

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

1778395829201

  1. 启动 NTP 服务并设置开机自启

bash

systemctl enable chronyd
systemctl start chronyd

验证服务是否正常启动:

1778395905919

  1. 验证时间同步状态

使用以下命令查看时间同步源:

bash

chronyc sources

如果在输出结果中看到 ^* controller,说明时间已经成功同步。

1778395955819

为了能够顺利安装 OpenStack 的相关软件包,我们需要安装 OpenStack 的软件源,并将其替换为国内的镜像站(例如阿里云),以提升下载速度。

  1. 安装 OpenStack Rocky 版本的官方源

bash

yum install centos-release-openstack-rocky -y
  1. 替换为阿里云镜像源

由于 CentOS 7 的官方源已经停止维护,我们需要通过以下脚本将其替换为阿里云的归档源:

bash

# 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
  1. 清理并重建 YUM 缓存

执行以下命令使配置生效,测试镜像源是否能够正常连通:

bash

yum clean all
yum makecache

基础环境准备好之后,我们就可以开始在计算节点上安装 Nova 组件了。

  1. 安装 openstack-nova-compute 软件包

在计算节点上执行:

bash

yum install openstack-nova-compute -y
  1. 编辑 /etc/nova/nova.conf 配置文件

打开配置文件,修改以下内容。请特别注意其中的 IP 地址需要替换为你自己环境中的实际 IP。

ini

[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
注意配置中的 IP 地址

在上面的配置文件中:

  • my_ip 应该配置为当前计算节点的管理 IP 地址。
  • novncproxy_base_url 中的 IP 地址应该配置为控制节点的 IP 地址,因为 VNC 代理服务通常运行在控制节点上。 请根据你实际的网络规划进行替换,不要直接照抄示例!
  1. 配置硬件加速

我们需要确认计算节点是否支持虚拟机的硬件加速功能。在计算节点执行:

bash

egrep -c '(vmx|svm)' /proc/cpuinfo

如果该命令返回值大于或等于 1,说明计算节点支持硬件加速,不需要做任何修改; 如果返回值为 0,说明计算节点不支持硬件加速,此时必须在 /etc/nova/nova.conf 配置文件中,找到 [libvirt] 部分,将虚拟化类型修改为 qemu(软件模拟)。

ini

[libvirt]
virt_type = qemu
  1. 启动计算服务

启动计算服务及其依赖的虚拟化服务(libvirtd),并设置为开机自启:

bash

systemctl start libvirtd openstack-nova-compute
systemctl enable libvirtd openstack-nova-compute

验证服务运行状态,确保没有报错:

1778397047270

完成计算节点的配置后,我们需要将其注册到 Nova 的数据库中,让控制节点能够“发现”并管理这个新的计算节点。

说明
接下来的操作需要回到 控制节点 (controller) 上执行。
  1. 加载管理员环境变量

bash

source admin-openstack.sh
  1. 确认计算服务已经注册

检查控制节点是否已经能看到计算节点上的 nova-compute 服务:

bash

openstack compute service list --service nova-compute

如果配置正确,你会看到列表中显示了新的计算节点。

1778397220346

  1. 发现并添加计算节点

执行以下命令,让 Nova 扫描并把新的计算节点添加到 Cell 数据库中:

bash

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

1778397247924

自动发现小技巧

默认情况下,每次添加新的计算节点时,都必须在控制节点上手动运行一次注册命令。如果你希望系统能自动发现,可以在控制节点的 /etc/nova/nova.conf 中配置定时扫描(例如每 300 秒扫描一次):

ini

[scheduler]
discover_hosts_in_cells_interval = 300

最后,我们在控制节点上进行全面的检查,确保各项服务都正常工作。

  1. 检查所有计算服务组件状态

确保所有的服务(包括 controller 上的 3 个服务和 compute 上的 1 个服务)状态(State)都是 up

bash

openstack compute service list

1778397402188

  1. 检查与 Identity (Keystone) 服务的连接

列出所有的 API 端点,确认服务目录正常。

bash

openstack catalog list

1778397456847

  1. 检查与 Image (Glance) 服务的连接

列出系统中的镜像,确认能获取到之前上传的镜像列表。

bash

openstack image list

1778397517707

  1. 检查整体运行状态

使用 Nova 自带的检查工具确认 Cells 和 Placement 等 API 是否运行正常。

bash

nova-status upgrade check

如果所有的检查项结果都是 Success,那么恭喜你,计算节点的 Nova 部署已经顺利完成!

1778397535649