×

关于临时空间

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

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

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

CDI 需要请求具有file卷模式的临时空间,而不管支持原始数据卷的PVC是什么。如果原始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*

✓ 支持的操作

□ 不支持的操作

* 需要临时空间

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

其他资源