Skip to content

Storage Classes

  • https://kuboard.cn/learning/k8s-intermediate/persistent/storage-class.html#%E5%AD%98%E5%82%A8%E7%B1%BB%E6%A6%82%E8%BF%B0
  • https://kubernetes.io/zh/docs/concepts/storage/storage-classes/

1. 概述

StorageClass 存储类用于描述集群中可以提供的存储的类型。不同的存储类可能对应着不同的:

  • 服务等级(quality-of-service level)
  • 备份策略
  • 集群管理员自定义的策略

Kubernetes 本身并不清楚各种类代表什么,由集群管理员自行约定。

2. StorageClass 资源

每个 StorageClass 都包含 provisionerparametersreclaimPolicy 字段, 这些字段会在 StorageClass 需要动态分配 PersistentVolume 时会使用到。

StorageClass 对象的命名很重要,用户使用这个命名来请求生成一个特定的类。 当创建 StorageClass 对象时,管理员设置 StorageClass 对象的命名和其他参数,一旦创建了对象就不能再对其更新

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
  - debug
volumeBindingMode: Immediate

2.1 存储分配器

每个 StorageClass 都有一个分配器(provisioner),用来决定使用哪个卷插件分配 PV。该字段必须指定。

2.2 回收策略

由 StorageClass 动态创建的 PersistentVolume 会在类的 reclaimPolicy 字段中指定回收策略,可以是 Delete 或者 Retain。如果 StorageClass 对象被创建时没有指定 reclaimPolicy,它将默认为 Delete

通过 StorageClass 手动创建并管理的 PersistentVolume 会使用它们被创建时指定的回收政策。

2.3 允许卷扩展

PersistentVolume 可以配置为可扩展。将此功能设置为 true 时,允许用户通过编辑相应的 PVC 对象来调整卷大小。

当基础存储类的 allowVolumeExpansion 字段设置为 true 时,以下类型的卷支持卷扩展。

卷类型 Kubernetes 版本要求
gcePersistentDisk 1.11
awsElasticBlockStore 1.11
Cinder 1.11
glusterfs 1.11
rbd 1.11
Azure File 1.11
Azure Disk 1.11
Portworx 1.11
FlexVolume 1.13
CSI 1.14 (alpha), 1.16 (beta)

Important

此功能仅可用于扩容卷,不能用于缩小卷。

2.4 卷绑定模式

volumeBindingMode 字段控制了 应该发生在什么时候。

  • 即刻绑定 Immediate

    存储卷声明创建后,立刻动态创建存储卷并将其绑定到存储卷声明。默认值。

  • 首次使用时绑定 WaitForFirstConsumer

    直到存储卷声明第一次被容器组使用时,才创建存储卷,并将其绑定到存储卷声明。