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
您可以通过克隆具有自定义映像的现有持久卷声明 (PVC) 来创建虚拟机 (VM)。
必须在从 Red Hat 未提供的操作系统映像创建的虚拟机上安装QEMU 访客代理。
您可以通过创建引用源 PVC 的数据卷来克隆 PVC。
克隆数据卷时,容器化数据导入器 (CDI) 将选择以下容器存储接口 (CSI) 克隆方法之一
CSI卷克隆
智能克隆
CSI 卷克隆和智能克隆方法都效率很高,但它们有一定的使用要求。如果未满足这些要求,CDI 将使用主机辅助克隆。主机辅助克隆是最慢、效率最低的克隆方法,但它比其他两种克隆方法的要求更少。
容器存储接口 (CSI) 克隆使用 CSI 驱动程序功能来更有效地克隆源数据卷。
CSI 卷克隆具有以下要求
支持持久卷声明 (PVC) 的存储类的 CSI 驱动程序必须支持卷克隆。
对于 CDI 未识别的供应程序,相应的存储配置文件必须将cloneStrategy
设置为 CSI 卷克隆。
源 PVC 和目标 PVC 必须具有相同的存储类和卷模式。
如果创建数据卷,则必须有权在源命名空间中创建datavolumes/source
资源。
源卷不得正在使用。
当具有快照功能的容器存储接口 (CSI) 插件可用时,容器化数据导入器 (CDI) 将从快照创建持久卷声明 (PVC),然后允许高效克隆其他 PVC。
智能克隆具有以下要求
必须存在与存储类关联的快照类。
源 PVC 和目标 PVC 必须具有相同的存储类和卷模式。
如果创建数据卷,则必须有权在源命名空间中创建datavolumes/source
资源。
源卷不得正在使用。
当不满足容器存储接口 (CSI) 卷克隆或智能克隆的要求时,将使用主机辅助克隆作为后备方法。主机辅助克隆的效率低于其他两种克隆方法。
主机辅助克隆使用源 Pod 和目标 Pod 将数据从源卷复制到目标卷。目标持久卷声明 (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
您可以使用 OpenShift Container Platform Web 控制台通过克隆持久卷声明 (PVC) 来创建虚拟机 (VM)。
您必须可以访问包含源 PVC 的命名空间。
在 Web 控制台中导航到**虚拟化**→**目录**。
单击没有可用引导源的模板图块。
单击**自定义虚拟机**。
在**自定义模板参数**页面上,展开**存储**并从**磁盘源**列表中选择**PVC(克隆 PVC)**。
选择 PVC 项目和 PVC 名称。
设置磁盘大小。
单击**下一步**。
单击**创建虚拟机**。
您可以使用命令行通过克隆现有虚拟机的持久卷声明 (PVC) 来创建虚拟机 (VM)。
您可以使用以下选项之一克隆 PVC
将 PVC 克隆到新的数据卷。
此方法创建生命周期独立于原始虚拟机的数卷。删除原始虚拟机不会影响新的数据卷或其关联的 PVC。
通过创建带有dataVolumeTemplates
节的VirtualMachine
清单来克隆 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
创建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 的名称。 |
运行以下命令创建数据卷
$ oc create -f <datavolume>.yaml
在 PVC 准备就绪之前,数据卷会阻止虚拟机启动。在克隆 PVC 时,您可以创建一个引用新数据卷的虚拟机。 |
您可以使用数据卷模板创建一个克隆现有虚拟机的持久卷声明 (PVC) 的虚拟机 (VM)。
此方法创建生命周期依赖于原始虚拟机的数卷。删除原始虚拟机将删除克隆的数据卷及其关联的 PVC。
具有源 PVC 的虚拟机必须关闭。
创建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 的名称。 |
使用已克隆 PVC 的数据卷创建虚拟机
$ oc create -f <vm-clone-datavolumetemplate>.yaml