每个 StorageClass 都包含 provisioner、parameters 和 reclaimPolicy 字段, 这些字段会在 StorageClass 需要动态分配 PersistentVolume 时会使用到
StorageClass作为对存储资源的抽象定义,对用户设置的PVC申请屏蔽后端存储的细节,一方面减少了用户对于存储资源细节的关注,另一方面减轻了管理员手工管理PV的工作,由系统自动完成PV的创建和绑定,实现了动态的资源供应。基于StorageClass的动态资源供应模式将逐步成为云平台的标准存储配置模式。StorageClass的定义主要包括名称后端存储的提供者(provisioner)后端存储的相关参数配置StorageClass一旦被创建出来,则将无法修改。如需更改,则只能删除原StorageClass的定义重建。下例定义了一个名为standard的StorageClass,提供者为aws-ebs,其

配置参数

名称(name)

metadata.name主要描述了StorageClass的名称,主要为持久卷声明PVC应用,在PVC的yaml文件中通过spec.storageClassName对其进行引用。

提供者(Provisioner)

描述存储资源的提供者,也可以看作后端存储驱动。目前Kubernetes支持的Provisioner都以“kubernetes.io/”为开头,用户也可以使用自定义的后端存储提供者。为了符合StorageClass的用法,自定义Provisioner需要符合存储卷的开发规范。

参数(Parameters)

后端存储资源提供者的参数设置,可有可无,这是后端存储资源提供者的一些参数设置,如果是自定义的provisioner,不一定有参数。

本地

  1. kind: StorageClass
  2. apiVersion: storage.k8s.io/v1
  3. metadata:
  4. name: local-storage
  5. provisioner: kubernetes.io/no-provisioner
  6. volumeBindingMode: WaitForFirstConsumer

本地卷还不支持动态制备,然而还是需要创建 StorageClass 以延迟卷绑定, 直到完成 Pod 的调度。这是由 WaitForFirstConsumer 卷绑定模式指定的。
延迟卷绑定使得调度器在为 PersistentVolumeClaim 选择一个合适的 PersistentVolume 时能考虑到所有 Pod 的调度限制。
执行

  1. kubectl apply -f local-storageclass.yaml
  2. storageclass.storage.k8s.io/local-storage created

设置默认的StorageClass

a. 修改kube-apiserver参数

要在系统中设置一个默认的StorageClass,则首先需要启用名为
DefaultStorageClass的admission controller,即在kube-apiserver的命令行
参数–admission-control中增加:

  1. --admission-control=...,DefaultStorageClass
  2. 1

b. 标记默认 StorageClass 非默认

  1. $ kubectl get storageclass
  2. NAME PROVISIONER AGE
  3. standard (default) kubernetes.io/gce-pd 1d
  4. gold kubernetes.io/gce-pd 1d
  1. kubectl patch storageclass standard -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'

c. 标记一个 StorageClass 为默认

在StorageClass的定义中设置一个annotation
Kubernetes——StorageClass - 图1
或者

  1. kubectl patch storageclass <your-class-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
  1. kubectl get storageclass
  2. 输出类似这样:
  3. NAME PROVISIONER AGE
  4. standard kubernetes.io/gce-pd 1d
  5. gold (default) kubernetes.io/gce-pd 1d

参考

https://kubernetes.io/docs/concepts/storage/storage-classes/
https://www.cnblogs.com/zhangb8042/p/14252294.html