跳转至

7.存储配置项(StorageProfile)

StorageProfile(存储配置文件)

StorageProfile 可以为PVC提供推荐参数信息,这可以被CDI控制器在为DV创建PVC时使用。例如,如果DV的某些属性未设置,则可以从StorageProfile应用默认值。 CDI为一些已知的后端提供了一组具有默认推荐值的StorageProfile。CDI会为每个SC都创建一个StorageProfile对象,关系是一一对应的。 如果在SC中定义的存储提供程序没有在CDI中配置默认值,则生成的StorageProfile具有空的claimPropertySets。

下面就以我们用的Ceph SC为例,来说明StorageProfile的使用。

  • cloneStrategy 克隆策略,可以是snapshotcopycsi-clone。如果不指定该值,CDI将尝试使用snapshot方式,如果不可行则退回到copy方式。若存储类及其提供者支持CSI卷克隆功能,则用户可以选择csi-clone作为首选克隆方法。
  • claimPropertySets 是一个列表,包括多个claimPropertySet
  • accessMode 卷的访问模式,可以是 ReadWriteOnceReadWriteManyReadOnlyMany等。
  • volumeMode 卷的类型,可以是 Filesystem或者Block

可以通过在存储类(StorageClass)添加注解cdi.kubevirt.io/clone-strategy来指定克隆策略。 注解的值可以是copysnapshotcsi-clone。当配置存储配置文件中的克隆策略时,CDI会使用这个注解值。这对于已知的特定存储类配置需要不同行为的提供者非常有用。

示例

修改已有的StorageProfile

kubectl get storageprofile ceph-hdd-block -o yaml
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
现在只需要这么写就行了:
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
省略的属性会根据所指定的storageClassName自动继承相应的存储类的默认设置,从而简化了用户的配置过程。

用户自定义修改的StorageProfile参数拥有更高的优先级,并会覆盖CDI提供的参数,在StorageProfilestatus部分可以查看到所有已提供的参数 优先级顺序如下: 1. StorageProfile中的cdi.Spec.CloneStrategyOverride如果有值,则会覆盖默认值,参考智能克隆。 2. 在 DV上直接定义的参数,优先生效,比如指定了accessModesvolumeMode等参数。 3. 用户如果提供了StorageProfile中的claimPropertySets参数,则使用用户定义的参数。 4. 使用CDI给的默认推荐参数。 5. 最后,使用空值或Kubernetes默认值作为最终选择。

注意 如果StorageProfile文件中没有包含任何推荐参数,在在创建DV关联的PVC时,如果没有明确配置访问模式(accessModes),则无法成功创建PVC。 在这种情况下,用户就需要自行在创建DV时指定PVC所需的访问模式以及其他必要参数,以便系统能够正确地为DV分配和管理存储资源。