Kubernetes 使用Persistent Volume和Persistent Volume Claim 兩種API資源來管理存儲。
- PersistentVolume (簡稱PV): 由管理員設置的存儲,它是集群的一部分。就像節點(Node)是集群中的資源一樣,PV也是集群中的資源。它包含存儲類型,存儲大小和訪問模式。它的生命周期獨立於Pod,例如當使用它的Pod銷毀時對PV沒有影響。
- PersistentVolumeClaim (簡稱PVC): 是用戶存儲的請求。它和Pod類似。Pod消耗Node資源,PVC消耗PV資源。Pod可以請求特定級別的資源(CPU和MEM)。PVC可以請求特定大小和訪問模式的PV。
可以通過兩種方式配置PV:靜態或動態。
- 靜態PV:集群管理員創建許多PV,它們包含可供集群用戶使用的實際存儲的詳細信息。
- 動態PV:當管理員創建的靜態PV都不匹配用戶創建的PersistentVolumeClaim時,集群會為PVC動態的配置卷。此配置基於StorageClasses:PVC必須請求存儲類(storageclasses),並且管理員必須已創建並配置該類,以便進行動態創建。
關於PersistentVolume的訪問方式
- ReadWriteOnce - 卷以讀寫方式掛載到單個節點
- ReadOnlyMany - 卷以只讀方式掛載到多個節點
- ReadWriteMany - 卷以讀寫方式掛載到多個節點
在CLI(命令行界面)中,訪問模式縮寫為:
- RWO - ReadWriteOnce
- ROX - ReadOnlyMany
- RWX - ReadWriteMany
特別注意: 卷只能一次使用一種訪問模式安裝,即使它支持很多。
關於回收策略
- Retain - 手動回收。在刪除pvc后PV變為Released不可用狀態, 若想重新被使用,需要管理員刪除pv,重新創建pv,刪除pv並不會刪除存儲的資源,只是刪除pv對象而已;若想保留數據,請使用該Retain。
- Recycle - 基本擦洗(rm -rf /thevolume/*)。 刪除pvc自動清除PV中的數據,效果相當於執行 rm -rf /thevolume/*。刪除pvc時,pv的狀態由Bound變為Available。此時可重新被pvc申請綁定。
- Delete - 刪除存儲上的對應存儲資源。關聯的存儲資產(如AWS EBS,GCE PD,Azure磁盤或OpenStack Cinder卷)將被刪除。NFS不支持delete策略。
目前,只有NFS和HostPath支持回收。AWS EBS,GCE PD,Azure磁盤和Cinder卷支持刪除。
關於PersistentVolume (PV) 狀態
- Available(可用狀態) - 一塊空閑資源還沒有被任何聲明綁定
- Bound(綁定狀態) - 聲明分配到PVC進行綁定,PV進入綁定狀態
- Released(釋放狀態) - PVC被刪除,PV進入釋放狀態,等待回收處理
- Failed(失敗狀態) - PV執行自動清理回收策略失敗
關於PersistentVolumeClaims (PVC) 狀態
- Pending(等待狀態) - 等待綁定PV
- Bound(綁定狀態) - PV已綁定PVC