k8s–基础–22.1–storageclass–介绍
1、概念
- storageclass是一个存储类
- 通过创建storageclass可以动态生成一个存储卷供k8s用户使用。
1.1、简单示例
vi /root/test3/ storageclass-standard.yaml
内容
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storageclass-standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
mountOptions:
- debug
volumeBindingMode: Immediate
2、资源定义
- 每个StorageClass都包含以下字段
- provisioner
- parameters
- reclaimPolicy
- 当需要动态配置属于该类的PersistentVolume时使用上面的字段。
- StorageClass对象的名称很重要,是用户可以请求特定类的方式。
- 管理员在首次创建StorageClass对象时设置类的名称和其他参数,并且在创建对象后无法更新这些对象。
- 管理员可以为不请求任何特定类绑定的PVC指定默认的StorageClass
2.1、Provisioner(供应者)
- 用来确定我们使用什么样的存储来创建pv
- provisioner既可以是内部供应程序,也可以由外部供应商提供
2.1.1、外部供应商提供的provisioner
- 资料地址:https://github.com/kubernetes-incubator/external-storage/
- 举例:外部供应商提供的NFS provisioner
- https://github.com/kubernetes-incubator/external-storage/tree/master/nfs/deploy/kubernetes
2.1.2、常见的provisioner供应者如下
2.2、Reclaim Policy(回收策略)
- 由存储类动态创建持久化存储卷(pv)时可以指定reclaimPolicy字段
- reclaimPolicy字段值
- Delete(默认)
- Retain
2.3、Mount Options(挂载选项)
如果Volume Plugin不支持这个挂载选项,但是指定了,就会使provisioner创建失败
2.4、Volume Binding Mode(卷绑定模式)
- 这个字段用来说明什么时候进行卷绑定和动态配置
- 值:
- 立即模式
- WaitForFirstConsumer模式
- 默认:立即模式
2.4.1、Immediate(立即)模式
- 一旦创建了PersistentVolumeClaim,就会发生卷绑定和动态配置。
- 对于受拓扑约束且无法从群集中的所有节点全局访问的存储后端,将在不知道Pod的调度要求的情况下绑定或配置PersistentVolumes。这可能导致不可调度的Pod。集群管理员可以通过指定WaitForFirstConsumer模式来解决此问题
2.4.2、WaitForFirstConsumer模式
- 该模式将延迟绑定和配置PersistentVolume,直到创建使用PersistentVolumeClaim的Pod。
- 将根据Pod的调度约束指定的拓扑选择或配置PersistentVolumes。这些包括但不限于资源需求,节点选择器,pod亲和力和反亲和力,以及污点和容忍度。
3、允许卷扩展
- PersistentVolume 可以配置为可扩展。
- 将此功能设置为 true 时,允许用户通过编辑相应的 PVC对象 来调整卷大小。
3.1、 当基础存储类的allowVolumeExpansion字段设置为true时,以下类型的卷支持卷扩展。
注意
此功能仅可用于扩容卷,不能用于缩小卷。
4、允许卷拓扑结构
当集群操作人员使用了 WaitForFirstConsumer 的卷绑定模式,在大部分情况下就没有必要将配置限制为特定的拓扑结构。 然而,如果还有需要的话,可以使用 allowedTopologies。
4.1、案例:如何将分配卷的拓扑限制在特定的区域
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: failure-domain.beta.kubernetes.io/zone
values:
- us-central1-a
- us-central1-b
5、参数(parameters)
- 描述属于该存储类的卷的参数。
- 参数取决于provisioner
- 当参数被省略时,会使用默认值。
- 一个 StorageClass 最多可以定义 512 个参数。这些参数对象的总长度不能超过 256 KiB, 包括参数的键和值。