7.15. VM 磁盘


7.15.1. 热插虚拟机磁盘

您可以在不停止虚拟机(VM)或虚拟机实例(VMI)的情况下添加或删除虚拟磁盘。

只有数据卷和持久性卷声明 (PVC) 才能热插和热拔。您无法热插或热拔容器磁盘。

热插磁盘在重新引导后仍会附加到虚拟机。您必须分离磁盘才能从虚拟机中删除它。

您可以使热插磁盘持久保留,使其永久挂载在虚拟机上。

注意

每个虚拟机都有一个 virtio-scsi 控制器,以便热插磁盘可以使用 scsi 总线。virtio-scsi 控制器克服了 virtio 的限制,同时保持其性能优势。它高度可扩展,支持超过 400 万个磁盘的热插拔。

常规 virtio 不适用于热插磁盘,因为它不可扩展。每个 virtio 磁盘都使用虚拟机中的一个有限的 PCI Express (PCIe) 插槽。PCIe 插槽也被其他设备使用,必须提前保留。因此,插槽可能按需提供。

7.15.1.1. 使用 Web 控制台热插和热拔磁盘

您可以使用 OpenShift Container Platform web 控制台在虚拟机运行时将其附加到虚拟机 (VM) 来热插磁盘。

热插磁盘会附加到虚拟机,直到您拔出为止。

您可以使热插磁盘持久保留,使其永久挂载在虚拟机上。

先决条件

  • 您必须至少有一个数据卷或持久性卷声明(PVC)可用于热插。

流程

  1. 在 web 控制台中进入到 Virtualization VirtualMachines
  2. 选择一个正在运行的虚拟机来查看其详情。
  3. VirtualMachine 详情页面中,点 Configuration Disks
  4. 添加热插磁盘:

    1. Add disk
    2. Add disk (hot plugged) 窗口中,从 Source 列表中选择磁盘,然后点 Save
  5. 可选: 热插磁盘:

    1. 点磁盘 kebab 旁边的选项菜单,然后选择 Detach
    2. 单击 Detach
  6. 可选:使热插磁盘持久:

    1. 点磁盘旁的选项菜单 kebab 并选择 Make persistent
    2. 重启虚拟机以应用更改。

7.15.1.2. 使用命令行热插和热拔磁盘

您可以使用命令行在虚拟机 (VM) 运行时热插和热拔磁盘。

您可以使热插磁盘持久保留,使其永久挂载在虚拟机上。

先决条件

  • 您必须至少有一个数据卷或持久性卷声明(PVC)可用于热插。

流程

  • 运行以下命令来热插磁盘:

    $ virtctl addvolume <virtual-machine|virtual-machine-instance> \
      --volume-name=<datavolume|PVC> \
      [--persist] [--serial=<label-name>]
    • 使用可选 --persist 标志,将热插磁盘作为永久挂载的虚拟磁盘添加到虚拟机规格中。停止、重新启动或重新启动虚拟机以永久挂载虚拟磁盘。指定 --persist 标志后,您无法再热插或热拔虚拟磁盘。Persist 标志适用于虚拟机,不适用于虚拟机实例。
    • 可选 --serial 标志允许您添加您选择的字母数字字符串标签。这有助于您识别客户机虚拟机中的热插磁盘。如果没有指定这个选项,则标签默认为热插数据卷或 PVC 的名称。
  • 运行以下命令来热拔磁盘:

    $ virtctl removevolume <virtual-machine|virtual-machine-instance> \
      --volume-name=<datavolume|PVC>

7.15.2. 扩展虚拟机磁盘

您可以通过扩展磁盘的持久性卷声明(PVC)来增加虚拟机(VM)磁盘的大小。

如果您的存储供应商不支持卷扩展,您可以通过添加空白数据卷来扩展虚拟机的可用虚拟存储。

您不能缩小虚拟机磁盘的大小。

7.15.2.1. 扩展虚拟机磁盘 PVC

您可以通过扩展磁盘的持久性卷声明(PVC)来增加虚拟机(VM)磁盘的大小。

如果 PVC 使用文件系统卷模式,磁盘镜像文件会扩展到可用大小,同时为文件系统开销保留一些空间。

流程

  1. 编辑您要扩展的虚拟机磁盘的 PersistentVolumeClaim 清单:

    $ oc edit pvc <pvc_name>
  2. 更新磁盘大小:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
       name: vm-disk-expand
    spec:
      accessModes:
         - ReadWriteMany
      resources:
        requests:
           storage: 3Gi 1
    # ...
    1
    指定新磁盘大小。

7.15.2.2. 通过添加空白数据卷来扩展可用虚拟存储

