一、核心概念與關系
?1、PV(Persistent Volume)?
PV 是集群中的持久化存儲資源,由管理員預先創建并配置,獨立于 Pod 生命周期。它抽象了底層存儲(如 NFS、云存儲等),定義存儲容量、訪問模式(如 ReadWriteOnce
)、回收策略(Retain
/Delete
/Recycle
)等屬性。例如,一個 NFS 存儲的 PV 可能包含服務器路徑和存儲容量信息。
示例:
apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RetainstorageClassName: nfsnfs:path: /data/nfsserver: 192.168.1.100
2、PVC(Persistent Volume Claim)?
PVC 是用戶對存儲資源的聲明,定義所需的容量、訪問模式等需求。Kubernetes 根據 PVC 自動匹配符合條件的 PV 并綁定,實現存儲與應用的解耦。例如,一個數據庫應用通過 PVC 申請 5Gi 的存儲空間。
示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5Gi
3、PV 與 PVC 的關系
- ?靜態綁定:管理員手動創建 PV,用戶通過 PVC 申請時自動匹配。
- 動態綁定:通過
StorageClass
動態生成 PV,無需預先配置。 - 一對一綁定:一個 PVC 僅綁定一個 PV,PV 被占用后不可復用(除非釋放)。
二、生命周期與關鍵機制
?1、PV 生命周期
- ?Provisioning:PV 可通過管理員靜態創建或由
StorageClass
動態生成。 - Binding:PVC 匹配 PV 時觸發綁定,未匹配則 PVC 處于
Pending
狀態。 - Usage:Pod 掛載 PVC 使用存儲資源,數據持久化至 PV。
- Releasing:刪除 PVC 后,PV 根據回收策略處理(如保留數據或刪除存儲)。
- Recycling:
Retain
策略下需手動清理數據,Delete
策略自動銷毀底層存儲。
?2、訪問模式(Access Modes)?
- ?ReadWriteOnce (RWO):單節點讀寫(如塊存儲)。
- ?ReadOnlyMany (ROX):多節點只讀(如 NFS 共享配置文件)。
- ?ReadWriteMany (RWX):多節點讀寫(如分布式文件系統)。
3、回收策略(persistentVolumeReclaimPolicy)
- Retain:在 PVC 被刪除后,保留 PV 和其數據,手動清理 PV 中的數據。
- Delete:在 PVC 被刪除后,自動刪除 PV 和其數據。
- Recycle:在 PVC 被刪除后,通過刪除 PV 中的數據來準備 PV 以供重新使用。
persistentVolumeReclaimPolicy只適用于一些類型的 PV,如 NFS、HostPath、
iSCSI 等。對于一些云平臺提供的存儲,如 AWS EBS 和 Azure Disk,由于底層提供商會自動處理PV的回收問題,因此該屬性不適用。
4、存儲分類(storageClassName)
- 指定 PV 的class 為 nfs。相當于為 PV 設置了一個分類,PVC可以指定 class 申請相應class 的 PV。
三、靜態供應示例
1、創建PV池
nfs主節點:
mkdir -p /nfs/data/01
mkdir -p /nfs/data/02
mkdir -p /nfs/data/03
2、創建PV
創建一個pv.yaml文件,內容如下:
apiVersion: v1
kind: Pers