openstack 在 pci clam 中失败并缓存了坏数据

openstack 在 pci clam 中失败并缓存了坏数据

我有一个带有一个控制节点和两个计算节点的 openstack 实例,我们的生产运行良好,直到 3 天前,但现在如果我们想创建具有 RTX-3090-flavor 的实例,则创建会失败,并且 nova-conductor 和 nova-scheduler 模块会返回此错误:

==> /var/log/nova/nova-scheduler.log <==

2023-12-06 15:55:13.473 4056084 警告 nova.scheduler.host_manager [req-806e9ab9-1440-48a0-8afa-b262e3b2d5fa 9ea1804cf324402e835199247f9dcd5e 6b51e04295ca42b9a5e3b5cb2d7afef7 - default default] 选定的主机:compute-23 无法从实例中使用。错误:PCI 设备请求 [InstancePCIRequest(alias_name='x1',count=1,is_new=,numa_policy='legacy',request_id=,requester_id=,spec=[{dev_type='type-PCI',product_id='2204',vendor_id='10de'}]), InstancePCIRequest(alias_name='x2',count=1,is_new=,numa_policy='legacy',request_id=,requester_id=,spec=[{dev_type='type-PCI',product_id='1aef',vendor_id='10de'}])] 失败:nova.exception.PciDeviceRequestFailed:PCI 设备请求[InstancePCIRequest(alias_name='x1',count=1,is_new=,numa_policy='legacy',request_id=,requester_id=,spec=[{dev_type='type-PCI',product_id='2204',vendor_id='10de'}]), InstancePCIRequest(alias_name='x2',count=1,is_new=,numa_policy='legacy',request_id=,requester_id=,spec=[{dev_type='type-PCI',product_id='1aef',vendor_id='10de'}])] 失败

==> /var/log/nova/nova-conductor.log <==

[req-806e9ab9-1440-48a0-8afa-b262e3b2d5fa 9ea1804cf324402e835199247f9dcd5e 6b51e04295ca42b9a5e3b5cb2d7afef7 - default default] [instance: 9a1a1875-789b-4174-8d33-4b59b79d14c7] 来自上一个主机的错误:compute-23(节点 compute-23):['Traceback(最近一次调用最后一次):\n', ' 文件“/usr/lib/python3/dist-packages/nova/compute/manager.py”, 第 2416 行, 在 _build_and_run_instance\n 中使用 self.rt.instance_claim(context, instance, node, allocs,\n','文件“/usr/lib/python3/dist-packages/oslo_concurrency/lockutils.py”,第 360 行,在 inner\n return f(*args, **kwargs)\n','文件“/usr/lib/python3/dist-packages/nova/compute/resource_tracker.py”,第 171 行,在 instance_claim\n claim = claims.Claim(context, instance, nodename, self, cn,\n','文件“/usr/lib/python3/dist-packages/nova/compute/claims.py”,第 72 行,在 在里面\n self._claim_test(compute_node, limits)\n', ' 文件“/usr/lib/python3/dist-packages/nova/compute/claims.py”, 第 113 行, 位于 _claim_test\n 中 引发异常。ComputeResourcesUnavailable(reason=\n', 'nova.exception.ComputeResourcesUnavailable:计算资源不足:声明 pci 失败。\n', '\n在处理上述异常期间,发生了另一个异常:\n\n', '回溯(最近一次调用最后一次):\n', ' 文件“/usr/lib/python3/dist-packages/nova/compute/manager.py”, 第 2268 行, 位于 _do_build_and_run_instance\n
self._build_and_run_instance(context, instance, image,\n', ' 文件“/usr/lib/python3/dist-packages/nova/compute/manager.py”,第 2467 行,在 _build_and_run_instance\n 中引发异常。RescheduledException(\n','nova.exception.RescheduledException:实例 9a1a1875-789b-4174-8d33-4b59b79d14c7 的构建已重新安排:计算资源不足:声明 pci 失败。\n'] 2023-12-06 15:55:14.832 4056074 警告 nova.scheduler.utils [req-806e9ab9-1440-48a0-8afa-b262e3b2d5fa 9ea1804cf324402e835199247f9dcd5e 6b51e04295ca42b9a5e3b5cb2d7afef7 - default default] 无法计算任务构建实例:超过最大重试次数。已用尽所有可用于重试实例 9a1a1875-789b-4174-8d33-4b59b79d14c7 构建失败的主机。:nova.exception.MaxRetriesExceeded:超过最大重试次数。已用尽所有可用于重试实例 9a1a1875-789b-4174-8d33-4b59b79d14c7 构建失败的主机。 2023-12-06 15:55:14.833 4056074 警告 nova.scheduler.utils [req-806e9ab9-1440-48a0-8afa-b262e3b2d5fa 9ea1804cf324402e835199247f9dcd5e 6b51e04295ca42b9a5e3b5cb2d7afef7 - default default] [instance: 9a1a1875-789b-4174-8d33-4b59b79d14c7] 将实例设置为错误状态。: nova.exception.MaxRetriesExceeded: 超过最大重试次数。已用尽所有可用于重试构建失败的主机,例如 9a1a1875-789b-4174-8d33-4b59b79d14c7.2023-12-06 15:55:14.828 4056074 ERROR nova.scheduler.utils

我们每个计算节点都有 4 个 RTX-3090。如果我们想创建 3 个图形实例,这是没问题的,但第四个实例返回了上述错误。

我可以从虚拟机管理程序(KVM)本身创建虚拟机,并且 GPU 直通对于最后一个 PCI 设备来说是可以的。但是从 Openstack 来看,nova compute 返回“无法捕获 PCI”,它认为所有四个 GPU 都已被使用,但其中三个只是被使用了。

Openstack 是否缓存这些可用资源?3 天前它运行正常。

我仔细检查了 nova-compute 和 nova-api 配置文件,所有 pci 直通配置都没有问题。

先谢谢了。

答案1

4-5 天后,我们解决了这个问题。在连接到 openstack 控制器的 mysql 数据库中,有一个 NOVA 数据库,并且有 PCI 地址表,有一个实例连接到 pci 地址,但实例 ID 在 openstack 上不存在。因此 openstack 认为 pci 地址已被使用,但实际上没有机器在使用它。因此,我从 PCI 地址表中删除了该机器,一切都解决了。

相关内容