6.12. 编辑虚拟机
6.12.1. 启用用户权限以在命名空间之间克隆 DataVolume
命名空间的隔离性质意味着用户默认无法在命名空间之间克隆资源。
要让用户将虚拟机克隆到另一个命名空间,具有 cluster-admin
角色的用户必须创建新的 ClusterRole。将这个 ClusterRole 绑定到用户,使其能够将虚拟机克隆到目标命名空间。
6.12.1.1. 先决条件
-
只有具有
cluster-admin
角色的用户才能创建 ClusterRole。
6.12.1.2. 关于 DataVolume
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层 PersistentVolumeClaim (PVC) 关联的导入、克隆和上传操作。DataVolume 与 KubeVirt 集成,它们可在 PVC 准备好前阻止虚拟机启动。
6.12.1.3. 创建用于克隆 DataVolume 的 RBAC 资源
创建新的 ClusterRole,以启用 datavolumes
资源的所有操作的权限。
流程
创建 ClusterRole 清单:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: <datavolume-cloner> 1 rules: - apiGroups: ["cdi.kubevirt.io"] resources: ["datavolumes/source"] verbs: ["*"]
- 1
- ClusterRole 的唯一名称。
在集群中创建 ClusterRole:
$ oc create -f <datavolume-cloner.yaml> 1
- 1
- 上一步中创建的 ClusterRole 清单的文件名。
创建应用于源和目标命名空间的 RoleBinding 清单,并引用上一步中创建的 ClusterRole。
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: <allow-clone-to-user> 1 namespace: <Source namespace> 2 subjects: - kind: ServiceAccount name: default namespace: <Destination namespace> 3 roleRef: kind: ClusterRole name: datavolume-cloner 4 apiGroup: rbac.authorization.k8s.io
在集群中创建 RoleBinding:
$ oc create -f <datavolume-cloner.yaml> 1
- 1
- 上一步中创建的 RoleBinding 清单的文件名。
6.12.2. 将虚拟机磁盘克隆到新 DataVolume 中
您可通过引用 DataVolume 配置文件中的源 PVC 来将虚拟机磁盘的 PersistentVolumeClaim (PVC) 克隆到新 DataVolume 中。
6.12.2.1. 先决条件
- 您可能需要定义一个 StorageClass 或准备 CDI 涂销空间才能成功完成此操作。CDI 支持的操作列表显示需要涂销空间的状况。
- 用户需要额外的权限才能将虚拟机磁盘的 PVC 克隆到另一个命名空间中。
6.12.2.2. 关于 DataVolume
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层 PersistentVolumeClaim (PVC) 关联的导入、克隆和上传操作。DataVolume 与 KubeVirt 集成,它们可在 PVC 准备好前阻止虚拟机启动。
6.12.2.3. 将虚拟机磁盘的 PersistentVolumeClaim 克隆到新 DataVolume 中
您可将现有虚拟机磁盘的 PersistentVolumeClaim (PVC) 克隆到新 DataVolume 中。之后该新 DataVolume 可用于新虚拟机。
当独立于虚拟机创建 DataVolume 时,DataVolume 的生命周期与虚拟机保持独立。如果删除了虚拟机,DataVolume 及其相关 PVC 都不会被删除。
先决条件
- 确定要使用的现有虚拟机磁盘的 PVC。克隆之前,必须关闭与 PVC 关联的虚拟机。
-
安装 OpenShift CLI(
oc
)。
流程
- 检查您要克隆的虚拟机磁盘,以识别关联 PVC 的名称和命名空间。
为 DataVolume 对象创建 YAML 文件,用于指定新 DataVolume 的名称、源 PVC 的名称和命名空间,以及新 DataVolume 的大小。
例如:
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <cloner-datavolume> 1 spec: source: pvc: namespace: "<source-namespace>" 2 name: "<my-favorite-vm-disk>" 3 pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 4
通过创建 DataVolume 开始克隆 PVC:
$ oc create -f <cloner-datavolume>.yaml
注意在 PVC 就绪前,DataVolume 会阻止虚拟机启动,以便您可以在 PVC 克隆期间创建引用新 DataVolume 的虚拟机。
6.12.2.4. 模板:DataVolume 克隆配置文件
example-clone-dv.yaml
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: "example-clone-dv" spec: source: pvc: name: source-pvc namespace: example-ns pvc: accessModes: - ReadWriteOnce resources: requests: storage: "1G"
6.12.2.5. CDI 支持的操作列表
此列表针对端点显示内容类型支持的 CDI 操作,以及哪些操作需要涂销空间(scratch space)。
内容类型 | HTTP | HTTPS | HTTP 基本身份验证 | Registry | 上传 |
---|---|---|---|---|---|
KubeVirt(QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
Archive+ | ✓ TAR | ✓ TAR | ✓ TAR | □ TAR | □ TAR |
✓ 支持的操作
□ 不支持的操作
* 需要涂销空间
** 如果需要自定义证书颁发机构,则需要涂销空间
+ 存档不支持块模式 DV
6.12.3. 使用 DataVolumeTemplate 克隆虚拟机
您可通过克隆现有虚拟机的 PersistentVolumeClaim (PVC) 来创建新虚拟机。在虚拟机配置文件中包括 dataVolumeTemplate
,即可从原始 PVC 创建新 DataVolume。
6.12.3.1. 先决条件
- 您可能需要定义一个 StorageClass 或准备 CDI 涂销空间才能成功完成此操作。CDI 支持的操作列表显示需要涂销空间的状况。
- 用户需要额外的权限才能将虚拟机磁盘的 PVC 克隆到另一个命名空间中。
6.12.3.2. 关于 DataVolume
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层 PersistentVolumeClaim (PVC) 关联的导入、克隆和上传操作。DataVolume 与 KubeVirt 集成,它们可在 PVC 准备好前阻止虚拟机启动。
6.12.3.3. 使用 DataVolumeTemplate 从克隆的 PersistentVolumeClaim 创建新虚拟机
您可创建一个虚拟机,它将现有虚拟机的 PersistentVolumeClaim (PVC) 克隆到 DataVolume 中。通过在虚拟机 spec
中引用 dataVolumeTemplate
,源
PVC 便会克隆到 DataVolume 中,然后自动用于创建虚拟机。
当 DataVolume 作为虚拟机 DataVolumeTemplate 的一部分创建时,DataVolume 的生命周期依赖于虚拟机。如果删除了虚拟机,DataVolume 及其相关 PVC 也会一并删除。
先决条件
- 确定要使用的现有虚拟机磁盘的 PVC。克隆之前,必须关闭与 PVC 关联的虚拟机。
-
安装 OpenShift CLI(
oc
)。
流程
- 检查您要克隆的虚拟机,以识别关联 PVC 的名称和命名空间。
为
VirtualMachine
对象创建 YAML 文件。以下虚拟机示例克隆my-favorite-vm-disk
,该磁盘位于source-name
命名空间中。名为favorite-clone
的2Gi
DataVolume 从my-favorite-vm-disk
创建而成。例如:
apiVersion: kubevirt.io/v1alpha3 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: pvc: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi source: pvc: namespace: "source-namespace" name: "my-favorite-vm-disk"
- 1
- 要创建的虚拟机。
使用 PVC 克隆的 DataVolume 创建虚拟机:
$ oc create -f <vm-clone-datavolumetemplate>.yaml
6.12.3.4. 模板:DataVolume 虚拟机配置文件
example-dv-vm.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
labels:
kubevirt.io/vm: example-vm
name: example-vm
spec:
dataVolumeTemplates:
- metadata:
name: example-dv
spec:
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
source:
http:
url: "" 1
running: false
template:
metadata:
labels:
kubevirt.io/vm: example-vm
spec:
domain:
cpu:
cores: 1
devices:
disks:
- disk:
bus: virtio
name: example-dv-disk
machine:
type: q35
resources:
requests:
memory: 1G
terminationGracePeriodSeconds: 0
volumes:
- dataVolume:
name: example-dv
name: example-dv-disk
- 1
- 您要导入的镜像的
HTTP
源(如适用)。
6.12.3.5. CDI 支持的操作列表
此列表针对端点显示内容类型支持的 CDI 操作,以及哪些操作需要涂销空间(scratch space)。
内容类型 | HTTP | HTTPS | HTTP 基本身份验证 | Registry | 上传 |
---|---|---|---|---|---|
KubeVirt(QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
Archive+ | ✓ TAR | ✓ TAR | ✓ TAR | □ TAR | □ TAR |
✓ 支持的操作
□ 不支持的操作
* 需要涂销空间
** 如果需要自定义证书颁发机构,则需要涂销空间
+ 存档不支持块模式 DV
6.12.4. 将虚拟机磁盘克隆到新块存储 DataVolume 中
您可通过引用 DataVolume 配置文件中的源 PVC 来将虚拟机磁盘的 PersistentVolumeClaim (PVC) 克隆到新块 DataVolume 中。
6.12.4.1. 先决条件
- 如果根据 CDI 支持的操作列表规定需要涂销空间,您必须首先定义一个 StorageClass 或准备 CDI 涂销空间才能成功完成此操作。
- 用户需要额外的权限才能将虚拟机磁盘的 PVC 克隆到另一个命名空间中。
6.12.4.2. 关于 DataVolume
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层 PersistentVolumeClaim (PVC) 关联的导入、克隆和上传操作。DataVolume 与 KubeVirt 集成,它们可在 PVC 准备好前阻止虚拟机启动。
6.12.4.3. 关于块 PersistentVolume
块 PersistentVolume (PV) 是一个受原始块设备支持的 PV。这些卷没有文件系统。对于可以直接写入磁盘或者实现其自己的存储服务的虚拟机来说,使用它可以获得性能优势。
原始块卷可以通过在 PV 和 PersistentVolumeClaim (PVC) 规格中指定 volumeMode: Block
来置备。
6.12.4.4. 创建本地块 PersistentVolume
通过填充文件并将其挂载为循环设备,在节点上创建本地块 PersistentVolume (PV)。然后您可以在 PV 配置中将该循环设备引用为 Block
卷,并将其用作虚拟机镜像的块设备。
流程
-
以
root
身份登录节点,在其上创建本地 PV。本流程以node01
为例。 创建一个文件并用空字符填充,以便可将其用作块设备。以下示例创建
loop10
文件,大小为 2Gb(20,100 Mb 块):$ dd if=/dev/zero of=<loop10> bs=100M count=20
将
loop10
文件挂载为 loop 设备。$ losetup </dev/loop10>d3 <loop10> 1 2
创建引用所挂载 loop 设备的
PersistentVolume
配置。kind: PersistentVolume apiVersion: v1 metadata: name: <local-block-pv10> annotations: spec: local: path: </dev/loop10> 1 capacity: storage: <2Gi> volumeMode: Block 2 storageClassName: local 3 accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <node01> 4
创建块 PV。
# oc create -f <local-block-pv10.yaml>1
- 1
- 上一步中创建的 PersistentVolume 的文件名。
6.12.4.5. 将虚拟机磁盘的 PersistentVolumeClaim 克隆到新 DataVolume 中
您可将现有虚拟机磁盘的 PersistentVolumeClaim (PVC) 克隆到新 DataVolume 中。之后该新 DataVolume 可用于新虚拟机。
当独立于虚拟机创建 DataVolume 时,DataVolume 的生命周期与虚拟机保持独立。如果删除了虚拟机,DataVolume 及其相关 PVC 都不会被删除。
先决条件
- 确定要使用的现有虚拟机磁盘的 PVC。克隆之前,必须关闭与 PVC 关联的虚拟机。
-
安装 OpenShift CLI(
oc
)。 - 至少一个可用块 PersistentVolume (PV) 大小不低于源 PVC。
流程
- 检查您要克隆的虚拟机磁盘,以识别关联 PVC 的名称和命名空间。
为 DataVolume 对象创建 YAML 文件,用于指定新 DataVolume 的名称、源 PVC 的名称和命名空间、
volumeMode: Block
(以使用可用块 PV),以及新 DataVolume 的大小。例如:
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <cloner-datavolume> 1 spec: source: pvc: namespace: "<source-namespace>" 2 name: "<my-favorite-vm-disk>" 3 pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 4 volumeMode: Block 5
通过创建 DataVolume 开始克隆 PVC:
$ oc create -f <cloner-datavolume>.yaml
注意在 PVC 就绪前,DataVolume 会阻止虚拟机启动,以便您可以在 PVC 克隆期间创建引用新 DataVolume 的虚拟机。
6.12.4.6. CDI 支持的操作列表
此列表针对端点显示内容类型支持的 CDI 操作,以及哪些操作需要涂销空间(scratch space)。
内容类型 | HTTP | HTTPS | HTTP 基本身份验证 | Registry | 上传 |
---|---|---|---|---|---|
KubeVirt(QCOW2) |
✓ QCOW2 |
✓ QCOW2** |
✓ QCOW2 |
✓ QCOW2* |
✓ QCOW2* |
KubeVirt (RAW) |
✓ RAW |
✓ RAW |
✓ RAW |
✓ RAW* |
✓ RAW* |
Archive+ | ✓ TAR | ✓ TAR | ✓ TAR | □ TAR | □ TAR |
✓ 支持的操作
□ 不支持的操作
* 需要涂销空间
** 如果需要自定义证书颁发机构,则需要涂销空间
+ 存档不支持块模式 DV