Kubernetes 中 PV 和 PVC 的區別
一、概述
Kubernetes 是一種流行的開源平台,用於容器編排。然而,在 Kubernetes 上運行有狀態應用程序時的主要挑戰之一是管理存儲。此外,Kubernetes 提供了eClaim
用於管理存儲的主要對象: PersistentVolume
(PV) 和P
(PVC)。
在本教程中,我們將討論 PV 和 PVC 之間的區別,並提供示例來說明它們的用法。
2. 什麼是PersistentVolume
(PV)?
PersistentVolume
(PV) 是一種 Kubernetes 資源,代表集群中的一塊存儲。它是一個集群範圍的資源,可以被 Kubernetes 集群中的多個 pod 使用。它可以通過多種方式創建,包括靜態配置卷、動態配置卷或導入現有捲。
PV 是一種將存儲與 pod 分離的方法,允許 pod 獨立於 pod 的生命週期訪問存儲。 PV 被設計為由多個 pod 使用,這意味著它們可以擁有獨立於使用它們的任何 pod 的生命週期。
以下是 PV YAML 定義的示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
hostPath:
path: /data
在這個例子中,我們創建一個容量為 10GB 的 PV,並將其訪問模式設置為ReadWriteOnce
,使單個節點可以將捲掛載為讀寫。
我們可以看到,PV 有一個Retain
的persistentVolumeReclaimPolicy
,這表示刪除 PVC 時不會自動刪除 PV。此外,我們將storageClassName
設置為slow
,使 PVC 能夠使用相同的存儲類名稱從該 PV 請求存儲。
3. 什麼是PersistentVolumeClaim
(PVC)?
PersistentVolumeClaim
(PVC) 是一種 Kubernetes 資源,表示 pod 的存儲請求。它可以指定存儲要求,例如大小、訪問模式和存儲類別。 Kubernetes 使用 PVC 來尋找滿足 PVC 要求的可用 PV。
PVC 由 pod 創建以向 PV 請求存儲。創建 PVC 後,它可以作為卷安裝在 pod 中。然後 pod 可以使用掛載的捲來存儲和檢索數據。
讓我們看一個 PVC YAML 定義的例子:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: slow
使用此 YAML 文件,我們創建了一個請求 5GB 存儲的 PVC,其訪問模式為ReadWriteOnce
。我們將storageClassName
設置為slow
,使 Kubernetes 能夠將 PV 與 PVC 的存儲類名稱相匹配。
4. PV和PVC的區別
PV 和 PVC 的主要區別在於,PV 代表集群中的一塊存儲,而 PVC 代表 Pod 對存儲的請求。
以下是 PV 和 PVC 之間的一些其他區別:
財產 | 光伏 | PVC |
範圍 | 集群中的多個 pod 可以使用它 | 表示 pod 對命名空間中存儲的請求 |
置備 | 可以靜態創建、動態創建或導入 | 由 pod 創建以從 PV 請求存儲 |
生命週期 | 具有獨立於任何使用的 pod 的生命週期 | 綁定到 pod 的生命週期 |
配置 | 可以配置訪問模式、 persistentVolumeReclaimPolicy 和storageClassName | 可以指定存儲要求,例如大小、訪問模式和存儲類別 |
使用權 | 多個 pod 可以訪問它 | 只有請求的 pod 可以訪問它 |
5. PV 和 PVC 示例
讓我們看一個如何在 Kubernetes 中使用 PV 和 PVC 的例子。我們將創建一個從 PV 請求存儲的 PVC,然後使用 PVC 將捲掛載到 pod 中。
首先,我們將通過靜態配置具有以下規格的捲來生成 PV:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-storage
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data
接下來,我們將創建從 PV 請求存儲的 PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
最後,我們將創建一個使用 PVC 作為卷的 pod:
apiVersion: v1
kind: Pod
metadata:
name: pod-storage
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: storage
mountPath: /data
volumes:
- name: storage
persistentVolumeClaim:
claimName: pvc-storage
我們首先創建一個容量為 1GB 且訪問模式為ReadWriteOnce
的 PV。之後,我們繼續創建一個 PVC,該 PVC 請求 1GB 的存儲空間並具有相同的訪問模式。最後,為了將 PVC 用作卷,我們創建了一個將其掛載在/data
pod。
六,結論
在本文中,我們看到了用於管理存儲的兩個基本 Kubernetes 資源。首先,PV 代表集群中的一塊存儲,而 PVC 代表 pod 對存儲的請求。
此外,我們了解到,雖然這兩種資源之間存在相似之處,但它們在範圍、供應、生命週期、配置和訪問方面也存在顯著差異。
通過了解 PV 和 PVC 之間的區別,我們可以就如何有效管理 Kubernetes 集群中的存儲做出更明智的決策。