为 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

参考资料