在 Kubernetes (K8S) 中,PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 是用於管理持久化儲存的關鍵元件。下面詳細介紹它們各自的作用及其相互關係:
1. PersistentVolume (PV)
1.1 作用:
-
提供持久儲存:
PV 是叢集級別的資源,它代表叢集中的一塊儲存空間,這塊儲存可以來自於本地檔案系統、NFS、網路儲存或是雲提供商的服務等。PV 的主要目的是為 Pod 提供持久化的儲存空間,即使 Pod 因故重啟或遷移至其他節點,資料依然可以被保留下來。 -
儲存資源的生命週期管理:
PV 的生命週期獨立於使用它的 Pod。這意味著 PV 可以被建立、使用、回收、甚至刪除,而這一切都不依賴於任何具體的 Pod。當一個 PV 不再被使用時,它可以被回收(Reclaim)以便再次使用。 -
訪問模式:
PV 支援多種訪問模式,如 ReadWriteOnce(單節點讀寫)、ReadOnlyMany(多節點只讀)、ReadWriteMany(多節點讀寫)等,這些模式定義了 PV 如何被 Pod 訪問。 -
回收策略:
當 PV 不再被 PVC 引用時,可以根據預設的回收策略處理 PV。回收策略可以是 Retain(保留)、Recycle(回收,清除資料)或 Delete(刪除)。
1.2 屬性:
- 容量:PV 的儲存容量。
- 訪問模式:如上所述,定義了 PV 的訪問方式。
- 儲存型別:指定了 PV 所使用的儲存後端型別。
- 標籤:可以附加標籤來幫助組織和過濾 PV。
2. PersistentVolumeClaim (PVC)
2.1 作用:
-
請求儲存資源:
PVC 是應用對儲存資源的請求,它定義了應用程式所需要的儲存容量、訪問模式以及其他屬性。PVC 允許使用者以宣告式的方式請求儲存資源,而不需要直接指定具體的儲存位置。 -
繫結 PV:
當一個 PVC 被建立後,Kubernetes 會嘗試找到一個符合條件的 PV 與其繫結。如果找不到合適的 PV,那麼 PVC 將會處於未繫結狀態,直到有合適的 PV 出現為止。 -
簡化儲存管理:
透過 PVC,使用者可以更加關注於應用程式本身,而不是底層的儲存細節。PVC 和 PV 的繫結過程是自動化的,簡化了儲存資源的管理。
2.2 屬性:
- 請求的儲存容量:PVC 請求的最小儲存容量。
- 訪問模式:請求的訪問模式,必須與 PV 的訪問模式相容。
- 儲存類:指定儲存類,用於指示如何建立 PV。如果未指定儲存類且沒有合適的 PV,那麼可以觸發動態 PV 的建立。
3. PV 和 PVC 的關係
PV 和 PVC 之間的關係類似於“供應”與“需求”的關係:
- PV 是叢集中可供使用的儲存資源。
- PVC 是應用程式對儲存資源的需求宣告。
- 當一個 PVC 被建立後,Kubernetes 會嘗試找到一個與之匹配的 PV 進行繫結。
- 繫結成功後,PV 的狀態會變為“Bound”,並且該 PV 將成為 PVC 的一部分。
- 當 PVC 被刪除時,PV 可以根據其回收策略被保留、回收或刪除。
綜上所述,透過 PV 和 PVC 的機制,Kubernetes 提供了一種靈活的方式來管理叢集中的持久化儲存資源,使得儲存資源的分配和回收變得更加自動化和高效。