StorageClass 为 Kubernetes 存储资源管理提供了标准化、自动化和多样化的能力,是实现弹性、分层和高效存储架构的基础。
StorageClass 为管理员提供了描述和管理存储资源的标准化方法。本文将详细介绍 StorageClass 的概念、配置和使用方式。在阅读本文之前,建议先熟悉 卷 和 持久卷 的相关概念。
StorageClass 为管理员提供了描述存储“类”的方法。不同的类可以对应不同的服务质量等级、备份策略、访问模式或地理位置等。Kubernetes 不预设这些类的具体含义,需由集群管理员根据实际需求定义。该机制在其他存储系统中通常被称为“存储配置文件”或“存储策略”。
StorageClass 是集群级别的资源对象,包含多个核心字段。以下为典型配置示例:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
annotations:
storageclass.kubernetes.io/is-default-class: "false"
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
replication-type: regional-pd
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
- debug
- noatime
volumeBindingMode: WaitForFirstConsumer
Delete 或 Retain存储分配器(Provisioner)决定了如何创建和管理持久卷。Kubernetes 支持内置分配器、CSI 分配器和外部分配器。
下表总结了主流云平台的内置分配器类型。
| 存储类型 | 分配器名称 | 云平台 |
|---|---|---|
| AWS EBS | ebs.csi.aws.com | Amazon Web Services |
| GCE PD | pd.csi.storage.gke.io | Google Cloud Platform |
| Azure Disk | disk.csi.azure.com | Microsoft Azure |
| Azure File | file.csi.azure.com | Microsoft Azure |
| vSphere | csi.vsphere.vmware.com | VMware vSphere |
现代 Kubernetes 推荐使用 CSI(Container Storage Interface)分配器,支持更丰富的功能和生态。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: csi-example
provisioner: example.csi.driver.io
parameters:
csi.storage.k8s.io/provisioner-secret-name: "csi-secret"
csi.storage.k8s.io/provisioner-secret-namespace: "default"
type: "fast"
volumeBindingMode: WaitForFirstConsumer
对于不支持内置分配器的存储系统,可使用外部分配器:
nfs-client-provisionerdriver.longhorn.ioopenebs.io/provisioner-iscsiStorageClass 支持多种参数配置,提升存储管理灵活性。
reclaimPolicy: Retain # 数据安全优先
volumeBindingMode: WaitForFirstConsumer
允许在线扩展持久卷大小:
allowVolumeExpansion: true
指定卷挂载时的选项:
mountOptions:
- noatime
- nodiratime
- rsize=1048576
- wsize=1048576
集群可设置一个默认 StorageClass,供未指定 storageClassName 的 PVC 使用:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
以下为 StorageClass 和 PVC 的典型使用方法。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-storage
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-ssd
disk-encryption-key: "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: fast-storage
ssd-retain、hdd-delete常见问题及解决方法:
StorageClass 为 Kubernetes 存储资源管理提供了标准化、自动化和多样化的能力。通过合理配置分配器、参数和策略,可以实现弹性、高效和安全的存储架构,满足不同业务场景的需求。建议结合实际环境,充分测试和监控存储配置,持续优化集群存储管理。