当前位置: 首页 > news >正文

OpenShift Virtualization - 虚机存储的相关概念 DataVolume、CDI 和 StorageProfile

《OpenShift / RHEL / DevSecOps 汇总目录》
说明:本文已经在 OpenShift 4.18 环境中验证

文章目录

  • DataVolume 和 Containerized Data Importer (CDI)
    • DataVolume 和 PVC 的关系
    • DataVolume 和 CDI 的关系
    • PVC 和 CDI 的关系
  • StorageProfile 和 StorageClass 的关系
  • 参考

为给虚机提供存储,KubeVirt 在 Kubernetes 的基础上增加了一些存储对象和概念,它们主要包括 DataVolume、CDI、StorageProfile 等。

DataVolume 和 Containerized Data Importer (CDI)

DataVolume 和 CDI 是两个紧密协作的组件,它们共同构成了 KubeVirt 虚拟机磁盘管理的核心机制。DataVolume 是声明式 API 用来定义虚机使用的磁盘存储,虚机除了可以直接使用 PVC 作为磁盘存储外,还可使用 DataVolume 作为磁盘存储(因为 DataVolume 其实是自动关联一个对应 PVC 的)。而 CDI 是运行引擎,它可根据 DataVolume 的定义将数据从源自动填充到 DataVolume 所关联的 PVC 中。
在这里插入图片描述

  • DataVolume 是一个 Kubernetes 自定义资源(CRD),用来定义虚机用到的一个存储以及如何从各种外部源将已有数据自动导入到 PVC 中(导入过程由 CDI 环境执行)。
  • CDI 负责将来自各种源头的磁盘文件数据导入到由 DataVolume 声明的 PVC 中。它使用 StorageProfile 中定义的优选配置与各种存储提供商进行交互。
    在这里插入图片描述

DataVolume 和 PVC 的关系

我们可以把 DataVolume 看成一个高阶的 PVC,因为在创建一个 DataVolume 的时候除了会创建一个同名的 PVC 以外,CDI 还可将外部数据导入到该 PVC 中。

  1. 创建一个 DataVolume 对象。指定使用 ocs-external-storagecluster-cephfs 存储类(说明将是 FileSystem 类型)分配存储空间,存储空间分配 1Gi,且不用向存储复制任何附加内容。
$ oc apply -f - << EOF
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:name: blank-fs-dv
spec:source:blank: {}storage:resources:requests:storage: 1GistorageClassName: ocs-external-storagecluster-cephfs
EOF
  1. 查看有同名的 PVC 被创建。注意:PVC 的实际容量为 2Gi,多占用的空间可能是为构建文件系统所需。
$ oc get pvc blank-fs-dv
NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                         VOLUMEATTRIBUTESCLASS   AGE
blank-fs-dv   Bound    pvc-0d870dff-d21c-418f-b8ef-59faaa70c43d   2Gi        RWX            ocs-external-storagecluster-cephfs   <unset>                 25s
  1. 删除 DV 对象,确认对应的同名 PVC 也被自动删除。
$ oc delete dv blank-fs-dv
$ oc get pvc blank-fs-dv

DataVolume 和 CDI 的关系

DataVolume 用来声明虚机使用的存储,以及定义如何从各种外部源将数据导入到 PVC 中,而导入过程是由 CDI 环境执行的。

  1. 在 3 个窗口中各执行以下一条命令,跟踪 CDI 导入数据过程、DataVolume 状态变化和 PVC 的变化情况。
$ oc get pod -w
$ oc get dv -w
$ oc get pvc -w
  1. 再次创建 DataVolume 对象。
$ oc apply -f - << EOF
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:name: blank-fs-dv
spec:source:blank: {}storage:resources:requests:storage: 1GistorageClassName: ocs-external-storagecluster-cephfs
EOF
  1. 可以看到执行 CDI 导入操作的 pod 运行情况、DataVolume 的状态变化和 PVC 的变化情况。注意:该过程除了创建名为 blank-fs-dv 的 PVC 外还有一个辅助 PVC。
