Skip to Content

什麼是 Kubernetes 持久容量?

管理具狀態應用程式的儲存系統是容器調度的關鍵。Kubernetes Persistent Volume(PV) 是解決這項需求的基本功能,它提供了獨立於個別 pod 生命週期管理儲存資源的機制。在這篇文章中,我們將深入探討 Kubernetes Persistent Volume 的概念、其功能,以及在您的 Kubernetes 叢集中有效運用的最佳做法。

什麼是 Kubernetes Persistent Volume?

Kubernetes Persistent Volume(PV) 是 Kubernetes 叢集中的儲存資源,可抽象基礎儲存技術。與與 Pod 生命週期相關的臨時儲存裝置不同,它在 Pod 終止時消失,PVs 提供了一種方法來管理和分配持久性儲存裝置給應用程式。如此可確保即使存取資料的 pod 被終止或重新排程,資料依然完好無損。

持續使用大量資料可帶來以下好處:

  • 儲存摘要:PVs 會從 Pod 中隱藏實體儲存的細節(例如,本機磁碟、SAN、雲端儲存)。使用者無需了解具體的實作細節,即可要求儲存。
  • 持久性:PVs 即使在重新啟動或重新排程 pod 期間,也能保證資料持久性。想像一下,網路伺服器 Pod 使用終端儲存來儲存臨時日誌。當 pod 重新啟動時,這些日誌會遺失。另一方面,持久性儲存可確保資料如由資料庫 Pod 維護的應用程式資料維持完整。
  • 從 pod 解離儲存:這樣的分離功能可提高儲存資源的彈性和控制。Pod 可以輕鬆向上或向下擴充,而不會影響底層儲存設備。

Kubernetes 持久性磁碟區的主要功能

Kubernetes Persistent Volumes 提供多項關鍵功能,使其功能強大且適應各種儲存需求:

儲存類

儲存類別就像範本,定義叢集中可用的不同儲存層或類別。它們可以指定效能(例如 SSD 與 HDD)、容量、耐用性和成本等特性。這讓管理員能夠根據應用程式的特定需求,提供量身訂做的儲存裝置。

存取模式

存取模式定義了 pod 如何與 PV 提供的儲存裝置互動。以下是常見模式的明細:

  • ReadWriteOnce(RWO):一次只能安裝一個具備讀寫權限的 Pod。這可確保需要獨家寫入存取的應用程式的資料完整性,例如主要資料庫複本。
  • 唯讀許多(ROX):多個 Pod 可以同時安裝音量,但只能以唯讀模式安裝。這對於應用程式無需修改即可存取共享資料的情況很有用,例如組態檔案或日誌儲存庫。
  • 閱讀WriteMany(RWX):多個 Pod 可以讀取寫入權限來安裝磁碟區。如果同時寫入多個 pod,由於潛在的資料不一致,因此應謹慎使用此存取模式。它是共用快取或協作編輯工具等特定使用案例的理想選擇。

索回政策

Reclaim 政策規定了 Kubernetes 在不再與 Pod 結合後如何處理 PVs。主要政策包括:

  • 保留:PVs 在 pod 解除綁定後仍然存在,允許手動管理,以備未來使用或遷移。
  • 回收:Kubernetes 回收 PV。這通常涉及擦除任何現有資料,並使儲存裝置可用於未來的 Pod 分配。
  • 刪除:PV 物件及其基礎儲存資源已完全刪除。請謹慎使用,因為可能無法復原資料。

磁碟區外掛程式

Kubernetes 利用大量外掛程式來彌補平台與各種儲存供應商之間的差距。這些外掛程式讓 Kubernetes 能夠了解各種儲存後端,並與之互動,包括本地儲存、網路連接儲存(NAS)解決方案,如 NFS 或 iSCSI,以及雲端供應商特定的儲存服務,如 AWS EBS 或 GCE 持續磁碟。此外掛程式架構在選擇儲存解決方案,以及將儲存解決方案與您的 Kubernetes 叢集整合時,提供了極大的彈性。

配置持續容量

Kubernetes 提供兩種主要配置持久性磁碟區(PV)的方法:靜態配置和動態配置。每一種方法都適用於不同的使用案例,並提供獨特的優勢。

靜態配置

在靜態配置中,叢集管理員會事先手動建立並配置 PVs。這種方法對儲存配置提供精細的控制,並適用於具有定義明確的儲存需求,且不會經常變更的情境。若要靜態配置 PV:

