2.3. 使用 DataVolume 导入虚拟机镜像
您可将现有虚拟机镜像导入到您的 OpenShift Container Platform 集群中。容器原生虚拟化使用 DataVolume 自动导入数据并创建底层 PersistentVolumeClaim (PVC)。
当您将磁盘镜像导入到 PVC 中时,磁盘镜像扩展为使用 PVC 中请求的全部存储容量。要使用该空间,可能需要扩展虚拟机中的磁盘分区和文件系统。
调整大小的流程因虚拟机上安装的操作系统而异。详情请参阅操作系统文档。
先决条件
- 如果端点需要 TLS 证书,该证书必须包含在与 DataVolume 位于相同命名空间的 ConfigMap 中,并在 DataVolume 配置中被引用。
- 您可能需要定义一个 StorageClass 或准备 CDI 涂销空间才能成功完成此操作。
2.3.1. 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
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 格式的虚拟机磁盘镜像,可选择使用
xz
或gz
进行压缩 -
托管镜像的
HTTP
端点,以及访问数据源所需的任何身份验证凭证 - 至少一个可用 PersistentVolume
流程
确定用于托管您要导入的虚拟磁盘镜像的
HTTP
文件服务器。您需要一个正确格式的完整 URL:如果您的数据源需要身份验证凭证,请编辑
endpoint-secret.yaml
文件,并在集群中应用更新的配置:apiVersion: v1 kind: Secret metadata: name: <endpoint-secret> labels: app: containerized-data-importer type: Opaque data: accessKeyId: "" 1 secretKey: "" 2
$ oc apply -f endpoint-secret.yaml
编辑虚拟机配置文件,为您要导入的镜像指定数据源。在本例中,导入了一个 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: {}
创建虚拟机:
$ oc create -f vm-<name>-datavolume.yaml
注意oc create
命令创建 DataVolume 和虚拟机。CDI 控制器使用正确注解创建底层 PVC,导入过程随即开始。导入完成后,DataVolume 状态变为Succeeded
,虚拟机可以启动。DataVolume 置备在后台进行,因此无需监控。您可以启动虚拟机,该虚拟机将在导入完成后才会运行。
可选验证步骤
-
运行
oc get pods
并查找导入程序 Pod。该 Pod 会从指定的 URL 下载镜像,并将其存储在置备的 PV 上。 监控 DataVolume 的状态,直至状态显示为
Succeeded
。$ oc describe dv <data-label> 1
- 1
- 在虚拟机配置文件中指定的 DataVolume 的数据标签。
要验证置备是否已完成以及 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"