介绍
在Kubernetes中,StorageClass 是一种 API 对象,它定义了一种存储卷的动态供应方式。
StorageClass 允许管理员描述不同类型的存储系统或细节,例如不同类型的本地存储、不同类型的云存储等。
当用户需要持久化存储时,他们可以请求特定类型的 StorageClass,Kubernetes 将根据这个描述自动创建相应的 Persistent Volume (PV)。
StorageClass 的主要特点
-
动态供应:StorageClass 可以配置为支持动态存储卷供应,这意味着当用户创建 Persistent Volume Claim (PVC) 时,Kubernetes 会自动创建相应的 PV。
-
存储系统描述:StorageClass 描述了一种存储系统或存储卷的特定属性,如访问模式(例如 ReadWriteOnce, ReadOnlyMany, ReadWriteMany)、卷的生命周期策略、卷的类型(例如 SSD, HDD)等。
-
卷绑定模式:StorageClass 可以指定卷绑定模式,即 Immediate 或 Delayed。Immediate 模式下,Kubernetes 在创建 PVC 时会立即尝试供应 PV;Delayed 模式下,只有在 PVC 被引用时才会创建 PV。
-
参数:StorageClass 允许管理员定义一组参数,这些参数可以传递给动态供应器,用于配置存储卷的特定特性,如 IOPS、性能等级、加密选项等。
-
选择器:StorageClass 可以包含选择器,这些选择器可以用于匹配特定的 PVC,使得只有符合特定条件的 PVC 才会使用这个 StorageClass。
-
默认存储类:可以设置一个 StorageClass 作为默认的存储类,如果没有指定特定的 StorageClass,PVC 将使用默认的 StorageClass 来供应存储。
创建使用
1、准备LUN
确保集中式存储上的LUN已经被创建,并且已经准备好被Kubernetes使用。
2、配置存储插件:
根据你的集中式存储系统,选择一个合适的Kubernetes存储插件。常见的插件包括但不限于NetApp Trident、EMC Unity/VNX2、HPE 3PAR、Dell EMC PowerFlex等。
根据插件的文档,配置并部署存储插件到Kubernetes集群中。
3、创建StorageClass
创建一个StorageClass对象,它引用了你的StorageClass并定义了如何动态创建PV。StorageClass会指定如何将LUN映射到PV上。
例如,对于NetApp Trident,你可能需要创建一个StorageClass YAML文件,如下所示:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: netapp-trident
provisioner: netapp.io/trident
parameters:
backendType: "san"
provisioningType: "file"
storageAccessCapability: "readwritemany"
这个StorageClass告诉Kubernetes如何使用Trident插件来创建PV。
4、创建Persistent Volume Claim (PVC):、
创建一个PVC对象,请求StorageClass来提供所需的存储资源。
PVC会引用StorageClass,并定义存储的大小和访问模式等要求。
例如:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-lun-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: netapp-trident
resources:
requests:
storage: 10Gi
5、动态供应
当PVC被创建后,StorageClass会触发动态供应过程,StorageClass会与集中式存储通信,将LUN映射到PV上。
这个过程是自动化的,由存储插件管理。
6、使用PV
PVC绑定到PV后,你可以在Pod定义中引用PVC,这样Pod就可以使用这块存储了。
7、验证
确保PV已经成功创建并且被PVC绑定。你可以使用kubectl get pv,pvc来查看状态。
验证Pod是否能够成功挂载并使用存储。