您现在的位置是:首页 >技术杂谈 >storageclass详解网站首页技术杂谈

storageclass详解

魏志标 2024-07-20 12:01:04
简介storageclass详解

storageclass概念

StorageClass作为对存储资源的抽象定义,对用户设置的PVC申请屏蔽后端存储的细节,一方面减少了用户对于存储资源细节的关注,另一方面减轻了管理员手工管理PV的工作,由系统自动完成PV的创建和绑定,实现动态的资源供应。基于StorageClass的动态资源供应模式将逐步成为云平台的标准存储管理模式。

storageclass定义

StorageClass 资源对象的定义主要包括:名称后端存储的提供者 (provisioner)后端存储的相关参数配置和回收策略StorageClass的名称尤为重要,将在创建 PVC时引用,管理员应该准确命名具有不同存储特性的 StorageClass)。

注意:StorageClass 一旦被创建,则无法修改,如需更改,则只能删除原 StorageClass资源对象并重新创建

如下为storageclass举例

apiVersion: storage.k8s.io/v1                               
kind: StorageClass                                          
metadata:                                                   
  name: nfs                                                 
annotations:                                                
    storageclass.beta.kubernetes.io/is-default-class="true"    ###设置为默认的存储类型                                                                       
provisioner: fuseim.pri/ifs    ####上述定义的provisioner 名称
parameters:                                                 
    type: nfs                                               
reclaimPolicy: Retain  ###删除;类型                  
allowVolumeExpansion: true     ####允许扩容                             
mountOptions:                                               
    - debug                                                 
volumeBindingMode: Immediate     ##pv和pvc绑定

参数解释如下:

  • 存储提供者 (Provisioner)
    描述存储资源的提供者,用于提供具体的PV资源,也可以将其看作后端存储驱动。
目前,Kubernetes内置支持的Provisioner包括:AWSElasticBlockStore、 AzureDisk 、 AzureFile、 Cinder ( OpenStack Block Storage ) Flocker GCEPersistentDisk、 GlusterFS、 Portworx Volume、 Quobyte Volumes、 RBD (Ceph Block Device)、 ScaleIO、 StorageOS、 VsphereVolume。

Kubernetes内置支持的Provisioner的命名都以“kubernetes.io/“开头,用户也可以使用自定义的后端存储提供者。以上例子中provisioner 名称为自定义fuseim.pri/ifs

  • 资源回收策略 (Reclaim Policy)
    通过动态资源供应模式创建的PV将继承在StorageClass资源对象上设置的回收策略,配置字段名称为“reclaimPolicy“,可以设置的选项包括Delete(删除)和 Retain(保留)。
    如果StorageClass没有指定reclaimPolicy,则默认值为Delete。
    对于管理员手工创建的仍被StorageClass管理的PV,将使用创建PV时设置的资源回收策略。

  • 是否允许存储扩容 (Allow Volume Expansion)

allowVolumeExpansion: true
PV 可以被配置为允许扩容,当 StorageClass 资源对象的 allowVolumeExpansion字段被设置为true时,将允许用户通过编辑PVC的存储空间自动完成PV的扩容。
  • 挂载选项 (Mount Options)
通过StorageClass资源对象的mountOptions字段,系统将为动态创建的PV设置挂载选项。
并不是所有PV类型都支持挂载选项,如果PV不支持但StorageClass 设置了该字段,则PV将会创建失败。另外,系统不会对挂载选项进行验证,如果设置了错误的选项,则容器在挂载存储时将直接失败。
  • 存储绑定模式 (Volume Binding Mode)
StorageClass资源对象的volumeBindingMode字段设置用于控制何时将PVC与动态创建的PV绑定。
目前支持的绑定模式包括: Immediate 和 WaitForFirstConsumer。

Immediate:
存储绑定模式的默认值为 Immediate,表示当一个PersistentVolumeClaim (PVC)创建出来时,就动态创建PV并进行PVCPV的绑定操作
WaitForFirstConsumer:
WaitForFirstConsumer绑定模式表示PVC与PV的绑定操作延迟到第一个使用 PVC的Pod创建出来时再进行。

系统将根据Pod的调度需求,在Pod所在的Node上创建PV,这些调度需求可以通过以下条件(不限于)进行设置:

  • Pod对资源的需求;
  • Node Selector;
  • Pod亲和性和反亲和性设置;
  • Taint和Toleration设置。

目前支持 WaitForFirstConsumer 绑定模式的存储卷包括:AWSElasticBlockStore、 AzureDisk、 GCEPersistentDisk.

另外,有些存储插件通过预先创建好的PV绑定支持WaitForFirstConsumer模式,比如AWSElasticBlockStore、 AzureDisk、 GCEPersistentDisk和Local.

在使用WaitForFirstConsumer模式的环境中,如果仍然希望基于特定拓扑信息(Topology)进行PV绑定操作,则在StorageClass的定义中还可以通过 allowedTopologies字段进行设置。

下面的例子通过matchLabelExpressions设置目标Node的标签选择条件 (zone=us-central1-a us-central1-b) PV将在满足这些条件的Node上允许创建:

allowedTopologies:
- matchLabelExpressions:
 - key: failure-domain.beta.kubernetes.io/zone 
   vallues:
   - us-central1-a
   - us-central1-b
  • 存储参数 (Parameters)
    下面举常见存储提供商(Provisioner)提供的StorageClass存储参数示例(以AWSElasticBlockStore存储卷为例子):
kind: StorageClass
apiVersion: storage.k8s.io/v1 
metadata:
    name: slow
provisioner: kubernetes.io/aws-ebs 
parameters:
    type: io1
    iopsPerGB: "10"
    fsType: ext4

可以配置的参数如下(详细说明请参考AWSElasticBlockStore文档):

  • type:可选项为io1、gp2、 sc1、 st1,默认值为gp2;
  • iopsPerGB:仅用于io1类型的Volume,意为每秒每GiB的I/O操作数量;
  • fsType:文件系统类型,默认值为ext4;
  • encrypted:是否加密;
  • kmsKeyld:加密时使用的Amazon Resource Name;
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。