Kubernetes 存儲管理:SC、PV 和 PVC 概述
SC定義了PVC所要的屬性和行為,而PV是實際儲存的資源,PVC是Pod對持久卷的請求。
看到一個很棒的租客的比喻:
- SC:類似台灣的慶房屋/信房屋 等類似房仲的角色。
- PV:相當於一套房子(幾房幾廳那種)。
- PVC:租客的需求。
- Pod:租客。
租客(Pod)想要找房仲(SC)並提出了自己的需求(PVC),而仲介(SC)會根據(PVC)找到房子(PV)提供給租客(Pod)使用。
儲存類(StorageClass,SC)
想像 SC 是一家租車公司的不同車型目錄。這個目錄列出了所有可用的車型(如經濟型、豪華型、SUV 等,每種車型都有其特定的特點和價格)。
當客戶需要租車時,他們可以根據自己的需求從這個目錄中選擇合適的車型,而不需要關心具體的車輛。
SC 跟 PV 類似 但差異在於可以動態提供儲存資源,不需要管理員創建 PV。
- StorageClass 定義了創建 PV 的模板。
- 可指定存儲的提供者(如 AWS EBS, Google Cloud Persistent Disk 等)。
- 可以設置諸如磁碟類型、備份策略等參數。
- 允許管理員為不同的應用場景提供不同的存儲選項。
# 房仲(SC) 以該檔案為範例
# 會創一個名為 nfs-prj 的SC 供大家使用
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-prj
provisioner: kubernetes.io/nfs # 或者使用您的 NAS 提供商的特定 provisioner
parameters:
server: 192.168.0.21 # nas or 其他服務路徑
path: "nas-only/k8s/test"
reclaimPolicy: Retain # Delete 或者 Retain
volumeBindingMode: Immediate
reclaimPolicy(回收策略)-> 預設delete
持久卷(PersistentVolume,PV)
將 PV 比作圖書館中的書架,這些書架 (PV) 是圖書館(Kubernetes集群)的一部分,它們存在於書架上,不依賴任何特定的讀者(Pod)。書架可以裝滿書(數據) 即使沒有任何人正在閱讀,書架和書籍也會一直在那裡。
- PV 可以被靜態提供(管理員手動創建)或動態提供(通過 StorageClass)。
- 它代表了實際的存儲空間,如一個 NFS 共享或雲端存儲卷。
- PV 有自己的生命週期,獨立於使用它的 Pod。
- 可以設置訪問模式(如 ReadWriteOnce, ReadOnlyMany, ReadWriteMany)和回收策略。
持久卷申領(PersistentVolumeClaim,PVC)
想像 PVC 是圖書館的借書單。當讀者(Pod)需要一本特定類型的書時,他們填寫一張借書單(PVC),指明他們需要的書的類型(如科幻小說、歷史書等)和其他要求(如頁數)。圖書管理員(Kubernetes)然後會根據這個借書單,從現有的書架(PV)上找到合適的書,或者如果沒有現成的,就從書店(StorageClass)訂購一本新的。
- PVC 定義了 Pod 所需的特定存儲需求(如大小、訪問模式)。
- 它會尋找並綁定到滿足其需求的 PV。
- 如果找不到匹配的 PV,且有合適的 StorageClass,系統會動態創建一個新的 PV。
- Pod 通過 PVC 來使用存儲,而不是直接使用 PV。
三者之間的關係
- StorageClass 定義了可以動態創建的存儲類型。
- 當創建 PVC 時,可以指定使用特定的 StorageClass。
- 如果存在匹配的 PV,PVC 會直接綁定到該 PV。
- 如果沒有匹配的 PV,但指定了 StorageClass,系統會動態創建一個新的 PV。
- Pod 通過引用 PVC 來使用存儲,PVC 則連接到實際的 PV。
文末整理下 PV 和 SC 的差異
特性 | PersistentVolume (PV) | StorageClass (SC) |
---|---|---|
定義 | 集群中的一塊實際存儲資源 | 定義動態提供 PV 的策略 |
創建方式 | 可以靜態創建或動態提供 | 由集群管理員定義 |
生命週期 | 獨立於使用它的 Pod | 持久存在,除非被刪除 |
用途* | 直接被 PVC 使用 | 用於動態創建 PV |
細節程度 | 定義具體的存儲細節 | 定義存儲的類型和參數 |
靈活性 | 相對固定 | 高度靈活,支持動態配置 |
管理難度* | 需要手動管理(靜態配置時) | 簡化了存儲管理 |
示例 | 特定大小的 NFS 共享 | EBS 通用型(gp2)存儲 |
與 PVC 的關係 | 直接綁定到 PVC | 用於動態創建綁定到 PVC 的 PV |
資源迴圈利用* | 可以被重複使用 | 不適用(它是一個模板) |
*表示關鍵差異
參考: