7.存储配置项(StorageProfile)
StorageProfile(存储配置文件)¶
StorageProfile可以为PVC提供推荐参数信息,这可以被CDI控制器在为DV创建PVC时使用。例如,如果DV的某些属性未设置,则可以从StorageProfile应用默认值。 CDI为一些已知的后端提供了一组具有默认推荐值的StorageProfile。CDI会为每个SC都创建一个StorageProfile对象,关系是一一对应的。 如果在SC中定义的存储提供程序没有在CDI中配置默认值,则生成的StorageProfile具有空的claimPropertySets。下面就以我们用的Ceph SC为例,来说明StorageProfile的使用。
cloneStrategy克隆策略,可以是snapshot、copy、csi-clone。如果不指定该值,CDI将尝试使用snapshot方式,如果不可行则退回到copy方式。若存储类及其提供者支持CSI卷克隆功能,则用户可以选择csi-clone作为首选克隆方法。claimPropertySets是一个列表,包括多个claimPropertySetaccessMode卷的访问模式,可以是ReadWriteOnce、ReadWriteMany、ReadOnlyMany等。volumeMode卷的类型,可以是Filesystem或者Block
可以通过在存储类(StorageClass)添加注解cdi.kubevirt.io/clone-strategy来指定克隆策略。
注解的值可以是copy、snapshot或csi-clone。当配置存储配置文件中的克隆策略时,CDI会使用这个注解值。这对于已知的特定存储类配置需要不同行为的提供者非常有用。
示例
修改已有的StorageProfile
apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: labels: app: containerized-data-importer app.kubernetes.io/component: storage app.kubernetes.io/managed-by: cdi-controller cdi.kubevirt.io: "" name: ceph-hdd-block ... spec: cloneStrategy: snapshot claimPropertySets: - accessModes: - ReadWriteMany volumeMode: Block - accessModes: - ReadWriteOnce volumeMode: Block - accessModes: - ReadWriteOnce volumeMode: Filesystem status: claimPropertySets: - accessModes: - ReadWriteMany volumeMode: Block - accessModes: - ReadWriteOnce volumeMode: Block - accessModes: - ReadWriteOnce volumeMode: Filesystem cloneStrategy: snapshot dataImportCronSourceFormat: pvc provisioner: rbd.csi.ceph.com snapshotClass: csi-rbdplugin-snapclass storageClass: ceph-hdd-block# DV apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: img-cirros03 namespace: default spec: source: http: url: http://images.demo.com:10800/images/cirros-0.5.1-x86_64-disk.img pvc: storageClassName: "ceph-hdd-block" accessModes: - ReadWriteMany resources: requests: storage: 1Gi volumeMode: Block原来要这么写:
现在只需要这么写就行了:apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: cloned-dv1 namespace: test spec: source: pvc: namespace: default name: img-cirros-0.5.1 pvc: storageClassName: "ceph-hdd-block" volumeMode: Block accessModes: - ReadWriteMany resources: requests: storage: 1Gi省略的属性会根据所指定的storageClassName自动继承相应的存储类的默认设置,从而简化了用户的配置过程。apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: cloned-dv1 namespace: test spec: source: pvc: namespace: default name: img-cirros-0.5.1 storage: storageClassName: "ceph-hdd-block" # 下面这些都可以省略 accessModes: - ReadWriteMany # 如果storage大小也没有要求,也可以省略 volumeMode: BlockvolumeMode resources: requests: storage: 1Gi用户自定义修改的
StorageProfile参数拥有更高的优先级,并会覆盖CDI提供的参数,在StorageProfile的status部分可以查看到所有已提供的参数 优先级顺序如下: 1.StorageProfile中的cdi.Spec.CloneStrategyOverride如果有值,则会覆盖默认值,参考智能克隆。 2. 在 DV上直接定义的参数,优先生效,比如指定了accessModes、volumeMode等参数。 3. 用户如果提供了StorageProfile中的claimPropertySets参数,则使用用户定义的参数。 4. 使用CDI给的默认推荐参数。 5. 最后,使用空值或Kubernetes默认值作为最终选择。注意 如果
StorageProfile文件中没有包含任何推荐参数,在在创建DV关联的PVC时,如果没有明确配置访问模式(accessModes),则无法成功创建PVC。 在这种情况下,用户就需要自行在创建DV时指定PVC所需的访问模式以及其他必要参数,以便系统能够正确地为DV分配和管理存储资源。