0
我们有一个配置了多个映像的 OpenStack 实例,包括 CentOS、Redhat 和 Ubuntu。创建新实例时,根分区以 SCSI 形式连接,没有任何问题。所有映像都正确设置为使用适当的驱动程序。
但是,当从正在运行的实例生成快照,然后使用此卷快照创建新服务器时,会出现问题。在这种情况下,根分区显示为“/dev/vda”。当附加新卷时,会出现更麻烦的情况,新卷随后显示为“/dev/sda”。这个新卷将成为主磁盘,导致服务器重启时出现问题,因为它找不到有效的启动分区。
我们需要解决这个问题。目前,解决方法是向风格添加元数据:具体来说,设置“boot_menu=true”。此添加会导致控制台中出现“按 ESC 键进入启动菜单”消息。虽然这提供了手动选择正确启动磁盘 (VDA) 的选项,但这并不是理想的解决方案。
我尝试将元数据值应用于风格,但不确定如何将其设置为快照的默认值。以下是我迄今为止尝试过的方法:
$ openstack flavor set --property hw:scsi_model=virtio-scsi zzzz-zzz-zzz-zzz
$ openstack flavor set --property hw:disk_bus=scsi zzzz-zzz-zzz-zzz
您对解决此问题有什么建议或推荐吗?
编辑:可能的解决方案,但正在寻找使用不同方法的解决方案。
确定了可以添加到 nova 计算节点的可能参数:
[libvirt]
disk_prefix=sd
这将强制 libvirt 使用 /dev/sdX 附加新的磁盘设备,记录在此处:
https://docs.openstack.org/ocata/config-reference/compute/config-options.html
我更喜欢使用某种元数据来避免全局更改此设置造成的全局副作用。
编辑2:此解决方案仅解决了VDA和SDA的不同字母,但附加的第二个卷仍然充当启动设备。
编辑3:
阅读文档后,如果用户可以创建与卷快照相关联的图像,那么我所有的问题都可以解决。
Glance 提供两种类型的镜像:普通镜像 (qcow/iso) 和“快照”镜像。第一种存储在 Glance 存储中,第二种与卷快照 (cinder) 相关联,从 Glance 的角度来看,没有真正的区别,它将属性存储在数据库中并在创建新实例时应用它。
我遇到的问题是普通用户没有创建镜像的权限。glance-policy 指定 add-image 角色只对管理员有效。
{
"add_image": "role:admin",
...
}
Glance 不允许仅授予用户添加“快照图像”的权限。
基于此,默认服务器创建没有关联图像,不清楚如何设置这些属性(基本上是磁盘驱动程序)以及是否可行。我的第一个想法是使用风格来设置它,但它也不起作用。
答案1
正如已经评论,您可以使用图像元数据:
root@control01:~# openstack image set --property hw_scsi_model=virtio-scsi --property hw_disk_bus=scsi <IMAGE>
root@control01:~# openstack image show <IMAGE> -c properties -f json | jq '.properties|.["hw_disk_bus", "hw_scsi_model"]'
"scsi"
"virtio-scsi"
从该映像创建实例应该具有/dev/sda
根设备(独立于临时磁盘或持久卷)。创建卷快照应该继承这些属性,从该快照启动实例也会继承这些属性,所有附加卷也是如此。我可以使用 Openstack 版本 Victoria 进行验证。如果快照没有继承映像属性,您可能需要检查原因,也许是一些 Glance 或 Cinder 策略?但我记得这在 Ocata 中已经为我们正常工作,在 Victoria 中仍然如此。我还没有更新的版本可用。如果您打开 Cinder 和 Glance 的调试日志,您可能会看到未设置属性的原因。