管理具狀態應用程式的儲存系統是容器調度的關鍵。Kubernetes Persistent Volume(PV) 是解決這項需求的基本功能,它提供了獨立於個別 pod 生命週期管理儲存資源的機制。在這篇文章中,我們將深入探討 Kubernetes Persistent Volume 的概念、其功能,以及在您的 Kubernetes 叢集中有效運用的最佳做法。
Kubernetes Persistent Volume(PV) 是 Kubernetes 叢集中的儲存資源,可抽象基礎儲存技術。與與 Pod 生命週期相關的臨時儲存裝置不同,它在 Pod 終止時消失,PVs 提供了一種方法來管理和分配持久性儲存裝置給應用程式。如此可確保即使存取資料的 pod 被終止或重新排程,資料依然完好無損。
持續使用大量資料可帶來以下好處:
Kubernetes Persistent Volumes 提供多項關鍵功能,使其功能強大且適應各種儲存需求:
儲存類別就像範本,定義叢集中可用的不同儲存層或類別。它們可以指定效能(例如 SSD 與 HDD)、容量、耐用性和成本等特性。這讓管理員能夠根據應用程式的特定需求,提供量身訂做的儲存裝置。
存取模式定義了 pod 如何與 PV 提供的儲存裝置互動。以下是常見模式的明細:
Reclaim 政策規定了 Kubernetes 在不再與 Pod 結合後如何處理 PVs。主要政策包括:
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
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
2. 套用 StorageClass 清單:使用 kubectl apply -f 在叢集中建立 StorageClass 物件。
將 PV 與 pod 結合,讓應用程式能夠利用持久性儲存。這種結合通常透過 PersistentVolumeClaim(PVC達成。
PVC 是 Pod 提交的儲存請求。它說明了 Pod 的儲存需求,包括:
結合 PVs 與 pod 的主要方法有兩種:
以下是一個名為 "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 管理的一些關鍵方面包括:
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 的大小。
若要刪除 PV,請確保目前 PVC 並未受任何約束。您無法刪除 PV PVC,以防止資料遺失。以下是刪除 PV 的方法:
kubectl delete pv pv-example
以您想要刪除的 PV 實際名稱取代 pv 範例。
雖然核心儲存容量無法直接在 PV 物件內修改,但您可以更新 PV 的特定中繼資料欄位,例如標籤或註解。這些標籤和註釋可用於更好地組織、識別和管理叢集中的 PVs。
以下是您應該遵循的最佳做法,以充分利用 Kubernetes 的持久性資料:
Kubernetes Persistent Volumes(PV)為管理具狀態應用程式儲存系統提供了基本機制。利用 PV,您可以確保 Kubernetes 叢集內的資料持久性、高可用性和高效率的儲存利用率。Pure Storage 的 Portworx 等解決方案,提供了直覺式的運用方式,讓您持續運用 Kubernetes 的效能。Portworx 具備高可用性、災害復原和備份等功能,使用人工智慧來提高效率,是容器化應用程式的理想 Kubernetes 持久性儲存解決方案。