为 QEMU 内置 iSCSI 发起程序添加支持¶
https://blueprints.launchpad.net/nova/+spec/qemu-built-in-iscsi-initiator
QEMU 使用 libiscsi 具有内置的 iSCSI 发起程序,Libvirt 可以像处理其他网络存储一样处理它。此蓝图将 iSCSI 支持添加到 Nova 的网络卷驱动程序 (nova.virt.libvirt.LibvirtNetVolumeDriver)。
问题描述¶
Nova 已经为 KVM/QEMU 提供了 iSCSI 卷驱动程序 (nova.virt.libvirt.LibvirtISCSIVolumeDriver),但卷的 iSCSI 目标并非直接附加到虚拟机,而是附加到 nova-compute 节点的宿主机操作系统。这意味着
当卷附加到/从宿主机上的虚拟机时,宿主机操作系统的存储结构将会改变。nova-compute 执行的附加/分离卷的命令比较复杂。因此,它们可能会导致宿主机操作系统存储结构混乱,并在发生问题时使故障排除变得困难。
宿主机操作系统在附加/分离卷时会记录许多系统日志,如果 iSCSI 目标或多路径出现问题,则会记录大量的错误日志。
当 iSCSI 卷附加或从虚拟机分离时,计算节点上的虚拟机将被停止,并且可能导致宿主机操作系统崩溃。
用例¶
在宿主机上使用许多基于 iSCSI 的卷并将它们附加到许多虚拟机。假设一个宿主机最多有 50 个虚拟机,每个虚拟机最多附加 20 个卷。这意味着宿主机本身将使用 LibvirtISCSIVpolumeDriver 处理最多 1k 个 iSCSI 目标,如果您使用 iSCSI 多路径功能,则数量将是 2 倍、3 倍或 4 倍。
项目优先级¶
无
提议的变更¶
使用 KVM/QEMU 内置的 iSCSI 发起程序通过 Libvirt 附加 iSCSI 卷。为此,我们必须实现 2 个功能
实现一个新的 libvirt XML 配置处理程序类,名为 LibvirtConfigSecret。它管理 iSCSI CHAP 身份验证的信息。
扩展 LibvirtNetVolumeDriver 以支持 QEMU 内置的 iSCSI 发起程序,如果需要,则使用 LibvirtConfigSecret。
备选方案¶
只需使用 LibvirtISCSIVolumeDriver。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
QEMU 内置的 iSCSI 发起程序不支持多路径功能。因此,即使后端 iSCSI 存储具有多路径功能,当 iSCSI 连接中断时,虚拟机也无法处理卷。
Ubuntu 14.04 的 QEMU 二进制文件没有 iSCSI 支持。用户必须从 Debian 安装 libiscsi2 包和 libiscsi-dev,并自行使用 libiscsi 支持重新构建 QEMU 二进制文件。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Akira Yoshiyama <akirayoshiyama@gmail.com>
工作项¶
存在可用的补丁,因此我们必须
实现单元测试。
审查代码。
依赖项¶
无
测试¶
通常,devstack 会使用 LVMISCSIDriver 构建一个带有 Cinder 的 OpenStack 部署,因此我们可以使用它进行基本的冒烟测试。我们还应该使用供应商的 iSCSI 驱动程序进行更多测试。
文档影响¶
添加配置说明以使用该驱动程序,如下所示
要使用此驱动程序,您必须在 nova.conf 中编写一个参数
- volume_drivers = iscsi=nova.virt.libvirt.volume.LibvirtNetVolumeDriver,
iser=nova.virt.libvirt.volume.LibvirtISERVolumeDriver,…
或者只是
volume_drivers = iscsi=nova.virt.libvirt.volume.LibvirtNetVolumeDriver
参考资料¶
Libvirt Secret XML 格式: http://libvirt.org/formatsecret.html
Libvirt Domain XML 格式: 硬盘驱动器、软盘、CDROM http://libvirt.org/formatdomain.html#elementsDisks