11.3. 升级到 RHOSP 17 后为主机更新默认机器类型
实例的机器类型是一个虚拟芯片组,提供某些默认设备,如 PCIe 图形卡或以太网控制器。云用户可以使用带有 hw_machine_type
元数据属性的镜像为其实例指定机器类型。
云管理员可以使用 Compute 参数 NovaHWMachineType
配置每个 Compute 节点架构,使其具有默认的机器类型,以应用到托管在该架构上的实例。如果在启动实例时不提供 hw_machine_type
镜像属性,则主机架构的默认机器类型将应用到实例。Red Hat OpenStack Platform (RHOSP) 17 基于 RHEL 9。RHEL 9 中弃用了 pc-i440fx
QEMU 机器类型,因此在 RHEL 9 上运行的 x86_64
实例的默认机器类型已从 pc
改为 q35
。根据 RHEL 9 中的这个变化,机器类型 x86_64
的默认值也从 RHOSP 16 中的 pc
改为 q35
(在 RHOSP 17 中)。
在 RHOSP 16.2 及之后的版本中,Compute 服务会在实例启动时记录实例元数据中的实例类型。这意味着,现在可以在 RHOSP 部署生命周期内更改 NovaHWMachineType
,而不影响现有实例的机器类型。
Compute 服务记录了不在 SHELVED_OFFLOADED
状态的实例类型。因此,在升级到 RHOSP 17 后,您必须手动记录处于 SHELVED_OFFLOADED
状态的机器类型,并验证环境或特定单元中的所有实例是否已记录机器类型。使用机器类型更新每个实例的系统元数据后,您可以将 NovaHWMachineType
参数更新为 RHOSP 17 默认 q35
,而不影响现有实例的机器类型。
先决条件
- 将所有 Compute 节点升级到 RHEL 9.2。有关升级 Compute 节点的更多信息,请参阅 将所有 Compute 节点升级到 RHEL 9.2。
流程
-
以
stack
用户的身份登录 undercloud。 source
stackrc
文件:$ source ~/stackrc
以
heat-admin
用户身份登录 Controller 节点:(undercloud)$ metalsmith list $ ssh heat-admin@<controller_ip>
将
<controller_ip
> 替换为 Controller 节点的 IP 地址。检索没有设置机器类型的实例列表:
[heat-admin@<controller_ip> ~]$ sudo podman exec -i -u root nova_api \ nova-manage libvirt list_unset_machine_type
检查
nova-hw-machine-type-upgrade.yaml
文件中的NovaHWMachineType
参数,以获取实例主机的默认机器类型。RHOSP 16.2 中NovaHWMachineType
参数的默认值如下:x86_64=pc-i440fx-rhel7.6.0,aarch64=virt-rhel7.6.0,ppc64=pseries-rhel7.6.0,ppc64le=pseries-rhel7.6.0
使用默认实例类型更新每个实例的系统元数据:
[heat-admin@<controller_ip> ~]$ sudo podman exec -i -u root nova_api \ nova-manage libvirt update_machine_type <instance_uuid> <machine_type>
-
将
<instance_uuid
> 替换为实例的 UUID。 -
将
<machine_type>
替换为要记录的实例类型。
-
将
确认为所有实例记录了机器类型:
[heat-admin@<controller_ip> ~]$ sudo podman exec -i -u root nova_api \ nova-status upgrade check
如果实例在没有机器类型的情况下找到,这个命令会返回一个警告。如果收到这个警告,请从第 4 步重复这个过程。
-
将 Compute 环境文件中的
NovaHWMachineType
默认值更改为x86_64=q35
并部署 overcloud。
验证
创建具有默认机器类型的实例:
(overcloud)$ openstack server create --flavor <flavor> \ --image <image> --network <network> \ --wait defaultMachineTypeInstance
-
将
<flavor
> 替换为实例的类别名称或 ID。 -
将
<image
> 替换为没有设置hw_machine_type
的镜像的名称或 ID。 -
将 &
lt;network
> 替换为要连接实例的网络的名称或 ID。
-
将
验证实例机器类型是否已设置为默认值:
[heat-admin@<controller_ip> ~]$ sudo podman exec -i -u root nova_api \ nova-manage libvirt get_machine_type <instance_uuid>
将
<instance_uuid
> 替换为实例的 UUID。硬重启一个类型为
x86_64=pc-i440fx
的实例:(overcloud)$ openstack server reboot --hard <instance_uuid>
将
<instance_uuid
> 替换为实例的 UUID。验证实例机器类型尚未更改:
[heat-admin@<controller_ip> ~]$ sudo podman exec -i -u root nova_api \ nova-manage libvirt get_machine_type <instance_uuid>
将
<instance_uuid
> 替换为实例的 UUID。