前言
StorageClass 相當于一個創建 PV 的模板,用戶通過 PVC 申請存盤卷,StorageClass 通過模板自動創建 PV,然后和 PVC 進行系結,
更新歷史
- 20200712 - 初稿 - 左程立
- 原文地址 - https://blog.zuolinux.com/2020/07/12/storageclass.html
啟用動態卷供應
創建 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動態卷提供持久化存盤》 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 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 進行系結,
聯系我
微信公眾號:zuolinux_com

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/78504.html
標籤:其他