您可以通过添加空白数据卷来扩展虚拟机的可用存储。

先决条件

  • 您必须至少有一个持久性卷。

流程

  1. 如以下示例所示创建 DataVolume 清单:

    DataVolume 清单示例

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: blank-image-datavolume
    spec:
      source:
        blank: {}
      storage:
        resources:
          requests:
            storage: <2Gi> 1
      storageClassName: "<storage_class>" 2

    1
    指定为数据卷请求的可用空间量。
    2
    可选:如果您没有指定存储类,则会使用默认存储类。
  2. 运行以下命令来创建数据卷:

    $ oc create -f <blank-image-datavolume>.yaml

7.15.3. 为虚拟机配置共享卷

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

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

  • 普通虚拟机磁盘
  • 具有 iSCSi 连接和原始设备映射的逻辑单元号 (LUN) 磁盘,作为共享卷的 Windows 故障切换集群需要

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

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

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

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

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

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

  • report,它将报告虚拟客户机错误。
  • ignore,忽略错误。没有检测到 Read 或 Write。
  • enospace,生成一个错误,表示没有足够的磁盘空间。

先决条件

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

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

  • 存储供应商必须支持所需的 Container Storage Interface (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 清单文件以应用更改。

7.15.3.2. 使用 LUN 配置磁盘共享

要保护虚拟机上的数据不受外部访问,您可以启用 SCSI 持久保留并配置 LUN 支持的虚拟机磁盘在多个虚拟机间共享。启用共享选项允许您针对底层存储使用高级 SCSI 命令,如 Windows 故障转移集群实施所需的高级 SCSI 命令。

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

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

  1. 配置功能门选项
  2. 可以激活 LUN 磁盘上的选项,以发出虚拟机所需的 SCSI 设备特定输入和输出控制 (IOCTLs)。

您可以为每个 LUN 磁盘设置错误策略。错误策略用于控制,当在磁盘的读或写出现输入/输出错误时,hypervisor 的行为。默认行为是,停止客户机并生成 Kubernetes 事件。

对于具有 iSCSi 连接和持久保留的 LUN 磁盘,根据 Windows Failover 集群用于共享卷,您可以将错误策略设置为 report

先决条件

  • 您必须具有集群管理员特权才能配置功能门选项。
  • 如果共享磁盘的虚拟机在不同节点上运行,则卷访问模式必须是 ReadWriteMany (RWX)。

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

  • 存储供应商必须支持使用光纤通道(FC)、以太网光纤通道(FCoE)或 iSCSI 存储协议的 Container Storage Interface (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 清单文件以应用更改。
7.15.3.2.1. 使用 LUN 和 Web 控制台配置磁盘共享

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

先决条件

  • 集群管理员必须启用 persistentreservation 功能门设置。

流程

  1. 在 web 控制台中点 Virtualization VirtualMachines
  2. 选择一个虚拟机以打开 VirtualMachine 详情页。
  3. 展开 Storage
  4. Disks 选项卡上,点 Add disk
  5. 指定 Name, Source, Size, Interface, 和 Storage Class
  6. 选择 LUN 作为类型
  7. 选择 Shared access (RWX) 作为 Access Mode
  8. 选择 Block 作为 卷模式
  9. 展开 Advanced Settings,然后选中这两个复选框。
  10. 点击 Save
7.15.3.2.2. 使用 LUN 和命令行配置磁盘共享

您可以使用 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 清单文件以应用更改。

7.15.3.3. 启用 PersistentReservation 功能门

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

默认禁用 persistentReservation 功能门。您可以使用 Web 控制台或命令行启用 persistentReservation 功能门。

先决条件

  • 需要集群管理员权限。
  • 如果共享磁盘的虚拟机在不同节点上运行,则需要卷访问模式 ReadWriteMany (RWX)。如果共享磁盘的虚拟机在同一节点上运行,则 ReadWriteOnce (RWO) 卷访问模式就足够了。
  • 存储供应商必须支持使用光纤通道(FC)、以太网光纤通道(FCoE)或 iSCSI 存储协议的 Container Storage Interface (CSI)驱动程序。
7.15.3.3.1. 使用 Web 控制台启用 PersistentReservation 功能门

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

流程

  1. 在 web 控制台中点 Virtualization Overview
  2. Settings 选项卡。
  3. 选择 Cluster
  4. 扩展 SCSI persistent reservation 并将 Enable persistent reservation 设置为 on。
7.15.3.3.2. 使用命令行启用 PersistentReservation 功能门

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

流程

  1. 运行以下命令启用 persistentReservation 功能门:

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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.