$ oc get pod -w
NAME                              					  READY   STATUS    RESTARTS   AGE
importer-prime-bbb324ed-0073-47c0-8dba-418813d5524f   0/1     Pending   0          0s
importer-prime-bbb324ed-0073-47c0-8dba-418813d5524f   0/1     Pending   0          0s
importer-prime-bbb324ed-0073-47c0-8dba-418813d5524f   0/1     Pending   0          1s
importer-prime-bbb324ed-0073-47c0-8dba-418813d5524f   0/1     Pending   0          1s
importer-prime-bbb324ed-0073-47c0-8dba-418813d5524f   0/1     ContainerCreating   0          1s
importer-prime-bbb324ed-0073-47c0-8dba-418813d5524f   0/1     ContainerCreating   0          7s
importer-prime-bbb324ed-0073-47c0-8dba-418813d5524f   0/1     Completed           0          7s
importer-prime-bbb324ed-0073-47c0-8dba-418813d5524f   0/1     Completed           0          9s$ oc get dv -w
NAME                                                    PHASE       PROGRESS   RESTARTS   AGE
blank-fs-dv                                                                               0s
blank-fs-dv                                                                               0s
blank-fs-dv                                             Pending                           0s
blank-fs-dv                                             Pending     N/A                   0s
blank-fs-dv                                             ImportScheduled   N/A                   1s
blank-fs-dv                                             ImportScheduled   N/A                   7s
blank-fs-dv                                             Succeeded         100.0%                9s
blank-fs-dv                                             Succeeded         100.0%                9s$ oc get pvc -w
NAME                                                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES    STORAGECLASS                           VOLUMEATTRIBUTESCLASS   AGE
blank-fs-dv                                             Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 0s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 0s
blank-fs-dv                                             Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 0s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 0s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 0s
blank-fs-dv                                             Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 0s
blank-fs-dv                                             Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 5s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 5s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Pending   pvc-89a3b968-3d86-4c62-ac7c-97d3cbb20a77   0                         ocs-external-storagecluster-cephfs     <unset>                 5s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Bound     pvc-89a3b968-3d86-4c62-ac7c-97d3cbb20a77   2Gi        RWX            ocs-external-storagecluster-cephfs     <unset>                 5s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Bound     pvc-89a3b968-3d86-4c62-ac7c-97d3cbb20a77   2Gi        RWX            ocs-external-storagecluster-cephfs     <unset>                 10s
blank-fs-dv                                             Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 10s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Bound     pvc-89a3b968-3d86-4c62-ac7c-97d3cbb20a77   2Gi        RWX            ocs-external-storagecluster-cephfs     <unset>                 15s
blank-fs-dv                                             Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 15s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Bound     pvc-89a3b968-3d86-4c62-ac7c-97d3cbb20a77   2Gi        RWX            ocs-external-storagecluster-cephfs     <unset>                 16s
blank-fs-dv                                             Pending                                                                        ocs-external-storagecluster-cephfs     <unset>                 16s
blank-fs-dv                                             Pending   pvc-89a3b968-3d86-4c62-ac7c-97d3cbb20a77   0                         ocs-external-storagecluster-cephfs     <unset>                 16s
blank-fs-dv                                             Bound     pvc-89a3b968-3d86-4c62-ac7c-97d3cbb20a77   2Gi        RWX            ocs-external-storagecluster-cephfs     <unset>                 16s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Lost      pvc-89a3b968-3d86-4c62-ac7c-97d3cbb20a77   0                         ocs-external-storagecluster-cephfs     <unset>                 20s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Terminating   pvc-89a3b968-3d86-4c62-ac7c-97d3cbb20a77   0                         ocs-external-storagecluster-cephfs     <unset>                 20s
prime-bd250c74-5649-4d56-b990-bea277a13fb2              Terminating   pvc-89a3b968-3d86-4c62-ac7c-97d3cbb20a77   0                         ocs-external-storagecluster-cephfs     <unset>                 20s
  1. 删除 DV 对象,对应的同名 PVC 也被自动删除。
