每个 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,不一定有参数。
本地
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
本地卷还不支持动态制备,然而还是需要创建 StorageClass 以延迟卷绑定, 直到完成 Pod 的调度。这是由 WaitForFirstConsumer
卷绑定模式指定的。
延迟卷绑定使得调度器在为 PersistentVolumeClaim 选择一个合适的 PersistentVolume 时能考虑到所有 Pod 的调度限制。
执行
kubectl apply -f local-storageclass.yaml
storageclass.storage.k8s.io/local-storage created
设置默认的StorageClass
a. 修改kube-apiserver参数
要在系统中设置一个默认的StorageClass,则首先需要启用名为
DefaultStorageClass的admission controller,即在kube-apiserver的命令行
参数–admission-control中增加:
--admission-control=...,DefaultStorageClass
• 1
b. 标记默认 StorageClass 非默认
$ kubectl get storageclass
NAME PROVISIONER AGE
standard (default) kubernetes.io/gce-pd 1d
gold kubernetes.io/gce-pd 1d
kubectl patch storageclass standard -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
c. 标记一个 StorageClass 为默认
在StorageClass的定义中设置一个annotation
:
或者
kubectl patch storageclass <your-class-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
kubectl get storageclass
输出类似这样:
NAME PROVISIONER AGE
standard kubernetes.io/gce-pd 1d
gold (default) kubernetes.io/gce-pd 1d
参考
https://kubernetes.io/docs/concepts/storage/storage-classes/
https://www.cnblogs.com/zhangb8042/p/14252294.html