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
Sizing and scaling Red Hat OpenShift Virtualization with Portworx.
白皮書
22 頁

查看重要資訊與活動

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

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

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

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

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

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

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

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

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

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