6.14. 虚拟机磁盘。
6.14.1. 为虚拟机配置本地存储
您可以使用 hostpath 置备程序功能为您的虚拟机配置本地存储。
6.14.1.1. 关于 hostpath 置备程序
hostpath 置备程序是设计用于容器原生虚拟化的本地存储置备程序。如果要为虚拟机配置本地存储,您必须首先启用 hostpath 置备程序。
安装容器原生虚拟化 Operator 时,会自动安装 hostpath 置备程序 Operator。要使用它,您必须:
配置 SELinux:
- 如果您使用 Red Hat Enterprise Linux CoreOS 8 worker,您必须在每个节点上创建一个 MachineConfig 对象。
-
否则,将 SELinux 标签
container_file_t
应用到每个节点上的由 PersistentVolume (PV) 支持的目录中。
- 创建 HostPathProvisioner 自定义资源。
-
为 hostpath 置备程序创建
StorageClass
对象。
在创建自定义资源时,hostpath 置备程序 Operator 将部署置备程序作为每个节点上的 DaemonSet。在自定义资源文件中,您将指定 hostpath 置备程序创建的 PersistentVolume 的后备目录。
6.14.1.2. 在 Red Hat Enterprise Linux CoreOS 8 中为 hostpath 置备程序配置 SELinux
在创建 HostPathProvisioner 自定义资源前,您必须配置 SELinux。要在 Red Hat Enterprise Linux CoreOS 8 worker 中配置 SELinux,您必须在每个节点上创建一个 MachineConfig
对象。
如果您不使用 Red Hat Enterprise Linux CoreOS worker,请跳过该流程。
先决条件
- 在每个节点上为 hostpath 置备程序创建的 PersistentVolume (PV) 创建后备目录。
流程
创建 MachineConfig 文件。例如:
$ touch machineconfig.yaml
编辑该文件,确保包含希望 hostpath 置备程序在其中创建 PV 的目录。例如:
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: name: 50-set-selinux-for-hostpath-provisioner labels: machineconfiguration.openshift.io/role: worker spec: config: ignition: version: 2.2.0 systemd: units: - contents: | [Unit] Description=Set SELinux chcon for hostpath provisioner Before=kubelet.service [Service] ExecStart=/usr/bin/chcon -Rt container_file_t <path/to/backing/directory> 1 [Install] WantedBy=multi-user.target enabled: true name: hostpath-provisioner.service
- 1
- 指定希望置备程序在其中创建 PV 的后备目录。
创建
MachineConfig
对象:$ oc create -f machineconfig.yaml -n <namespace>
6.14.1.3. 使用 hostpath 置备程序启用本地存储
要部署 hostpath 置备程序并使虚拟机能够使用本地存储,请首先创建一个 HostPathProvisioner 自定义资源。
先决条件
- 在每个节点上为 hostpath 置备程序创建的 PersistentVolume (PV) 创建后备目录。
将 SELinux 上下文
container_file_t
应用到每个节点上的 PV 后备目录。例如:$ sudo chcon -t container_file_t -R </path/to/backing/directory>
注意如果您使用 Red Hat Enterprise Linux CoreOS 8 worker,您必须改用 MachineConfig 清单来配置 SELinux。
流程
创建 HostPathProvisioner 自定义资源文件。例如:
$ touch hostpathprovisioner_cr.yaml
编辑该文件,确保
spec.pathConfig.path
值是您希望 hostpath 置备程序在其中创建 PV 的目录。例如:apiVersion: hostpathprovisioner.kubevirt.io/v1alpha1 kind: HostPathProvisioner metadata: name: hostpath-provisioner spec: imagePullPolicy: IfNotPresent pathConfig: path: "</path/to/backing/directory>" 1 useNamingPrefix: "false" 2
注意如果您没有创建后备目录,则置备程序会尝试为您创建该目录。如果您没有应用
container_file_t
SELinux 上下文,这会导致Permission denied
。在
openshift-cnv
命名空间中创建自定义资源:$ oc create -f hostpathprovisioner_cr.yaml -n openshift-cnv
6.14.1.4. 创建 StorageClass
对象
当您创建 StorageClass
对象时,您将设置参数,它们会影响属于该存储类的 PersistentVolume (PV) 的动态置备。
您不能在创建 StorageClass
对象后更新其参数。
流程
创建用于定义存储类的 YAML 文件。例如:
$ touch storageclass.yaml
编辑该文件。例如:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: hostpath-provisioner 1 provisioner: kubevirt.io/hostpath-provisioner reclaimPolicy: Delete 2 volumeBindingMode: WaitForFirstConsumer 3
创建
StorageClass
对象:$ oc create -f storageclass.yaml
其他信息
6.14.2. 使用 virtctl 工具上传本地磁盘镜像
您可使用 virtctl
命令把一个本地存储的磁盘镜像上传到一个新的或已存在的 DataVolume 中。
6.14.2.1. 先决条件
-
安装
kubevirt-virtctl
软件包 - 如果根据 CDI 支持的操作列表规定需要涂销空间,您必须首先定义一个 StorageClass 或准备 CDI 涂销空间才能成功完成此操作。
6.14.2.2. 关于 DataVolume
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层 PersistentVolumeClaim (PVC) 关联的导入、克隆和上传操作。DataVolume 与 KubeVirt 集成,它们可在 PVC 准备好前阻止虚拟机启动。
6.14.2.3. 创建上传 DataVolume
使用 upload
数据源手动创建 DataVolume,用于上传本地磁盘镜像。
流程
创建 DataVolume 配置,用于指定
spec: source: upload{}
:apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <upload-datavolume> 1 spec: source: upload: {} pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 2
运行以下命令来创建 DataVolume:
$ oc create -f <upload-datavolume>.yaml
6.14.2.4. 上传本地磁盘镜像至一个 DataVolume
您可使用 virtctl
将一个客户端机器中的一个本地磁盘镜像上传至集群中的 DataVolume (DV)。您可以使用集群中已存在的 DV,也可以在此过程中创建新的 DV。
上传本地磁盘镜像后,您可将其添加到虚拟机中。
先决条件
-
具有 RAW、ISO 或 QCOW2 格式的虚拟机磁盘镜像,可选择使用
xz
或gz
进行压缩。 -
kubevirt-virtctl
软件包必须安装在客户端机器上。 - 客户端机器必须配置为信任 OpenShift Container Platform 路由器的证书。
流程
确定以下各项:
- 要使用的上传 DataVolume 的名称。如果此 DataVolume 不存在,则会自动创建。
- 在上传过程中创建 DataVolume 的大小。大小必须大于或等于磁盘镜像的大小。
- 要上传的虚拟机磁盘镜像的文件位置
运行
virtctl image-upload
命令上传磁盘镜像。指定您在上一步中获得的参数。例如:$ virtctl image-upload dv <datavolume_name> \ 1 --size=<datavolume_size> \ 2 --image-path=</path/to/image> \ 3
注意-
如果您不想创建新 DataVolume,请省略
--size
参数,并包含--no-create
标志。 -
若要在使用 HTTPS 时允许不安全的服务器连接,请使用
--insecure
参数。注意,在使用--insecure
标志时,不会验证上传端点的真实性。
-
如果您不想创建新 DataVolume,请省略
可选。要验证 DataVolume 是否已创建,请运行以下命令来查看所有 DataVolume 对象:
$ oc get dvs
6.14.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.14.3. 上传本地磁盘镜像至块存储 DataVolume
您可使用 virtctl
命令行实用程序上传本地磁盘镜像至块 DataVolume 中。
在此工作流中,您会创建一个本地块设备用作 PersistentVolume,将此块卷与 upload
DataVolume 关联,并使用 virtctl
将本地磁盘镜像上传至 DataVolume 中。
6.14.3.1. 先决条件
-
安装
kubevirt-virtctl
软件包 - 如果根据 CDI 支持的操作列表规定需要涂销空间,您必须首先定义一个 StorageClass 或准备 CDI 涂销空间才能成功完成此操作。
6.14.3.2. 关于 DataVolume
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层 PersistentVolumeClaim (PVC) 关联的导入、克隆和上传操作。DataVolume 与 KubeVirt 集成,它们可在 PVC 准备好前阻止虚拟机启动。
6.14.3.3. 关于块 PersistentVolume
块 PersistentVolume (PV) 是一个受原始块设备支持的 PV。这些卷没有文件系统。对于可以直接写入磁盘或者实现其自己的存储服务的虚拟机来说,使用它可以获得性能优势。
原始块卷可以通过在 PV 和 PersistentVolumeClaim (PVC) 规格中指定 volumeMode: Block
来置备。
6.14.3.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.14.3.5. 创建上传 DataVolume
使用 upload
数据源手动创建 DataVolume,用于上传本地磁盘镜像。
流程
创建 DataVolume 配置,用于指定
spec: source: upload{}
:apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <upload-datavolume> 1 spec: source: upload: {} pvc: accessModes: - ReadWriteOnce resources: requests: storage: <2Gi> 2
运行以下命令来创建 DataVolume:
$ oc create -f <upload-datavolume>.yaml
6.14.3.6. 上传本地磁盘镜像至一个 DataVolume
您可使用 virtctl
将一个客户端机器中的一个本地磁盘镜像上传至集群中的 DataVolume (DV)。您可以使用集群中已存在的 DV,也可以在此过程中创建新的 DV。
上传本地磁盘镜像后,您可将其添加到虚拟机中。
先决条件
-
具有 RAW、ISO 或 QCOW2 格式的虚拟机磁盘镜像,可选择使用
xz
或gz
进行压缩。 -
kubevirt-virtctl
软件包必须安装在客户端机器上。 - 客户端机器必须配置为信任 OpenShift Container Platform 路由器的证书。
流程
确定以下各项:
- 要使用的上传 DataVolume 的名称。如果此 DataVolume 不存在,则会自动创建。
- 在上传过程中创建 DataVolume 的大小。大小必须大于或等于磁盘镜像的大小。
- 要上传的虚拟机磁盘镜像的文件位置
运行
virtctl image-upload
命令上传磁盘镜像。指定您在上一步中获得的参数。例如:$ virtctl image-upload dv <datavolume_name> \ 1 --size=<datavolume_size> \ 2 --image-path=</path/to/image> \ 3
注意-
如果您不想创建新 DataVolume,请省略
--size
参数,并包含--no-create
标志。 -
若要在使用 HTTPS 时允许不安全的服务器连接,请使用
--insecure
参数。注意,在使用--insecure
标志时,不会验证上传端点的真实性。
-
如果您不想创建新 DataVolume,请省略
可选。要验证 DataVolume 是否已创建,请运行以下命令来查看所有 DataVolume 对象:
$ oc get dvs
6.14.3.7. 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.14.4. 将本地虚拟机磁盘移动到不同的节点中
使用本地卷存储的虚拟机可被移动,以便在特定节点中运行。
因为以下原因,您可能想要将该虚拟机移动到特定的节点上:
- 当前节点对本地存储配置有限制。
- 新节点对那个虚拟机的工作负载进行了更好的优化。
要移动使用本地存储的虚拟机,您必须使用 DataVolume 克隆基础卷。克隆操作完成后,您可以 编辑虚拟机配置,以便使用新 DataVolume,或 将新 DataVolume 添加到其他虚拟机。
没有 cluster-admin
角色的用户需要 额外的用户权限 才能在命名空间间克隆卷。
6.14.4.1. 克隆本地卷到另一个节点
您可以通过克隆底层 PersistentVolumeClaim (PVC),移动虚拟机磁盘使其在特定节点上运行。
要确保虚拟机磁盘克隆到正确的节点,您必须创建新的 PersistentVolume (PV) 或在正确的节点上识别它。对 PV 应用一个唯一标签,以便 DataVolume 能够引用它。
目标 PV 的大小不得小于源 PVC。如果目标 PV 小于源 PVC,克隆操作会失败。
先决条件
- 虚拟机不能正在运行。在克隆虚拟机磁盘前关闭虚拟机。
流程
在节点上创建新本地 PV,或使用已有的本地 PV:
创建包含
nodeAffinity.nodeSelectorTerms
参数的本地 PV。以下 manifest 在node01
上创建了一个10Gi
的本地 PVkind: PersistentVolume apiVersion: v1 metadata: name: <destination-pv> 1 annotations: spec: accessModes: - ReadWriteOnce capacity: storage: 10Gi 2 local: path: /mnt/local-storage/local/disk1 3 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - node01 4 persistentVolumeReclaimPolicy: Delete storageClassName: local volumeMode: Filesystem
已存在于节点上的一个 PV。您可以通过查看其配置中的
nodeAffinity
字段来标识置备 PV 的节点:$ oc get pv <destination-pv> -o yaml
以下输出显示 PV 位于
node01
:... spec: nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname 1 operator: In values: - node01 2 ...
为 PV 添加唯一标签:
$ oc label pv <destination-pv> node=node01
创建 DataVolume 清单来引用以下内容:
- 虚拟机的 PVC 名称和命名空间。
- 应用上一步中的 PV 标签。
目标 PV 的大小。
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: <clone-datavolume> 1 spec: source: pvc: name: "<source-vm-disk>" 2 namespace: "<source-namespace>" 3 pvc: accessModes: - ReadWriteOnce selector: matchLabels: node: node01 4 resources: requests: storage: <10Gi> 5
通过将 DataVolume 清单应用到集群来开始克隆操作:
$ oc apply -f <clone-datavolume.yaml>
DataVolume 将虚拟机的 PVC 克隆到特定节点上的 PV 中。
6.14.5. 通过添加空白磁盘镜像扩展虚拟存储
您可向容器原生虚拟化添加空白磁盘镜像来提高存储容量或创建新数据分区。
6.14.5.1. 关于 DataVolume
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层 PersistentVolumeClaim (PVC) 关联的导入、克隆和上传操作。DataVolume 与 KubeVirt 集成,它们可在 PVC 准备好前阻止虚拟机启动。
6.14.5.2. 使用 DataVolume 创建空白磁盘镜像
您可通过自定义和部署 DataVolume 配置文件在 PersistentVolumeClaim 中创建新空白磁盘镜像。
先决条件
- 至少一个可用 PersistentVolume。
-
安装 OpenShift CLI(
oc
)。
流程
编辑 DataVolume 配置文件:
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: blank-image-datavolume spec: source: blank: {} pvc: # Optional: Set the storage class or omit to accept the default # storageClassName: "hostpath" accessModes: - ReadWriteOnce resources: requests: storage: 500Mi
运行以下命令,创建空白磁盘镜像:
$ oc create -f <blank-image-datavolume>.yaml
6.14.5.3. 模板:适用于空白磁盘镜像的 DataVolume 配置文件
blank-image-datavolume.yaml
apiVersion: cdi.kubevirt.io/v1alpha1 kind: DataVolume metadata: name: blank-image-datavolume spec: source: blank: {} pvc: # Optional: Set the storage class or omit to accept the default # storageClassName: "hostpath" accessModes: - ReadWriteOnce resources: requests: storage: 500Mi
6.14.6. DataVolume 的存储默认值
kubevirt-storage-class-defaults
ConfigMap 为 DataVolumes 提供了默认的访问模式和卷模式。您可以编辑或添加 ConfigMap 的默认存储类,以便在 Web 控制台中创建与基础存储更加匹配的 DataVolume。
6.14.6.1. 关于 DataVolume 的存储设置
DataVolume 要求在 web 控制台中创建定义的 访问模式和卷模式。这些存储设置默认使用 ReadWriteOnce
访问模式和 Filesystem
卷模式进行配置。
您可以通过编辑 openshift-cnv
命名空间中的 kubevirt-storage-class-defaults
ConfigMap 来修改这些设置。您还可以为其他存储类添加设置,以便在 Web 控制台中为不同的存储类型创建 DataVolume。
您必须配置底层存储支持的存储设置。
在 Web 控制台中创建的所有 DataVolume 都使用默认存储设置,除非您指定了在 ConfigMap 中也定义的存储类。
6.14.6.1.1. 访问模式
DataVolume 支持以下访问模式:
-
ReadWriteOnce
:这个卷可以被一个单一的节点以读写模式挂载。ReadWriteOnce
具有更大的灵活性,它是默认设置。 -
ReadWriteMany
:卷可以被多个节点以读写模式挂载。对于一些功能(如虚拟机在节点间实时迁移),ReadWriteMany
是必需的。
如果底层存储支持,则建议使用 ReadWriteMany
。
6.14.6.1.2. 卷模式
卷模式定义了卷是否要与格式化的文件系统一起使用,或者保持在原始块状态。DataVolume 支持以下卷模式:
-
Filesystem
: 在 DataVolume 中创建文件系统。这是默认的设置。 -
Block
: 创建块 DataVolume。只有底层存储支持时才使用Block
。
6.14.6.2. 在 web 控制台中编辑 kubevirt-storage-class-defaults
ConfigMap
通过编辑 openshift-cnv
命名空间中的 kubevirt-storage-class-defaults
ConfigMap 来修改 DataVolume 的存储设置。您还可以为其他存储类添加设置,以便在 Web 控制台中为不同的存储类型创建 DataVolume。
您必须配置底层存储支持的存储设置。
流程
-
从侧边菜单中点 Workloads
Config Maps。 - 在 Project 列表中,选择 openshift-cnv。
- 点击 kubevirt-storage-class-defaults 打开 Config Map Overview。
- 点击 YAML 选项卡以显示可编辑的配置。
使用适合您的底层存储的存储配置更新
data
值:... data: accessMode: ReadWriteOnce 1 volumeMode: Filesystem 2 <new>.accessMode: ReadWriteMany 3 <new>.volumeMode: Block 4
- 点 Save 以更新 ConfigMap。
6.14.6.3. 在 CLI 中编辑 kubevirt-storage-class-defaults
ConfigMap
通过编辑 openshift-cnv
命名空间中的 kubevirt-storage-class-defaults
ConfigMap 来修改 DataVolume 的存储设置。您还可以为其他存储类添加设置,以便在 Web 控制台中为不同的存储类型创建 DataVolume。
您必须配置底层存储支持的存储设置。
流程
使用
oc edit
编辑 ConfigMap:$ oc edit configmap kubevirt-storage-class-defaults -n openshift-cnv
更新 ConfigMap 的
data
值:... data: accessMode: ReadWriteOnce 1 volumeMode: Filesystem 2 <new>.accessMode: ReadWriteMany 3 <new>.volumeMode: Block 4
- 保存并退出编辑器以更新 ConfigMap。
6.14.6.4. 多个存储类默认设置示例
以下 YAML 文件是一个 kubevirt-storage-class-defaults
ConfigMap 示例,它为两个存储类( migration
和 block
)配置了存储设置。
在更新 ConfigMap 前,请确保您的底层存储支持所有设置。
kind: ConfigMap apiVersion: v1 metadata: name: kubevirt-storage-class-defaults namespace: openshift-cnv ... data: accessMode: ReadWriteOnce volumeMode: Filesystem nfs-sc.accessMode: ReadWriteMany nfs-sc.volumeMode: Filesystem block-sc.accessMode: ReadWriteMany block-sc.volumeMode: Block
6.14.7. 准备 CDI 涂销空间
6.14.7.1. 关于 DataVolume
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层 PersistentVolumeClaim (PVC) 关联的导入、克隆和上传操作。DataVolume 与 KubeVirt 集成,它们可在 PVC 准备好前阻止虚拟机启动。
6.14.7.2. 了解涂销空间
Containerized Data Importer (CDI) 需要涂销空间(临时存储)来完成一些操作,如导入和上传虚拟机镜像。在此过程中,CDI 会提供一个与支持目标 DataVolume (DV) 的 PVC 大小相等的涂销空间 PVC。该涂销空间 PVC 将在操作完成或中止后删除。
该 CDIConfig 对象可用于通过设置 CDIConfig 对象的 spec:
部分中的 scratchSpaceStorageClass
来定义使用哪个 StorageClass 绑定涂销空间 PVC。
如果定义的 StorageClass 与集群中的 StorageClass 不匹配,则会使用为集群定义的默认 StorageClass。如果没有在集群中定义默认 StorageClass,则会使用置备原始 DV 或 PVC 时使用的 StorageClass。
CDI 需要通过 file
卷模式来请求涂销空间,与支持原始 DataVolume 的 PVC 无关。如果 block
卷模式支持原始 PVC,则您必须定义一个能够置备 file
卷模式 PVC 的 StorageClass。
手动调配
如果没有存储类,CDI 则会使用项目中与镜像的大小要求匹配的任何 PVC。如果没有与这些要求匹配的 PVC,则 CDI 导入 Pod 将保持 Pending 状态,直至有适当的 PVC 可用或直至超时功能关闭 Pod。
6.14.7.3. 需要涂销空间的 CDI 操作
类型 | 原因 |
---|---|
registry 导入 | CDI 必须下载镜像至涂销空间,并对层进行提取,以查找镜像文件。然后镜像文件传递至 QEMU-IMG 以转换成原始磁盘。 |
上传镜像 | QEMU-IMG 不接受来自 STDIN 的输入。相反,要上传的镜像保存到涂销空间中,然后才可传递至 QEMU-IMG 进行转换。 |
存档镜像的 HTTP 导入 | QEMU-IMG 不知道如何处理 CDI 支持的存档格式。相反,镜像取消存档并保存到涂销空间中,然后再传递至 QEMU-IMG。 |
经过身份验证的镜像的 HTTP 导入 | QEMU-IMG 未充分处理身份验证。相反,镜像保存到涂销空间中并进行身份验证,然后再传递至 QEMU-IMG。 |
自定义证书的 HTTP 导入 | QEMU-IMG 未充分处理 HTTPS 端点的自定义证书。相反,CDI 下载镜像到涂销空间,然后再将文件传递至 QEMU-IMG。 |
6.14.7.4. 在 CDI 配置中定义 StorageClass
在 CDI 配置中定义 StorageClass,为 CDI 操作动态置备涂销空间。
流程
使用
oc
客户端来编辑cdiconfig/config
并添加或编辑spec: scratchSpaceStorageClass
,以便与集群中的 StorageClass 匹配。$ oc edit cdiconfig/config
API Version: cdi.kubevirt.io/v1alpha1 kind: CDIConfig metadata: name: config ... spec: scratchSpaceStorageClass: "<storage_class>" ...
6.14.7.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
其他资源
- 有关 StorageClass 以及如何在集群中对其进行定义的更多信息,请参阅动态置备小节。
6.14.8. 删除 DataVolume
您可以使用 oc
CLI 手动删除 DataVolume。
当您删除虚拟机时,其使用的 DataVolume 会被自动删除。
6.14.8.1. 关于 DataVolume
DataVolume
对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层 PersistentVolumeClaim (PVC) 关联的导入、克隆和上传操作。DataVolume 与 KubeVirt 集成,它们可在 PVC 准备好前阻止虚拟机启动。
6.14.8.2. 列出所有 DataVolume
您可以使用 oc
CLI 列出集群中的 DataVolume。
流程
运行以下命令列出所有 DataVolumes:
$ oc get dvs
6.14.8.3. 删除 DataVolume
您可以使用 oc
CLI 删除 DataVolume。
先决条件
- 找出要删除的 DataVolume 的名称。
流程
运行以下命令删除 DataVolume:
$ oc delete dv <datavolume_name>
注意此命令只删除当前项目中存在的对象。如果您要删除其他项目或命名空间中的对象,请使用
-n <project_name>
选项。