$ oc delete dv blank-fs-dv

PVC 和 CDI 的关系

除了在前面

  1. 各执行以下命令,跟踪 CDI 导入数据过程和 PVC 的变化情况。
$ oc get pod -w
  1. 直接通过 YAML 创建 PVC。注意:YAML 中包含 app: containerized-data-importer 标签和 cdi.kubevirt.io/storage.import.source: "none" 注释。CDI 在检查到有该注释后也会自动将 source 的数据导入到 PVC 中。
$ oc apply -f - << EOF
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: bland-fs-pvclabels:app: containerized-data-importerannotations:cdi.kubevirt.io/storage.import.source: "none"
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: ocs-external-storagecluster-cephfsvolumeMode: Filesystem
EOF
  1. 确认有 CDI 的 pod 运行。
$ oc get pod -w
NAME                              READY   STATUS    RESTARTS   AGE
importer-bland-fs-pvc             0/1     Pending   0          0s
importer-bland-fs-pvc             0/1     Pending   0          0s
importer-bland-fs-pvc             0/1     ContainerCreating   0          0s
importer-bland-fs-pvc             0/1     ContainerCreating   0          2s
importer-bland-fs-pvc             1/1     Running             0          2s
importer-bland-fs-pvc             0/1     Completed           0          4s

StorageProfile 和 StorageClass 的关系

KubeVirt 的 StorageProfile 可看成是 StorageClass 的"虚拟机专用增强版"。它是为虚拟机优化使用存储而用,主要作用有:

  • 引用关联一个特定的 StorageClass,通常 StorageProfile 和 StorageClass 名称一样
  • 根据所关联的 StorageClass 提供相应的存储设置建议和默认值
  • 指导 CDI 组件如何处理虚拟机磁盘操作
    在这里插入图片描述
  1. 查看系统已有的 StorageProfile 和 StorageClass,确认他们的名称是一样的。
$ oc get storageprofiles
NAME                                             AGE
ocs-external-storagecluster-ceph-rbd             9d
ocs-external-storagecluster-ceph-rbd-immediate   9d
ocs-external-storagecluster-cephfs               9d
openshift-storage.noobaa.io                      9d$ oc get storageclasses
NAME                                             PROVISIONER                             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
ocs-external-storagecluster-ceph-rbd (default)   openshift-storage.rbd.csi.ceph.com      Delete          WaitForFirstConsumer   true                   9d
ocs-external-storagecluster-ceph-rbd-immediate   openshift-storage.rbd.csi.ceph.com      Delete          Immediate              true                   9d
ocs-external-storagecluster-cephfs               openshift-storage.cephfs.csi.ceph.com   Delete          Immediate              true                   9d
openshift-storage.noobaa.io                      openshift-storage.noobaa.io/obc         Delete          Immediate              false                  9d
  1. 查看一个系统已有的 StorageProfile。注意:accessModes、cloneStrategy、volumeMode 等都是它的默认配置。
$ oc get storageprofile ocs-external-storagecluster-cephfs -oyaml
apiVersion: cdi.kubevirt.io/v1beta1
kind: StorageProfile
metadata:creationTimestamp: "2025-09-06T11:14:52Z"generation: 1labels:app: containerized-data-importerapp.kubernetes.io/component: storageapp.kubernetes.io/managed-by: cdi-controllerapp.kubernetes.io/part-of: hyperconverged-clusterapp.kubernetes.io/version: 4.18.0cdi.kubevirt.io: ""name: ocs-external-storagecluster-cephfsownerReferences:- apiVersion: cdi.kubevirt.io/v1beta1blockOwnerDeletion: truecontroller: truekind: CDIname: cdi-kubevirt-hyperconvergeduid: cee16ca6-f0d6-45e0-8da0-1612df3110aeresourceVersion: "54916"uid: a764e23a-7912-46f7-a895-e5d2f48cde3f
spec: {}
status:claimPropertySets:- accessModes:- ReadWriteManyvolumeMode: FilesystemcloneStrategy: csi-clonedataImportCronSourceFormat: pvcprovisioner: openshift-storage.cephfs.csi.ceph.comsnapshotClass: ocs-external-storagecluster-cephfsplugin-snapclassstorageClass: ocs-external-storagecluster-cephfs

