K8S实战(十七)| 通过 StorageClass 实现动态卷供应
前言
StorageClass 相当于一个创建 PV 的模板,用户通过 PVC 申请存储卷,StorageClass 通过模板自动创建 PV,然后和 PVC 进行绑定。
更新历史
启用动态卷供应
创建 StorageClass 对象即可,即创建了模板。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: slow provisioner: kubernetes.io/gce-pd parameters: type: pd-standard --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: kubernetes.io/gce-pd parameters: type: pd-ssd
以上文件创建了两种不同类型的 StorageClass,用户根据自己需求通过 PVC 申请即可。
使用动态卷供应
用户通过 PVC 来申请。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: claim1 spec: accessModes: - ReadWriteOnce storageClassName: fast resources: requests: storage: 30Gi
以上文件说明该 PVC 向 storageClassName 为 fast 的存储类申请卷,将会得到一个 PV 来与该 PVC 进行绑定。
实践
《K8S实战(六)| 配置NFS动态卷提供持久化存储》
回收策略
由 StorageClass 动态创建的 PersistentVolume 会在类的 reclaimPolicy 字段中指定回收策略,可以是 Delete 或者 Retain。
如果 StorageClass 对象被创建时没有指定 reclaimPolicy,它将默认为 Delete。意味着 PV 被删除后,原始数据也会被删除。
建议设置为 Retain。
默认 StorageClass
查看当前的默认 StorageClass
# kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE managed-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,那么:
- 如果集群已经开启了名叫 DefaultStorageClass 的 Admission Plugin,该 Plugin 会为 PVC 和 PV 自动添加一个默认的 StorageClass。
- 如果没有该 Plugin,PVC 的 storageClassName 的值是 “”,它只能跟 storageClassName 是 “” 的 PV 进行绑定。
上一篇:
IDEA上Java项目控制台中文乱码