1. 定義儲存詳細資料:決定儲存容量、存取模式(ReadWriteOnce、ReadOnlyMany、ReadWriteMany)、回收原則(保留、回收、刪除)和磁碟區外掛程式細節(例如 NFS 的伺服器位址)。

2. 使用 YAML 建立 PV 物件:使用 YAML 資訊清單檔案定義 PV 配置。以下是使用 NFS 儲存裝置的範例:

apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: my-pv-nfs
 spec:
   capacity:
     storage: 10Gi
   accessModes:
     - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   nfs:
     path: /path/to/nfs/share
     server: nfs-server.example.com

  • 名稱:PV 的唯一名稱。
  • 儲存:所需的儲存容量(例如 10 GB 的 10Gi)。
  • 存取模式:根據您的應用程式需求選擇適當的存取模式。
  • persistentVolumeReclaim政策:定義 Kubernetes 在 PV 不受 Pod 束縛後應如何處理。
  • nfs.path:NFS 伺服器上 NFS 共用的路徑。
  • nfs.server:NFS 伺服器的 IP 位址或主機名稱。

3. 套用 YAML 清單:使用 kubectl apply -f 指令,在您的 Kubernetes 叢集中建立 PV 物件。

動態配置

動態配置運用 StorageClasses 自動建立 PV。管理員定義 StorageClasses,指定想要的儲存特性,讓 Kubernetes 在 PersistentVolumeClaim(PVC)要求儲存時,處理 PV 的建立需求。若要使用動態配置:

1. 定義 StorageClass:建立 StorageClass YAML 資訊清單,說明佈建器、儲存類型(例如 SSD、HDD),以及佈建器所需的任何額外參數。以下是 AWS EBS 的範例:

apiVersion: storage.k8s.io/v1
 kind: StorageClass
 metadata:
   name: standard-ebs
 provisioner: kubernetes.io/aws-ebs
 parameters:
   type: gp2

  • 名稱:StorageClass 的唯一名稱。
  • 提供程式:儲存設備外掛程式的名稱(例如 kubernetes.io/aws-ebs for AWS EBS)。
  • 參數.類型:供應器內的儲存類型(例如,在 AWS EBS 中,一般用途 SSD 磁碟區類型的 gp2)。

2. 套用 StorageClass 清單:使用 kubectl apply -f 在叢集中建立 StorageClass 物件。

將持久容量與 Pod 結合

