×

您可以配置共享磁盘,以允许多个虚拟机 (VM) 共享相同的底层存储。共享磁盘的卷必须是块模式。

您可以通过将存储公开为以下类型之一来配置磁盘共享

  • 普通虚拟机磁盘

  • 逻辑单元号 (LUN) 磁盘,具有 SCSI 连接和原始设备映射,这是共享卷的 Windows 故障转移群集所需的。

除了配置磁盘共享外,您还可以为每个普通虚拟机磁盘或 LUN 磁盘设置错误策略。错误策略控制在磁盘读写操作发生输入/输出错误时虚拟机的行为。

使用虚拟机磁盘配置磁盘共享

您可以配置块卷,以便多个虚拟机 (VM) 可以共享存储。

在客户操作系统上运行的应用程序确定您必须为虚拟机配置的存储选项。类型为 disk 的磁盘将卷作为普通磁盘公开给虚拟机。

您可以为每个磁盘设置错误策略。错误策略控制在写入或读取磁盘时发生输入/输出错误时虚拟机的行为。默认行为是停止虚拟机并生成 Kubernetes 事件。

您可以接受默认行为,也可以将错误策略设置为以下选项之一

  • report,它在客户机中报告错误。

  • ignore,它忽略错误。读或写失败未被检测到。

  • enospace,它会产生一个错误,指示磁盘空间不足。

先决条件
  • 如果共享磁盘的虚拟机运行在不同的节点上,则卷访问模式必须为 ReadWriteMany (RWX)。

    如果共享磁盘的虚拟机运行在同一节点上,则 ReadWriteOnce (RWO) 卷访问模式就足够了。

  • 存储提供程序必须支持所需的容器存储接口 (CSI) 驱动程序。

步骤
  1. 创建虚拟机的 VirtualMachine 清单以设置所需的值,如下例所示

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: <vm_name>
    spec:
      template:
    # ...
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: rootdisk
                errorPolicy: report (1)
                disk1: disk_one (2)
              - disk:
                  bus: virtio
                name: cloudinitdisk
                disk2: disk_two
                shareable: true (3)
              interfaces:
              - masquerade: {}
                name: default
    1 标识错误策略。
    2 将设备标识为磁盘。
    3 标识共享磁盘。
  2. 保存 VirtualMachine 清单文件以应用更改。

使用 LUN 配置磁盘共享

为了保护虚拟机上的数据免受外部访问,您可以启用 SCSI 持久保留并配置 LUN 支持的虚拟机磁盘以在多个虚拟机之间共享。通过启用共享选项,您可以使用高级 SCSI 命令(例如 Windows 故障转移群集实现所需的命令)来管理底层存储。

当存储卷配置为 LUN 磁盘类型时,虚拟机可以使用该卷作为逻辑单元号 (LUN) 设备。因此,虚拟机可以使用 SCSI 命令部署和管理磁盘。

您可以通过 SCSI 持久保留选项保留 LUN。要启用保留,请

  1. 配置功能网关选项

  2. 激活 LUN 磁盘上的功能网关选项以发出虚拟机所需的 SCSI 设备特定输入和输出控制 (IOCTL)。

您可以为每个 LUN 磁盘设置错误策略。错误策略控制在磁盘读写操作发生输入/输出错误时虚拟机的行为。默认行为是停止客户机并生成 Kubernetes 事件。

对于具有 SCSi 连接和持久保留的 LUN 磁盘(共享卷的 Windows 故障转移群集所需),请将错误策略设置为 report

先决条件
  • 您必须拥有集群管理员权限才能配置功能网关选项。

  • 如果共享磁盘的虚拟机运行在不同的节点上,则卷访问模式必须为 ReadWriteMany (RWX)。

    如果共享磁盘的虚拟机运行在同一节点上,则 ReadWriteOnce (RWO) 卷访问模式就足够了。

  • 存储提供程序必须支持使用光纤通道 (FC)、以太网光纤通道 (FCoE) 或 iSCSI 存储协议的容器存储接口 (CSI) 驱动程序。

  • 如果您是集群管理员并打算使用 LUN 配置磁盘共享,则必须在 HyperConverged 自定义资源 (CR) 上启用集群的功能网关。

  • 您要共享的磁盘必须处于块模式。

