前言

StorageClass 相当于一个创立 PV 的模板,用户通过 PVC 申请存储卷,StorageClass 通过模板主动创立 PV,而后和 PVC 进行绑定。

更新历史

  • 20200712 - 初稿 - 左程立
  • 原文地址 - https://blog.zuolinux.com/2020/07/12/storageclass.html

启用动静卷供给

创立 StorageClass 对象即可,即创立了模板。

apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:  name: slowprovisioner: kubernetes.io/gce-pdparameters:  type: pd-standard---  apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:  name: fastprovisioner: kubernetes.io/gce-pdparameters:  type: pd-ssd

以上文件创建了两种不同类型的 StorageClass,用户依据本人需要通过 PVC 申请即可。

应用动静卷供给

用户通过 PVC 来申请。

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: claim1spec:  accessModes:    - ReadWriteOnce  storageClassName: fast  resources:    requests:      storage: 30Gi

以上文件阐明该 PVC 向 storageClassName 为 fast 的存储类申请卷,将会失去一个 PV 来与该 PVC 进行绑定。

实际

《K8S实战(六)| 配置NFS动静卷提供长久化存储》 https://blog.zuolinux.com/2020/06/10/nfs-client-provisioner.html

回收策略

由 StorageClass 动态创建的 PersistentVolume 会在类的 reclaimPolicy 字段中指定回收策略,能够是 Delete 或者 Retain。

如果 StorageClass 对象被创立时没有指定 reclaimPolicy,它将默认为 Delete。意味着 PV 被删除后,原始数据也会被删除。

倡议设置为 Retain。

默认 StorageClass

查看以后的默认 StorageClass

# kubectl get scNAME                            PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGEmanaged-nfs-storage (default)   fuseim.pri/ifs   Delete          Immediate           false                  9m46s

标记默认的 StorageClass 为非默认

kubectl patch storageclass 目前的默认storageclass名称 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'

标记一个一般 sc 为默认

kubectl patch storageclass storageclass名称 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

结束语

StorageClass 对象并不是为了主动创立 PV 而建设的,所以在动态创立机制和动态创建机制中都应该存在该参数。

如果 PVC 中没有指定 storageClassName,那么:

  1. 如果集群曾经开启了名叫 DefaultStorageClass 的 Admission Plugin,该 Plugin 会为 PVC 和 PV 主动增加一个默认的 StorageClass。
  2. 如果没有该 Plugin,PVC 的 storageClassName 的值是 "",它只能跟 storageClassName 是 "" 的 PV 进行绑定。

分割我

微信公众号:zuolinux_com