链接复制成功!
自定义存储类(StorageClass)
StorageClass是Kubernetes中用于定义存储类别的资源对象,提供动态分配存储卷的能力。通过设置不同的参数,StorageClass能够根据业务需求自动供应和调整存储资源。在PVC中指定StorageClassName字段后,若在集群中未找到匹配的PV,Kubernetes将根据所引用的StorageClass调用对应的Provisioner动态创建符合要求的PV及底层存储资源,从而简化了手动创建和维护PV的流程。StorageClass中的参数作为默认配置项使用,当PVC中存在与之冲突的配置时,以PVC中的设置为准。
如果CCE中提供的表3 默认StorageClass无法满足业务需求,您可以自定义创建新的StorageClass,设置回收策略、绑定模式等参数,以方便后续使用。
前提条件
已安装CCE容器存储(Everest)插件,且插件处于运行中状态,具体操作步骤请参见CCE容器存储(Everest)。
创建StorageClass
CCE支持两种方式创建StorageClass,即控制台和kubectl命令行方式。kubectl命令行方式更加灵活,支持配置更多参数,请结合需求进行选择。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏选择“存储”,在右侧选择“存储类”页签。单击右上角“创建存储类”,在弹出的窗口中填写存储类参数。
图1 创建存储类
参数
描述
存储类类型
选择底层存储类型。
名称
输入存储类的名称,同一集群的存储类名称需唯一。
回收策略
用于指定删除PVC时底层存储的回收策略,详情请参见PV回收策略。
- Delete:存储卷声明PVC删除时,会将关联的底层存储资源删除,并同步移除PV资源,请谨慎使用。
- Retain:存储卷声明PVC删除时,PV和关联的底层存储资源均会保留,需要手动删除。
绑定模式
动态创建PV的时间,分为立即创建和延迟创建。
- Immediate:PVC创建后,会立即创建底层存储资源及存储卷PV,并与PVC绑定。本地持久卷类型不支持设置为Immediate。
- WaitForFirstConsumer:PVC创建后,不会立即与存储卷PV绑定,而是等需要挂载该PVC的Pod被调度后,再创建底层存储资源及存储卷PV,并与PVC绑定。对象存储、文件存储、极速文件存储类型不支持设置为WaitForFirstConsumer。
- 单击“创建”。您可以在“存储类”页签下查看已经创建的存储类及相关信息。
本节提供了多种类型的StorageClass模板,您可根据业务需求选择合适的模板,快速创建符合场景要求的StorageClass资源。
云硬盘存储
- 通过kubectl连接集群。
- 执行以下命令,创建StorageClass的YAML文件,文件名支持自定义。
vim evs-storageclass.yaml
文件内容如下:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-disk-evs annotations: storageclass.kubernetes.io/is-default-class: "false" # 非必选项,指定集群中默认的StorageClass,一个集群中只能有一个默认的StorageClass provisioner: everest-csi-provisioner parameters: csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io csi.storage.k8s.io/fstype: ext4 everest.io/disk-volume-type: GPSSD2 everest.io/enterprise-project-id: xxx-xxx-xxx-xxx-xxx # 指定企业项目id,仅限于已开通企业项目的账号使用 everest.io/passthrough: 'true' everest.io/disk-iops: '3000' # 仅通用型SSD v2和极速型SSD v2类型的云硬盘支持设置 everest.io/disk-throughput: '100' # 仅通用型SSD v2类型的云硬盘支持设置 reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediate mountOptions: [] # 非必选项,仅部分存储类型支持,如果存储类型不支持,请删除该参数
表1 参数说明 参数
说明
metadata.annotations.storageclass.kubernetes.io/is-default-class
用于指定默认StorageClass,一个集群中建议只设置一个默认的StorageClass。如果存在多个默认StorageClass,CCE不会报错,但行为可能不确定。
- true:表示该StorageClass为默认StorageClass。创建PVC时,如果未显式指定StorageClassName,系统将自动使用默认StorageClass。
- false或不设置该参数:表示该StorageClass为非默认StorageClass。
provisioner
表示存储资源提供商。CCE均由Everest插件提供,此处只能填写everest-csi-provisioner。
parameters
用于定义存储类的具体配置参数,详情请参见表2。
reclaimPolicy
用于指定删除PVC时底层存储的回收策略,详情请参见PV回收策略。该参数未指定时,默认为Delete。
- Delete:存储卷声明PVC删除时,会将关联的底层存储资源删除,并同步移除PV资源,请谨慎使用。
- Retain:存储卷声明PVC删除时,PV和关联的底层存储资源均会保留,其中PV状态被设置为已释放,继续手动删除PV不会删除底层存储资源,若希望该PV还能被PVC绑定,需去除PV上与原PVC绑定的相关信息。
allowVolumeExpansion
表示由该存储类创建的PV是否支持动态扩容,即是否允许通过修改PVC的方式动态扩容其绑定的存储卷,默认为false。
该参数仅为开启动态扩容的开关,动态扩容能否生效取决于底层存储插件的支持情况。若底层存储插件不支持,即使该参数设置为true,仍无法实现扩容。目前仅云硬盘、SFS Turbo(无子目录或子目录有限额)支持动态扩容。
volumeBindingMode
表示卷绑定模式,即动态创建PV的时间,分为立即创建(Immediate)和延迟创建(WaitForFirstConsumer)。
- Immediate:PVC创建后,会立即创建底层存储资源及存储卷PV,并与PVC绑定。
- WaitForFirstConsumer:PVC创建后,不会立即与存储卷PV绑定,而是等需要挂载该PVC的Pod被调度后,再创建底层存储资源及存储卷PV,并与PVC绑定。
mountOptions
用于指定挂载卷时的参数,控制挂载行为(如只读、缓冲策略等)。云硬盘支持设置挂载参数,具体请参见设置云硬盘存储挂载参数。
表2 parameters参数说明 参数
是否必选
描述
csi.storage.k8s.io/csi-driver-name
是
表示驱动类型。使用云硬盘类型时,参数取值固定为“disk.csi.everest.io”。
csi.storage.k8s.io/fstype
是
表示CSI驱动创建存储卷时所使用文件系统类型。使用云硬盘时,支持的参数值为“ext4”。
everest.io/disk-volume-type
是
云硬盘类型,全大写。- SAS:高I/O
- SSD:超高I/O
- GPSSD:通用型SSD
- ESSD:极速型SSD
- GPSSD2:通用型SSD v2,Everest版本为2.4.4及以上支持使用,使用时需同时指定everest.io/disk-iops和everest.io/disk-throughput注解。
everest.io/enterprise-project-id
否
用于指定底层存储资源的企业项目ID,仅限于已开通企业项目的企业客户账号使用。建议设置为集群所属的企业项目或default企业项目,以便资源统一管理。了解更多企业项目相关信息,请查看企业管理。
获取方法:在企业项目管理控制台,单击要对接的企业项目名称,复制企业项目ID值即可。
说明:该功能需要everest插件升级到1.2.33及以上版本。
everest.io/passthrough
是
参数取值固定为“true”,表示云硬盘的设备类型为SCSI类型。不允许设置为其他值。
everest.io/disk-iops
否
表示底层存储资源的IOPS值(每秒输入输出次数),仅通用型SSD v2和极速型SSD v2类型的云硬盘支持设置。
everest.io/disk-throughput
否
表示底层存储资源的吞吐量,仅通用型SSD v2类型的云硬盘支持设置。取值范围为125~1000MiB/s,最高可配置IOPS/4。
吞吐量大于125MiB/s时会收取额外吞吐量费用,详情请参见价格计算器。
- 执行以下命令,创建上述StorageClass。
kubectl apply -f evs-storageclass.yaml
回显结果如下:
storageclass.storage.k8s.io/csi-disk-evs created
- 执行以下命令,可以查看csi-disk-evs的详细信息。
kubectl describe sc csi-disk-evs
回显结果如下:
Name: csi-disk-evs IsDefaultClass: No Annotations: kubectl.kubernetes.io/last-applied-configuration={"allowVolumeExpansion":true,"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"csi-disk-evs"},......
文件存储
- 通过kubectl连接集群。
- 执行以下命令,创建StorageClass的YAML文件,文件名支持自定义。
vim sfs-storageclass.yaml
文件内容如下:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-nas-sfs3 annotations: storageclass.kubernetes.io/is-default-class: "false" # 非必选项,指定集群中默认的StorageClass,一个集群中只能有一个默认的StorageClass provisioner: everest-csi-provisioner parameters: csi.storage.k8s.io/csi-driver-name: nas.csi.everest.io csi.storage.k8s.io/fstype: nfs everest.io/share-access-level: rw everest.io/share-access-to: xxx-xxx-xxx-xxx-xxx everest.io/sfs-version: 'sfs3.0' # 仅使用通用文件系统(原SFS 3.0 容量型)时需要填写,固定值为“sfs3.0”。 reclaimPolicy: Delete allowVolumeExpansion: false volumeBindingMode: Immediate mountOptions: [] # 非必选项,仅部分存储类型支持,如果存储类型不支持,请删除该参数
表3 参数说明 参数
说明
metadata.annotations.storageclass.kubernetes.io/is-default-class
用于指定默认StorageClass,一个集群中建议只设置一个默认的StorageClass。如果存在多个默认StorageClass,CCE不会报错,但行为可能不确定。
- true:表示该StorageClass为默认StorageClass。创建PVC时,如果未显式指定StorageClassName,系统将自动使用默认StorageClass。
- false或不设置该参数:表示该StorageClass为非默认StorageClass。
provisioner
表示存储资源提供商。CCE均由Everest插件提供,此处只能填写everest-csi-provisioner。
parameters
用于定义存储类的具体配置参数,详情请参见表4。
reclaimPolicy
用于指定删除PVC时底层存储的回收策略,详情请参见PV回收策略。该参数未指定时,默认为Delete。
- Delete:存储卷声明PVC删除时,会将关联的底层存储资源删除,并同步移除PV资源,请谨慎使用。
- Retain:存储卷声明PVC删除时,PV和关联的底层存储资源均会保留,其中PV状态被设置为已释放,继续手动删除PV不会删除底层存储资源,若希望该PV还能被PVC绑定,需去除PV上与原PVC绑定的相关信息。
allowVolumeExpansion
表示由该存储类创建的PV是否支持动态扩容,即是否允许通过修改PVC的方式动态扩容其绑定的存储卷,默认为false。
该参数仅为开启动态扩容的开关,动态扩容能否生效取决于底层存储插件的支持情况。若底层存储插件不支持,即使该参数设置为true,仍无法实现扩容。目前仅云硬盘、SFS Turbo(无子目录或子目录有限额)支持动态扩容。
volumeBindingMode
表示卷绑定模式,即动态创建PV的时间,分为立即创建(Immediate)和延迟创建(WaitForFirstConsumer)。文件存储仅支持Immediate模式。
- Immediate:PVC创建后,会立即创建底层存储资源及存储卷PV,并与PVC绑定。
- WaitForFirstConsumer:PVC创建后,不会立即与存储卷PV绑定,而是等需要挂载该PVC的Pod被调度后,再创建底层存储资源及存储卷PV,并与PVC绑定。
mountOptions
用于指定挂载卷时的参数,控制挂载行为(如只读、缓冲策略等)。文件存储支持设置挂载参数,具体请参见设置文件存储挂载参数。
表4 parameters参数说明 参数
是否必选
描述
csi.storage.k8s.io/csi-driver-name
是
表示驱动类型,使用文件存储类型时,参数取值固定为“nas.csi.everest.io”。
csi.storage.k8s.io/fstype
是
用于指定挂载存储卷时使用的文件系统类型。使用文件存储时,支持的参数值为“nfs”。
everest.io/share-access-level
是
参数取值固定为“rw”,表示文件存储可读写。
everest.io/share-access-to
是
表示集群所在VPC ID。
获取方法:进入集群概览页,在“网络信息 > VPC”中,将鼠标悬浮于对应VPC上,复制VPC ID。
everest.io/share-is-public
否
参数取值固定为“false”,表示文件共享为私人可见。
使用通用文件系统(原SFS 3.0 容量型)时无需填写。
everest.io/sfs-version
否
仅使用通用文件系统(原SFS 3.0 容量型)时需要填写,固定值为“sfs3.0”。
- 执行以下命令,创建上述StorageClass。
kubectl apply -f sfs-storageclass.yaml
回显结果如下:
storageclass.storage.k8s.io/csi-nas-sfs3 created
- 执行以下命令,可以查看csi-nas-sfs3的详细信息。
kubectl describe sc csi-nas-sfs3
回显结果如下:
Name: csi-nas-sfs3 IsDefaultClass: No Annotations: kubectl.kubernetes.io/last-applied-configuration={"allowVolumeExpansion":true,"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"false"},...
极速文件存储
- 通过kubectl连接集群。
- 执行以下命令,创建StorageClass的YAML文件,文件名支持自定义。
vim sfsturbo-storageclass.yaml
文件内容如下:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-sfsturbo-test1 annotations: storageclass.kubernetes.io/is-default-class: "false" # 非必选项,指定集群中默认的StorageClass,一个集群中只能有一个默认的StorageClass provisioner: everest-csi-provisioner parameters: csi.storage.k8s.io/csi-driver-name: sfsturbo.csi.everest.io csi.storage.k8s.io/fstype: nfs everest.io/reclaim-policy: retain-volume-only everest.io/share-access-to: xxx-xxx-xxx-xxx-xxx everest.io/share-expand-type: bandwidth everest.io/share-source: sfs-turbo everest.io/share-volume-type: STANDARD reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediate
表5 参数说明 参数
说明
metadata.annotations.storageclass.kubernetes.io/is-default-class
用于指定默认StorageClass,一个集群中建议只设置一个默认的StorageClass。如果存在多个默认StorageClass,CCE不会报错,但行为可能不确定。
- true:表示该StorageClass为默认StorageClass。创建PVC时,如果未显式指定StorageClassName,系统将自动使用默认StorageClass。
- false或不设置该参数:表示该StorageClass为非默认StorageClass。
provisioner
表示存储资源提供商。CCE均由Everest插件提供,此处只能填写everest-csi-provisioner。
parameters
用于定义存储类的具体配置参数,详情请参见表6。
reclaimPolicy
用于指定删除PVC时底层存储的回收策略,详情请参见PV回收策略。该参数未指定时,默认为Delete。
- Delete:存储卷声明PVC删除时,会将关联的底层存储资源删除,并同步移除PV资源,请谨慎使用。
- Retain:存储卷声明PVC删除时,PV和关联的底层存储资源均会保留,其中PV状态被设置为已释放,继续手动删除PV不会删除底层存储资源,若希望该PV还能被PVC绑定,需去除PV上与原PVC绑定的相关信息。
allowVolumeExpansion
表示由该存储类创建的PV是否支持动态扩容,即是否允许通过修改PVC的方式动态扩容其绑定的存储卷,默认为false。
该参数仅为开启动态扩容的开关,动态扩容能否生效取决于底层存储插件的支持情况。若底层存储插件不支持,即使该参数设置为true,仍无法实现扩容。目前仅云硬盘、SFS Turbo(无子目录或子目录有限额)支持动态扩容。
volumeBindingMode
表示卷绑定模式,即动态创建PV的时间,分为立即创建(Immediate)和延迟创建(WaitForFirstConsumer)。极速文件存储仅支持Immediate模式。
- Immediate:PVC创建后,会立即创建底层存储资源及存储卷PV,并与PVC绑定。
- WaitForFirstConsumer:PVC创建后,不会立即与存储卷PV绑定,而是等需要挂载该PVC的Pod被调度后,再创建底层存储资源及存储卷PV,并与PVC绑定。
表6 parameters参数说明 参数
是否必选
描述
csi.storage.k8s.io/csi-driver-name
是
驱动类型,使用极速文件存储类型时,参数取值固定为“sfsturbo.csi.everest.io”。
csi.storage.k8s.io/fstype
是
用于指定挂载存储卷时使用的文件系统类型。使用极速文件存储时,支持的参数值为“nfs”。
everest.io/share-access-to
是
表示集群所在VPC ID。
获取方法:进入集群概览页,在“网络信息 > VPC”中,将鼠标悬浮于对应VPC上,复制VPC ID。
everest.io/share-expand-type
否
表示扩展类型,默认值为“bandwidth”,表示增强型的文件系统。
该字段已弃用,配置不起作用。
everest.io/share-source
是
参数取值固定为“sfs-turbo”。
everest.io/share-volume-type
否
表示极速文件存储类型,默认值为“STANDARD”,表示标准型和标准型增强版。
该字段已弃用,配置不起作用。
everest.io/reclaim-policy
否
删除PVC时是否保留子目录,该参数reclaimPolicy配合使用。仅当PV回收策略为"Delete"时生效,取值如下:
- retain-volume-only:表示删除PVC时,PV会被删除,但PV关联的子目录会被保留。
- delete:表示删除PVC,PV及其关联的子目录均会被删除。
说明:
删除子目录时,仅删除PVC参数中设置的子目录绝对路径,不会级联删除上层目录。
- 执行以下命令,创建上述StorageClass。
kubectl apply -f sfsturbo-storageclass.yaml
回显结果如下:
storageclass.storage.k8s.io/csi-sfsturbo-test1 created
- 执行以下命令,可以查看csi-sfsturbo-test1的详细信息。
kubectl describe sc csi-sfsturbo-test1
回显结果如下:
Name: csi-sfsturbo-test1 IsDefaultClass: No Annotations: kubectl.kubernetes.io/last-applied-configuration={"allowVolumeExpansion":false,"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"false"},...
对象存储
- 通过kubectl连接集群。
- 执行以下命令,创建StorageClass的YAML文件,文件名支持自定义。
vim obs-storageclass.yaml
文件内容如下:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-obs-test1 annotations: storageclass.kubernetes.io/is-default-class: "false" # 非必选项,指定集群中默认的StorageClass,一个集群中只能有一个默认的StorageClass provisioner: everest-csi-provisioner parameters: csi.storage.k8s.io/csi-driver-name: obs.csi.everest.io csi.storage.k8s.io/fstype: s3fs everest.io/obs-volume-type: STANDARD everest.io/enterprise-project-id: xxx-xxx-xxx-xxx-xxx # 指定企业项目id,仅限于已开通企业项目的账号使用 reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: [] # 非必选项,仅部分存储类型支持,如果存储类型不支持,请删除该参数
表7 参数说明 参数
说明
metadata.annotations.storageclass.kubernetes.io/is-default-class
用于指定默认StorageClass,一个集群中建议只设置一个默认的StorageClass。如果存在多个默认StorageClass,CCE不会报错,但行为可能不确定。
- true:表示该StorageClass为默认StorageClass。创建PVC时,如果未显式指定StorageClassName,系统将自动使用默认StorageClass。
- false或不设置该参数:表示该StorageClass为非默认StorageClass。
provisioner
表示存储资源提供商。CCE均由Everest插件提供,此处只能填写everest-csi-provisioner。
parameters
用于定义存储类的具体配置参数,详情请参见表8。
reclaimPolicy
用于指定删除PVC时底层存储的回收策略,详情请参见PV回收策略。该参数未指定时,默认为Delete。
- Delete:存储卷声明PVC删除时,会将关联的底层存储资源删除,并同步移除PV资源,请谨慎使用。
- Retain:存储卷声明PVC删除时,PV和关联的底层存储资源均会保留,其中PV状态被设置为已释放,继续手动删除PV不会删除底层存储资源,若希望该PV还能被PVC绑定,需去除PV上与原PVC绑定的相关信息。
volumeBindingMode
表示卷绑定模式,即动态创建PV的时间,分为立即创建(Immediate)和延迟创建(WaitForFirstConsumer)。对象存储仅支持Immediate模式。
- Immediate:PVC创建后,会立即创建底层存储资源及存储卷PV,并与PVC绑定。
- WaitForFirstConsumer:PVC创建后,不会立即与存储卷PV绑定,而是等需要挂载该PVC的Pod被调度后,再创建底层存储资源及存储卷PV,并与PVC绑定。
mountOptions
用于指定挂载卷时的参数,控制挂载行为(如只读、缓冲策略等)。对象存储支持设置挂载参数,具体请参见设置对象存储挂载参数。
表8 parameters参数说明 参数
是否必选
描述
csi.storage.k8s.io/csi-driver-name
是
表示驱动类型,使用对象存储类型时,参数取值固定为“obs.csi.everest.io”。
csi.storage.k8s.io/fstype
是
表示实例类型,支持的参数值为“s3fs”和“obsfs”。
- obsfs:表示并行文件系统。
- s3fs:表示对象桶。
everest.io/obs-volume-type
是
表示对象存储类型。
- fsType设置为s3fs时,支持STANDARD(标准桶)、WARM(低频访问桶)。
- fsType设置为obsfs时,该字段不起作用。
everest.io/enterprise-project-id
否
用于指定底层存储资源的企业项目ID,仅限于已开通企业项目的企业客户账号使用。建议设置为集群所属的企业项目或default企业项目,以便资源统一管理。了解更多企业项目相关信息,请查看企业管理。
获取方法:在企业项目管理控制台,单击要对接的企业项目名称,复制企业项目ID值即可。
说明:该功能需要everest插件升级到1.2.33及以上版本。
- 执行以下命令,创建上述StorageClass。
kubectl apply -f obs-storageclass.yaml
回显结果如下:
storageclass.storage.k8s.io/csi-obs-test1 created
- 执行以下命令,可以查看csi-obs-test1的详细信息。
kubectl describe sc csi-obs-test1
回显结果如下:
Name: csi-obs-test1 IsDefaultClass: No Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"false"},......
专属存储
- 通过kubectl连接集群。
- 执行以下命令,创建StorageClass的YAML文件,文件名支持自定义。
vim dss-storageclass.yaml
文件内容如下:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-disk-dsstest annotations: storageclass.kubernetes.io/is-default-class: "false" # 非必选项,指定集群中默认的StorageClass,一个集群中只能有一个默认的StorageClass provisioner: everest-csi-provisioner parameters: csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io csi.storage.k8s.io/fstype: ext4 everest.io/disk-volume-type: SSD everest.io/passthrough: 'true' everest.io/resource-type: dss everest.io/enterprise-project-id: xxx-xxx-xxx-xxx-xxx # 指定企业项目id,仅限于已开通企业项目的账号使用 reclaimPolicy: Delete allowVolumeExpansion: false volumeBindingMode: Immediate
表9 参数说明 参数
说明
metadata.annotations.storageclass.kubernetes.io/is-default-class
用于指定默认StorageClass,一个集群中建议只设置一个默认的StorageClass。如果存在多个默认StorageClass,CCE不会报错,但行为可能不确定。
- true:表示该StorageClass为默认StorageClass。创建PVC时,如果未显式指定StorageClassName,系统将自动使用默认StorageClass。
- false或不设置该参数:表示该StorageClass为非默认StorageClass。
provisioner
表示存储资源提供商。CCE均由Everest插件提供,此处只能填写everest-csi-provisioner。
parameters
用于定义存储类的具体配置参数,详情请参见表10。
reclaimPolicy
用于指定删除PVC时底层存储的回收策略,详情请参见PV回收策略。该参数未指定时,默认为Delete。
- Delete:存储卷声明PVC删除时,会将关联的底层存储资源删除,并同步移除PV资源,请谨慎使用。
- Retain:存储卷声明PVC删除时,PV和关联的底层存储资源均会保留,其中PV状态被设置为已释放,继续手动删除PV不会删除底层存储资源,若希望该PV还能被PVC绑定,需去除PV上与原PVC绑定的相关信息。
allowVolumeExpansion
表示由该存储类创建的PV是否支持动态扩容,即是否允许通过修改PVC的方式动态扩容其绑定的存储卷,默认为false。
该参数仅为开启动态扩容的开关,动态扩容能否生效取决于底层存储插件的支持情况。若底层存储插件不支持,即使该参数设置为true,仍无法实现扩容。目前仅云硬盘、SFS Turbo(无子目录或子目录有限额)支持动态扩容。
volumeBindingMode
表示卷绑定模式,即动态创建PV的时间,分为立即创建(Immediate)和延迟创建(WaitForFirstConsumer)。
- Immediate:PVC创建后,会立即创建底层存储资源及存储卷PV,并与PVC绑定。
- WaitForFirstConsumer:PVC创建后,不会立即与存储卷PV绑定,而是等需要挂载该PVC的Pod被调度后,再创建底层存储资源及存储卷PV,并与PVC绑定。
表10 parameters参数说明 参数
是否必选
描述
csi.storage.k8s.io/csi-driver-name
是
表示驱动类型,使用专属存储类型时,参数取值固定为“disk.csi.everest.io”。
csi.storage.k8s.io/fstype
是
用于设置文件系统类型,仅支持设置为ext4。
everest.io/disk-volume-type
是
表示专属存储类型,全大写。- SAS:高I/O
- SSD:超高I/O
everest.io/passthrough
是
参数取值固定为“true”,表示专属存储的设备类型为SCSI类型,不允许设置为其他值。
everest.io/resource-type
是
表示资源类型,专属存储固定为“dss”。
everest.io/enterprise-project-id
否
用于指定底层存储资源的企业项目ID,仅限于已开通企业项目的企业客户账号使用。建议设置为集群所属的企业项目或default企业项目,以便资源统一管理。了解更多企业项目相关信息,请查看企业管理。
获取方法:在企业项目管理控制台,单击要对接的企业项目名称,复制企业项目ID值即可。
说明:该功能需要everest插件升级到1.2.33及以上版本。
- 执行以下命令,创建上述StorageClass。
kubectl apply -f dss-storageclass.yaml
回显结果如下:
storageclass.storage.k8s.io/csi-disk-dsstest created
- 执行以下命令,可以查看csi-disk-dsstest的详细信息。
kubectl describe sc csi-disk-dsstest
回显结果如下:
Name: csi-disk-dsstest IsDefaultClass: No Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"false"},...
本地持久卷
- 通过kubectl连接集群。
- 执行以下命令,创建StorageClass的YAML文件,文件名支持自定义。
vim local-storageclass.yaml
文件内容如下:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-local-test annotations: storageclass.kubernetes.io/is-default-class: "false" # 非必选项,指定集群中默认的StorageClass,一个集群中只能有一个默认的StorageClass provisioner: everest-csi-provisioner parameters: csi.storage.k8s.io/csi-driver-name: local.csi.everest.io csi.storage.k8s.io/fstype: ext4 volume-type: persistent reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer
表11 参数说明 参数
说明
metadata.annotations.storageclass.kubernetes.io/is-default-class
用于指定默认StorageClass,一个集群中建议只设置一个默认的StorageClass。如果存在多个默认StorageClass,CCE不会报错,但行为可能不确定。
- true:表示该StorageClass为默认StorageClass。创建PVC时,如果未显式指定StorageClassName,系统将自动使用默认StorageClass。
- false或不设置该参数:表示该StorageClass为非默认StorageClass。
provisioner
表示存储资源提供商。CCE均由Everest插件提供,此处只能填写everest-csi-provisioner。
parameters
用于定义存储类的具体配置参数,详情请参见表12。
reclaimPolicy
用于指定删除PVC时底层存储的回收策略,详情请参见PV回收策略。该参数未指定时,默认为Delete。
- Delete:存储卷声明PVC删除时,会将关联的底层存储资源删除,并同步移除PV资源,请谨慎使用。
- Retain:存储卷声明PVC删除时,PV和关联的底层存储资源均会保留,其中PV状态被设置为已释放,继续手动删除PV不会删除底层存储资源,若希望该PV还能被PVC绑定,需去除PV上与原PVC绑定的相关信息。
volumeBindingMode
表示卷绑定模式,即动态创建PV的时间,分为立即创建(Immediate)和延迟创建(WaitForFirstConsumer)。本地持久卷仅支持WaitForFirstConsumer模式。
- Immediate:PVC创建后,会立即创建底层存储资源及存储卷PV,并与PVC绑定。
- WaitForFirstConsumer:PVC创建后,不会立即与存储卷PV绑定,而是等需要挂载该PVC的Pod被调度后,再创建底层存储资源及存储卷PV,并与PVC绑定。
- 执行以下命令,创建上述StorageClass。
kubectl apply -f dss-storageclass.yaml
回显结果如下:
storageclass.storage.k8s.io/csi-local-test created
- 执行以下命令,可以查看csi-local-test的详细信息。
kubectl describe sc csi-local-test
回显结果如下:
Name: csi-local-test IsDefaultClass: No Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"false"},...
自定义存储类应用场景
以下列举了自定义StorageClass的常见应用场景,供您参考:
- 满足个性化需求,简化批量操作:通过自定义回收策略(reclaimPolicy)、卷绑定模式(volumeBindingMode)等参数,您可以灵活应对不同业务场景,避免在批量创建PVC时重复配置相关参数,从而简化操作流程、提升管理效率。
- 支持平滑迁移,降低修改成本:当用户从自建Kubernetes或其他云厂商的Kubernetes服务迁移至CCE时,可在CCE中创建一个名称与原环境一致的StorageClass。这样,应用YAML文件或Helm Chart中的storageClassName无需修改,有效避免手动变更大量配置带来的操作负担与出错风险。例如,若迁移前使用的存储类名称为disk-standard,则可复制CCE中的csi-disk存储类 YAML,将其名称改为disk-standard后重新创建,实现无缝衔接。
- 设置默认存储类:在创建StorageClass时,可以通过metadata.annotations.storageclass.kubernetes.io/is-default-class字段将其设置为默认存储类。设置后,用户在创建PVC时无需显式指定storageClassName,系统将自动选用该默认存储类,简化资源声明过程。
- 绑定企业项目,实现资源统一管理:在创建StorageClass时,可以通过parameters.everest.io/enterprise-project-id字段指定企业项目,实现底层存储资源与企业项目的绑定,便于后续的资源分类管理和成本核算。
相关文档
在使用新的StorageClass时,用户只需在PVC的“storageClassName”字段中指定对应的StorageClass。StorageClass中定义的参数将作为默认配置,若PVC中指定了与之冲突的参数,则以PVC中的设置为准。
您可以参考以下文档使用StorageClass,以简化手动创建和维护PV的流程:
- 云硬盘:通过动态存储卷使用云硬盘
- 文件存储:
- 极速文件存储:通过动态存储卷创建SFS Turbo子目录(推荐)
- 对象存储:通过动态存储卷使用对象存储
- 专属存储:通过动态存储卷使用专属存储
- 本地持久卷:通过动态存储卷使用本地持久卷