步骤
  1. 编辑或创建虚拟机的 VirtualMachine 清单以设置所需的值,如下例所示

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-0
    spec:
      template:
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: sata
                name: rootdisk
              - errorPolicy: report (1)
                lun: (2)
                  bus: scsi
                  reservation: true (3)
                name: na-shared
                serial: shared1234
          volumes:
          - dataVolume:
              name: vm-0
            name: rootdisk
          - name: na-shared
            persistentVolumeClaim:
              claimName: pvc-na-share
    1 标识错误策略。
    2 标识 LUN 磁盘。
    3 标识已启用持久保留。
  2. 保存 VirtualMachine 清单文件以应用更改。

使用 LUN 和 Web 控制台配置磁盘共享

您可以使用 OpenShift Container Platform Web 控制台通过 LUN 配置磁盘共享。

先决条件
  • 集群管理员必须启用 `persistentreservation` 功能开关设置。

步骤
  1. 在 Web 控制台中单击**虚拟化** → **虚拟机**。

  2. 选择一个虚拟机以打开**虚拟机详细信息**页面。

  3. 展开**存储**。

  4. 在**磁盘**选项卡上,单击**添加磁盘**。

  5. 指定**名称**、**源**、**大小**、**接口**和**存储类**。

  6. 选择**LUN**作为**类型**。

  7. 选择**共享访问 (RWX)** 作为**访问模式**。

  8. 选择**块**作为**卷模式**。

  9. 展开**高级设置**,并选中两个复选框。

  10. 单击**保存**。

使用命令行配置磁盘共享

您可以使用命令行通过 LUN 配置磁盘共享。

步骤
  1. 编辑或创建虚拟机的 VirtualMachine 清单以设置所需的值,如下例所示

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-0
    spec:
      template:
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: sata
                name: rootdisk
              - errorPolicy: report
                lun: (1)
                  bus: scsi
                  reservation: true (2)
                name: na-shared
                serial: shared1234
          volumes:
          - dataVolume:
              name: vm-0
            name: rootdisk
          - name: na-shared
            persistentVolumeClaim:
              claimName: pvc-na-share
    1 标识 LUN 磁盘。
    2 标识已启用持久保留。
  2. 保存 VirtualMachine 清单文件以应用更改。

启用 PersistentReservation 功能开关

您可以启用 SCSI `persistentReservation` 功能开关,并允许在多个虚拟机之间共享 LUN 支持的块模式虚拟机 (VM) 磁盘。

`persistentReservation` 功能开关默认情况下处于禁用状态。您可以使用 Web 控制台或命令行启用 `persistentReservation` 功能开关。

先决条件
  • 需要集群管理员权限。

  • 如果共享磁盘的虚拟机运行在不同的节点上,则需要卷访问模式 `ReadWriteMany` (RWX)。如果共享磁盘的虚拟机运行在同一节点上,则 `ReadWriteOnce` (RWO) 卷访问模式就足够了。

  • 存储提供程序必须支持使用光纤通道 (FC)、以太网光纤通道 (FCoE) 或 iSCSI 存储协议的容器存储接口 (CSI) 驱动程序。

使用 Web 控制台启用 PersistentReservation 功能开关

必须启用 PersistentReservation 功能开关才能允许在多个虚拟机之间共享 LUN 支持的块模式虚拟机 (VM) 磁盘。启用功能开关需要集群管理员权限。

步骤
  1. 在 Web 控制台中单击**虚拟化** → **概览**。

  2. 单击**设置**选项卡。

  3. 选择**集群**。

  4. 展开**SCSI 持久保留**并将**启用持久保留**设置为开启。

使用命令行启用 PersistentReservation 功能开关

您可以使用命令行启用 `persistentReservation` 功能开关。启用功能开关需要集群管理员权限。

步骤
  1. 运行以下命令启用 `persistentReservation` 功能开关:

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv --type json -p \
    '[{"op":"replace","path":"/spec/featureGates/persistentReservation", "value": true}]'