参考

https://github.com/kubevirt/containerized-data-importer/blob/main/doc/datavolumes.md
https://kubevirt.io/2018/containerized-data-importer.html
https://kubevirt.io/2018/CDI-DataVolumes.html
https://docs.redhat.com/en/documentation/openshift_container_platform/3.11/html/container-native_virtualization_users_guide/container-native-virtualization-users-guide#cnv_userguide_adding_storage


文章转载自:

http://mUWOIh1Q.rbgqn.cn
http://Xo9gQOeK.rbgqn.cn
http://bJ3IwmcM.rbgqn.cn
http://yPb3LIYY.rbgqn.cn
http://trUGCwru.rbgqn.cn
http://vRptdFHT.rbgqn.cn
http://7vBZgDQD.rbgqn.cn
http://b3KtAjRR.rbgqn.cn
http://onEBuDey.rbgqn.cn
http://mlgjAS7Y.rbgqn.cn
http://VC28w3YY.rbgqn.cn
http://H59K9JXV.rbgqn.cn
http://FUD8aBAs.rbgqn.cn
http://cWRZoFpL.rbgqn.cn
http://2CiPzScG.rbgqn.cn
http://16jbxD29.rbgqn.cn
http://h0wrujvJ.rbgqn.cn
http://47PaxIgy.rbgqn.cn
http://4GTJ73lS.rbgqn.cn
http://pX8un6DZ.rbgqn.cn
http://xccCeC8A.rbgqn.cn
http://rtTlkoY7.rbgqn.cn
http://QMyHCyWm.rbgqn.cn
http://s4dPehvI.rbgqn.cn
http://o2FYFHl2.rbgqn.cn
http://EZRb6C2s.rbgqn.cn
http://SbBxlbUk.rbgqn.cn
http://OohyrNAm.rbgqn.cn
http://SvTyqctm.rbgqn.cn
http://xrTKNktF.rbgqn.cn
http://www.dtcms.com/a/388630.html

相关文章:

  • 2025年Web自动化测试与Selenium面试题收集:从基础到进阶的全方位解析
  • pytorch中的FSDP
  • 贪心算法与材料切割问题详解
  • 2. 结构体
  • MySQL 核心操作:多表联合查询与数据库备份恢复
  • vue3学习日记(十四):两大API选型指南
  • 微信支付回调成功通知到本地
  • 量化交易 - Simple Regression 简单线性回归(机器学习)
  • Kubernetes控制器详解:从Deployment到CronJob
  • python 架构技术50
  • 第九周文件上传
  • MCP大白话理解
  • 【Qt】QJsonValue存储 int64 类型的大整数时,数值出现莫名其妙的变化
  • 【C语言】冒泡排序算法解析与实现
  • [GESP202309 三级] 进制判断
  • 【C++】const和static的用法
  • 箭头函数{}规则,以及隐式返回
  • brain.js构建训练神经网络
  • 开学季高效学习与知识管理技术
  • C++STL与字符串探秘
  • 【面试题】- 使用CompletableFuture实现多线程统计策略工厂模式
  • 打工人日报#20250917
  • LeetCode:12.最小覆盖字串
  • 【C++】 深入理解C++虚函数表与对象析构机制
  • C++ 中 ->和 . 操作符的区别
  • SQL CTE (Common Table Expression) 详解
  • 解决windows更新之后亮度条消失无法调节的问题
  • FPGA学习篇——Verilog学习译码器的实现
  • JavaScript Promise 终极指南 解决回调地狱的异步神器 99% 开发者都在用
  • AI智能体开发实战:从提示工程转向上下文工程的完整指南