Kubernetes 存儲管理:SC、PV 和 PVC 概述

Kubernetes 存儲管理:SC、PV 和 PVC 概述
https://i-blog.csdnimg.cn/blog_migrate/d6832ccb3088c91300d0576fd225d7d2.png

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。

三者之間的關係

  1. StorageClass 定義了可以動態創建的存儲類型。
  2. 當創建 PVC 時,可以指定使用特定的 StorageClass。
  3. 如果存在匹配的 PV,PVC 會直接綁定到該 PV。
  4. 如果沒有匹配的 PV,但指定了 StorageClass,系統會動態創建一個新的 PV。
  5. Pod 通過引用 PVC 來使用存儲,PVC 則連接到實際的 PV。

文末整理下 PV 和 SC 的差異

特性 PersistentVolume (PV) StorageClass (SC)
定義 集群中的一塊實際存儲資源 定義動態提供 PV 的策略
創建方式 可以靜態創建或動態提供 由集群管理員定義
生命週期 獨立於使用它的 Pod 持久存在,除非被刪除
用途* 直接被 PVC 使用 用於動態創建 PV
細節程度 定義具體的存儲細節 定義存儲的類型和參數
靈活性 相對固定 高度靈活,支持動態配置
管理難度* 需要手動管理(靜態配置時) 簡化了存儲管理
示例 特定大小的 NFS 共享 EBS 通用型(gp2)存儲
與 PVC 的關係 直接綁定到 PVC 用於動態創建綁定到 PVC 的 PV
資源迴圈利用* 可以被重複使用 不適用(它是一個模板)

*表示關鍵差異

參考:

K8S中SC、PV、PVC的理解

K8官網 持久卷