×

您可以通过克隆具有自定义映像的现有持久卷声明 (PVC) 来创建虚拟机 (VM)。

必须在从 Red Hat 未提供的操作系统映像创建的虚拟机上安装QEMU 访客代理

您可以通过创建引用源 PVC 的数据卷来克隆 PVC。

关于克隆

克隆数据卷时,容器化数据导入器 (CDI) 将选择以下容器存储接口 (CSI) 克隆方法之一

  • CSI卷克隆

  • 智能克隆

CSI 卷克隆和智能克隆方法都效率很高,但它们有一定的使用要求。如果未满足这些要求,CDI 将使用主机辅助克隆。主机辅助克隆是最慢、效率最低的克隆方法,但它比其他两种克隆方法的要求更少。

CSI 卷克隆

容器存储接口 (CSI) 克隆使用 CSI 驱动程序功能来更有效地克隆源数据卷。

CSI 卷克隆具有以下要求

  • 支持持久卷声明 (PVC) 的存储类的 CSI 驱动程序必须支持卷克隆。

  • 对于 CDI 未识别的供应程序,相应的存储配置文件必须将cloneStrategy设置为 CSI 卷克隆。

  • 源 PVC 和目标 PVC 必须具有相同的存储类和卷模式。

  • 如果创建数据卷,则必须有权在源命名空间中创建datavolumes/source资源。

  • 源卷不得正在使用。

智能克隆

当具有快照功能的容器存储接口 (CSI) 插件可用时,容器化数据导入器 (CDI) 将从快照创建持久卷声明 (PVC),然后允许高效克隆其他 PVC。

智能克隆具有以下要求

  • 必须存在与存储类关联的快照类。

  • 源 PVC 和目标 PVC 必须具有相同的存储类和卷模式。

  • 如果创建数据卷,则必须有权在源命名空间中创建datavolumes/source资源。

  • 源卷不得正在使用。

主机辅助克隆

当不满足容器存储接口 (CSI) 卷克隆或智能克隆的要求时,将使用主机辅助克隆作为后备方法。主机辅助克隆的效率低于其他两种克隆方法。

主机辅助克隆使用源 Pod 和目标 Pod 将数据从源卷复制到目标卷。目标持久卷声明 (PVC) 使用解释为什么使用主机辅助克隆的后备原因进行批注,并创建事件。

PVC 目标批注示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    cdi.kubevirt.io/cloneFallbackReason: The volume modes of source and target are incompatible
    cdi.kubevirt.io/clonePhase: Succeeded
    cdi.kubevirt.io/cloneType: copy
事件示例
NAMESPACE   LAST SEEN   TYPE      REASON                    OBJECT                              MESSAGE
test-ns     0s          Warning   IncompatibleVolumeModes   persistentvolumeclaim/test-target   The volume modes of source and target are incompatible

使用 Web 控制台从 PVC 创建虚拟机

您可以使用 OpenShift Container Platform Web 控制台通过克隆持久卷声明 (PVC) 来创建虚拟机 (VM)。

先决条件
  • 您必须可以访问包含源 PVC 的命名空间。

步骤
  1. 在 Web 控制台中导航到**虚拟化**→**目录**。

  2. 单击没有可用引导源的模板图块。

  3. 单击**自定义虚拟机**。

  4. 在**自定义模板参数**页面上,展开**存储**并从**磁盘源**列表中选择**PVC(克隆 PVC)**。

  5. 选择 PVC 项目和 PVC 名称。

  6. 设置磁盘大小。

  7. 单击**下一步**。

  8. 单击**创建虚拟机**。

使用命令行从 PVC 创建虚拟机

您可以使用命令行通过克隆现有虚拟机的持久卷声明 (PVC) 来创建虚拟机 (VM)。