將 PV 與 pod 結合,讓應用程式能夠利用持久性儲存。這種結合通常透過 PersistentVolumeClaim(PVC達成。

    PVC 是 Pod 提交的儲存請求。它說明了 Pod 的儲存需求,包括:

  • 存取模式:定義 Pod 如何與儲存設備互動(例如 ReadWriteOnce、ReadOnlyMany、ReadWriteMany)。
  • 儲存容量:適合 Pod 的儲存容量。
  • StorageClassName(選用):參考 StorageClass 進行動態配置。

    結合 PVs 與 pod 的主要方法有兩種:

  • 靜態繫結:在靜態綁定中,管理員手動建立一個 PVC,明確引用預先配置的 PV。PVC 和 PV 必須有相容的屬性,例如相符的存取模式,以及 PV 中的充足儲存容量,以符合 PVC 的要求。
  • 動態綁定:動態綁定運用 StorageClasses 自動建立 PV。部署 PVC 參考 StorageClass 的 Pod 時,Kubernetes 會搜尋符合 PVC 要求的合適 PV(根據 StorageClass 現有或新配置)。如果找到合適的 PV,Kubernetes 會自動將 PV 和 PVC 結合在一起。

以下是一個名為 "pod-example" 的 pod 範例,它利用名為 "pvc-example" 的 PVC:

apiVersion: v1
 kind: Pod
 metadata:
   name: pod-example
 spec:
   containers:
   - name: app
     image: nginx
     volumeMounts:
     - mountPath: "/usr/share/nginx/html"
       name: pvc-storage
   volumes:
   - name: pvc-storage
     persistentVolumeClaim:
       claimName: pvc-example

在此範例中,Pod 將名為 "pvc-example" 的 PVC 安裝在容器內的路徑 "/usr/share/nginx/html"。這讓 Pod 能夠存取並管理儲存在底層 PV 中的持久性資料。

管理持久性磁碟區

您必須有效管理持久性磁碟區(PV),才能在 Kubernetes 叢集中維持高效率且可擴充的儲存利用率。PV 管理的一些關鍵方面包括:

1. 調整持久容量

Kubernetes v1.11 帶來了調整 PV 規模的能力。這可讓您動態調整分配給 PV 的儲存容量,以因應不斷成長的應用儲存需求。 

若要調整 PV 的大小,請更新 PVC 的儲存要求:編輯參考 PV 的 PVC,並修改 resources.requests 部分 PVC 的 YAML 規格中的儲存值。例如,若要將名為 "pvc-example" 的 PVC 大小增加至 20Gi 請更新 YAML 資訊清單:

apiVersion: v1
 kind: PersistentVolumeClaim
 metadata:
   name: pvc-example
 spec:
   resources:
     requests:
       storage: 20Gi

一旦您更新了 PVC 的儲存請求,Kubernetes 會嘗試調整為 PV 配置的基礎儲存。調整 PV 規模通常是單向操作(擴充儲存)。由於潛在的資料遺失問題,不支援縮減 PV 的大小。

2. 刪除持續磁碟區

若要刪除 PV,請確保目前 PVC 並未受任何約束。您無法刪除 PV PVC,以防止資料遺失。以下是刪除 PV 的方法:

kubectl delete pv pv-example

以您想要刪除的 PV 實際名稱取代 pv 範例。

3.  更新持續容量

雖然核心儲存容量無法直接在 PV 物件內修改,但您可以更新 PV 的特定中繼資料欄位,例如標籤或註解。這些標籤和註釋可用於更好地組織、識別和管理叢集中的 PVs。

使用 Kubernetes Persistent Volumes 的最佳做法

以下是您應該遵循的最佳做法,以充分利用 Kubernetes 的持久性資料:

  • 選擇適當的儲存類別:選擇符合您應用程式效能與耐久性需求的儲存等級。例如,將 SSD 支援的儲存裝置用於高效能應用程式,將 HDD 支援的儲存裝置用於歸檔用途。
  • 正確設定存取模式:根據您的應用程式存取儲存所需的方式,為您的 PV 選擇適當的存取模式。例如,您可以將 RWX 用於共用檔案系統,將 RWO 用於單一實例資料庫。
  • 明智地實施回收政策:設定符合您資料生命週期管理策略的回收政策。對刪除前需要人工干預的關鍵資料,請使用保留政策。
  • 監控與記錄:利用監控與記錄工具來監控 PV 的使用、效能與健康狀況。Prometheus 和 Grafana 等工具可以為您的儲存基礎架構提供寶貴的深度資訊。
  • 使用 Portworx® 進行進階資料管理:對於 Kubernetes 中的進階資料管理和持久性儲存解決方案,請考慮使用 Pure Storage 的 Portworx。Portworx 提供高可用性、災害復原和備份等功能,專為容器化應用程式而設計。

結論

Kubernetes Persistent Volumes(PV)為管理具狀態應用程式儲存系統提供了基本機制。利用 PV,您可以確保 Kubernetes 叢集內的資料持久性、高可用性和高效率的儲存利用率。Pure Storage 的 Portworx 等解決方案,提供了直覺式的運用方式,讓您持續運用 Kubernetes 的效能。Portworx 具備高可用性、災害復原和備份等功能,使用人工智慧來提高效率,是容器化應用程式的理想 Kubernetes 持久性儲存解決方案。

10/2025
Virtual Machine Provisioning at Enterprise Scale | Everpure
Sizing and scaling Red Hat OpenShift Virtualization with Portworx.
白皮書
22 頁

查看重要資訊與活動

影片
觀看影片:企業級資料雲端的價值。

Charlie Giancarlo 討論管理為何管理資料才是未來趨勢,而非儲存設備。發掘整合式做法如何革新企業級 IT 作業。

立即觀看
資源
傳統儲存裝置無法驅動未來。

現代化工作負載需求必須達到 AI 級速度、安全性與規模。您的技術棧準備好了嗎?

進行評估
PURE360 示範
探索、認識、體驗 Pure Storage。

存取隨取隨用影片與示範,了解 Pure Storage 的強大功效。

觀賞示範影片
精神領袖
創新競賽

儲存創新最前線的產業領導者最新深度資訊與觀點。

了解更多資訊
您的瀏覽器已不受支援!

較舊版的瀏覽器通常存在安全風險。為讓您使用我們網站時得到最佳體驗,請更新為這些最新瀏覽器其中一個。

Personalize for Me
Steps Complete!
1
2
3
Thinking...