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
您可以使用 Red Hat OpenShift Service on AWS Web 控制台通过克隆持久卷声明 (PVC) 来创建虚拟机 (VM)。
您必须能够访问包含源 PVC 的命名空间。
在 Web 控制台中导航到**虚拟化** → **目录**。
单击没有可用启动源的模板磁贴。
单击**自定义虚拟机**。
在**自定义模板参数**页面上,展开**存储**并从**磁盘源**列表中选择**PVC(克隆 PVC)**。
选择 PVC 项目和 PVC 名称。
设置磁盘大小。
单击**下一步**。
单击**创建虚拟机**。
您可以使用命令行通过克隆现有虚拟机的持久卷声明 (PVC) 来创建虚拟机 (VM)。
您可以使用以下选项之一克隆 PVC:
将 PVC 克隆到新的数据卷。
此方法创建的生命周期独立于原始虚拟机的新的数据卷。删除原始虚拟机不会影响新的数据卷及其关联的 PVC。
通过创建带有dataVolumeTemplates
节的VirtualMachine
清单来克隆 PVC。
此方法创建的生命周期依赖于原始虚拟机的新的数据卷。删除原始虚拟机将删除克隆的数据卷及其关联的 PVC。
您可以使用命令行将现有虚拟机 (VM) 磁盘的持久卷声明 (PVC) 克隆到数据卷。
您创建一个引用原始源 PVC 的数据卷。新数据卷的生命周期独立于原始 VM。删除原始 VM 不会影响新数据卷或其关联的 PVC。
对于主机辅助克隆,支持在不同卷模式之间进行克隆,例如从块持久卷 (PV) 克隆到文件系统 PV,只要源 PV 和目标 PV 都属于kubevirt
内容类型。
具有源 PVC 的 VM 必须关闭电源。
如果将 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 准备就绪之前,数据卷会阻止 VM 启动。您可以在克隆 PVC 时创建引用新数据卷的 VM。 |
您可以使用数据卷模板创建一个克隆现有 VM 的持久卷声明 (PVC) 的虚拟机 (VM)。
此方法创建的生命周期依赖于原始虚拟机的新的数据卷。删除原始虚拟机将删除克隆的数据卷及其关联的 PVC。
具有源 PVC 的 VM 必须关闭电源。
创建一个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 | 指定 VM 的名称。 |
2 | 指定源 PVC 的命名空间。 |
3 | 指定源 PVC 的名称。 |
使用 PVC 克隆的数据卷创建虚拟机
$ oc create -f <vm-clone-datavolumetemplate>.yaml