×

关于临时空间

容器化数据导入器 (CDI) 需要临时空间(临时存储)才能完成某些操作,例如导入和上传虚拟机映像。在此过程中,CDI 将预配一个大小等于目标数据卷 (DV) 的底层 PVC 的临时空间 PVC。操作完成后或中止后,将删除临时空间 PVC。

您可以在HyperConverged自定义资源的spec.scratchSpaceStorageClass字段中定义用于绑定临时空间PVC的存储类。

如果定义的存储类与集群中的存储类不匹配,则使用为集群定义的默认存储类。如果集群中未定义默认存储类,则使用用于预配原始 DV 或 PVC 的存储类。

无论底层数据卷的 PVC 使用哪种模式,CDI 都需要使用file卷模式请求临时空间。如果原始 PVC 由block卷模式支持,则必须定义能够预配file卷模式 PVC 的存储类。

手动预配

如果没有存储类,CDI 将使用项目中符合映像大小要求的任何 PVC。如果没有符合这些要求的 PVC,则 CDI 导入 pod 将保持Pending状态,直到提供合适的 PVC 或超时函数终止 pod。

需要临时空间的CDI操作

类型 原因

注册表导入

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。

定义存储类

您可以通过向HyperConverged自定义资源 (CR) 添加spec.scratchSpaceStorageClass字段来定义容器化数据导入器 (CDI) 在分配临时空间时使用的存储类。

先决条件
  • 安装 OpenShift CLI (oc)。

步骤
  1. 通过运行以下命令编辑HyperConverged CR

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. spec.scratchSpaceStorageClass字段添加到CR,并将值设置为集群中存在的存储类的名称

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      scratchSpaceStorageClass: "<storage_class>" (1)
    1 如果不指定存储类,CDI 将使用正在填充的持久卷声明的存储类。
  3. 保存并退出默认编辑器以更新HyperConverged CR。

CDI支持的操作矩阵

此矩阵显示了针对端点的各种内容类型的支持的 CDI 操作,以及这些操作中哪些需要临时空间。

内容类型 HTTP HTTPS HTTP 基本身份验证 注册表 上传

KubeVirt (QCOW2)

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2**
✓ GZ*
✓ XZ*

✓ QCOW2
✓ GZ*
✓ XZ*

✓ QCOW2*
□ GZ
□ XZ

✓ QCOW2*
✓ GZ*
✓ XZ*

KubeVirt (RAW)

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW
✓ GZ
✓ XZ

✓ RAW*
□ GZ
□ XZ

✓ RAW*
✓ GZ*
✓ XZ*

✓ 支持的操作

□ 不支持的操作

* 需要临时空间

** 如果需要自定义证书颁发机构,则需要临时空间

附加资源