2.3. 使用 DataVolume 导入虚拟机镜像


您可将现有虚拟机镜像导入到您的 OpenShift Container Platform 集群中。容器原生虚拟化使用 DataVolume 自动导入数据并创建底层 PersistentVolumeClaim (PVC)。

小心

当您将磁盘镜像导入到 PVC 中时,磁盘镜像扩展为使用 PVC 中请求的全部存储容量。要使用该空间,可能需要扩展虚拟机中的磁盘分区和文件系统。

调整大小的流程因虚拟机上安装的操作系统而异。详情请参阅操作系统文档。

先决条件

2.3.1. CDI 支持的操作列表

此列表针对端点显示内容类型支持的 CDI 操作,以及哪些操作需要涂销空间(scratch space)。

内容类型HTTPHTTPSHTTP 基本身份验证Registry上传

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*

Archive+

✓ TAR

✓ TAR

✓ TAR

□ TAR

□ TAR

✓ 支持的操作

□ 不支持的操作

* 需要涂销空间

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

+ 存档不支持块模式 DV

2.3.2. 关于 DataVolume

DataVolume 对象是 Containerized Data Importer (CDI) 项目提供的自定义资源。DataVolume 编配与底层 PersistentVolumeClaim (PVC) 关联的导入、克隆和上传操作。DataVolume 与 KubeVirt 集成,它们可在 PVC 准备好前阻止虚拟机启动。

2.3.3. 使用 DataVolume 将虚拟机镜像导入到对象中

要从所导入的镜像创建虚拟机,请在创建虚拟机前在 VirtualMachine 配置文件中指定镜像位置。

先决条件

  • 安装 OpenShift Container Platform 命令行界面 (CLI),通常称 oc
  • 具有 RAW、ISO 或 QCOW2 格式的虚拟机磁盘镜像,可选择使用 xzgz 进行压缩
  • 托管镜像的 HTTP 端点,以及访问数据源所需的任何身份验证凭证
  • 至少一个可用 PersistentVolume

流程

  1. 确定用于托管您要导入的虚拟磁盘镜像的 HTTP 文件服务器。您需要一个正确格式的完整 URL:

  2. 如果您的数据源需要身份验证凭证,请编辑 endpoint-secret.yaml 文件,并在集群中应用更新的配置:

    apiVersion: v1
    kind: Secret
    metadata:
      name: <endpoint-secret>
      labels:
        app: containerized-data-importer
    type: Opaque
    data:
      accessKeyId: "" 1
      secretKey:   "" 2
    1
    可选:您的密钥或用户名,base64 编码
    2
    可选:您的 secret 或密码,base64 编码
    $ oc apply -f endpoint-secret.yaml
  3. 编辑虚拟机配置文件,为您要导入的镜像指定数据源。在本例中,导入了一个 Fedora 镜像:

    apiVersion: kubevirt.io/v1alpha3
    kind: VirtualMachine
    metadata:
      creationTimestamp: null
      labels:
        kubevirt.io/vm: vm-fedora-datavolume
      name: vm-fedora-datavolume
    spec:
      dataVolumeTemplates:
      - metadata:
          creationTimestamp: null
          name: fedora-dv
        spec:
          pvc:
            accessModes:
            - ReadWriteOnce
            resources:
              requests:
                storage: 2Gi
            storageClassName: local
          source:
            http:
              url: https://download.fedoraproject.org/pub/fedora/linux/releases/28/Cloud/x86_64/images/Fedora-Cloud-Base-28-1.1.x86_64.qcow2 1
              secretRef: "" 2
              certConfigMap: "" 3
        status: {}
      running: false
      template:
        metadata:
          creationTimestamp: null
          labels:
            kubevirt.io/vm: vm-fedora-datavolume
        spec:
          domain:
            devices:
              disks:
              - disk:
                  bus: virtio
                name: datavolumedisk1
            machine:
              type: ""
            resources:
              requests:
                memory: 64M
          terminationGracePeriodSeconds: 0
          volumes:
          - dataVolume:
              name: fedora-dv
            name: datavolumedisk1
    status: {}
    1
    您要导入的镜像的 HTTP 源。
    2
    secretRef 参数是可选的。
    3
    仅在端点需要身份验证时才需要 certConfigMap。所引用的 ConfigMap 必须与 DataVolume 位于相同命名空间中。
  4. 创建虚拟机:

    $ oc create -f vm-<name>-datavolume.yaml
    注意

    oc create 命令创建 DataVolume 和虚拟机。CDI 控制器使用正确注解创建底层 PVC,导入过程随即开始。导入完成后,DataVolume 状态变为 Succeeded,虚拟机可以启动。

    DataVolume 置备在后台进行,因此无需监控。您可以启动虚拟机,该虚拟机将在导入完成后才会运行。

可选验证步骤

  1. 运行 oc get pods 并查找导入程序 Pod。该 Pod 会从指定的 URL 下载镜像,并将其存储在置备的 PV 上。
  2. 监控 DataVolume 的状态,直至状态显示为 Succeeded

    $ oc describe dv <data-label> 1
    1
    在虚拟机配置文件中指定的 DataVolume 的数据标签。
  3. 要验证置备是否已完成以及 VMI 是否已启动,请尝试访问其串行控制台:

    $ virtctl console <vm-fedora-datavolume>

2.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 源(如适用)。

2.3.5. 模板:DataVolume 导入配置文件

example-import-dv.yaml

apiVersion: cdi.kubevirt.io/v1alpha1
kind: DataVolume
metadata:
  name: "example-import-dv"
spec:
  source:
      http:
         url: "" 1
         secretRef: "" 2
  pvc:
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: "1G"
1
您要导入的镜像的 HTTP 源。
2
secretRef 参数是可选的。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.