您可以使用以下选项之一克隆 PVC

  • 将 PVC 克隆到新的数据卷。

    此方法创建生命周期独立于原始虚拟机的数卷。删除原始虚拟机不会影响新的数据卷或其关联的 PVC。

  • 通过创建带有dataVolumeTemplates节的VirtualMachine清单来克隆 PVC。

    此方法创建生命周期依赖于原始虚拟机的数卷。删除原始虚拟机将删除克隆的数据卷及其关联的 PVC。

将 PVC 克隆到数据卷

您可以使用命令行将现有虚拟机 (VM) 磁盘的持久卷声明 (PVC) 克隆到数据卷。

您创建了一个引用原始源 PVC 的数据卷。新数据卷的生命周期独立于原始虚拟机。删除原始虚拟机不会影响新的数据卷或其关联的 PVC。

对于主机辅助克隆,支持在不同卷模式之间进行克隆,例如从块持久卷 (PV) 克隆到文件系统 PV,只要源 PV 和目标 PV 属于kubevirt内容类型即可。

智能克隆比主机辅助克隆更快更高效,因为它使用快照来克隆 PVC。智能克隆受支持快照的存储提供商支持,例如 Red Hat OpenShift Data Foundation。

对于智能克隆,不支持不同卷模式之间的克隆。

先决条件
  • 具有源 PVC 的虚拟机必须关闭。

  • 如果将 PVC 克隆到不同的命名空间,则必须具有在目标命名空间中创建资源的权限。

  • 智能克隆的其他前提条件

    • 您的存储提供商必须支持快照。

    • 源 PVC 和目标 PVC 必须具有相同的存储提供商和卷模式。

    • VolumeSnapshotClass 对象的driver键的值必须与StorageClass对象的provisioner键的值匹配,如下例所示

      VolumeSnapshotClass 对象示例
      kind: VolumeSnapshotClass
      apiVersion: snapshot.storage.k8s.io/v1
      driver: openshift-storage.rbd.csi.ceph.com
      # ...
      StorageClass 对象示例
      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      # ...
      provisioner: openshift-storage.rbd.csi.ceph.com
步骤
  1. 创建DataVolume清单,如下例所示

    apiVersion: cdi.kubevirt.io/v1beta1
    kind: DataVolume
    metadata:
      name: <datavolume> (1)
    spec:
      source:
        pvc:
          namespace: "<source_namespace>" (2)
          name: "<my_vm_disk>" (3)
      storage: {}
    1 指定新数据卷的名称。
    2 指定源 PVC 的命名空间。
    3 指定源 PVC 的名称。
  2. 运行以下命令创建数据卷

    $ oc create -f <datavolume>.yaml

    在 PVC 准备就绪之前,数据卷会阻止虚拟机启动。在克隆 PVC 时,您可以创建一个引用新数据卷的虚拟机。

使用数据卷模板从克隆的 PVC 创建虚拟机

您可以使用数据卷模板创建一个克隆现有虚拟机的持久卷声明 (PVC) 的虚拟机 (VM)。

此方法创建生命周期依赖于原始虚拟机的数卷。删除原始虚拟机将删除克隆的数据卷及其关联的 PVC。

先决条件
  • 具有源 PVC 的虚拟机必须关闭。

步骤
  1. 创建VirtualMachine清单,如下例所示

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: vm-dv-clone
      name: vm-dv-clone (1)
    spec:
      running: false
      template:
        metadata:
          labels:
            kubevirt.io/vm: vm-dv-clone
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: root-disk
            resources:
              requests:
                memory: 64M
          volumes:
          - dataVolume:
              name: favorite-clone
            name: root-disk
      dataVolumeTemplates:
      - metadata:
          name: favorite-clone
        spec:
          storage:
            accessModes:
            - ReadWriteOnce
            resources:
              requests:
                storage: 2Gi
          source:
            pvc:
              namespace: <source_namespace> (2)
              name: "<source_pvc>" (3)
    1 指定虚拟机的名称。
    2 指定源 PVC 的命名空间。
    3 指定源 PVC 的名称。
  2. 使用已克隆 PVC 的数据卷创建虚拟机

    $ oc create -f <vm-clone-datavolumetemplate>.yaml