在容器化應用程式中,保留數據和持久性是至關重要的,因此 Kubernetes 引入了 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 的概念。這些抽象層使得在 Kubernetes 環境中進行持久化儲存管理變得更簡單、更靈活。本文將深入介紹 PV 和 PVC,並解釋如何使用它們在 Kubernetes 中實現持久化儲存。
PersistentVolume (PV) 是 Kubernetes 中的一個核心概念,用於表示集群中的實際儲存資源。它允許您把物理儲存資源抽象為 Kubernetes 管理的層級,這樣應用程式可以進行持久化儲存的管理。PV 有以下特點:
PersistentVolumeClaim (PVC) 是對 PV 的請求,它定義了應用程式需要的持久化儲存資源。PVC 是應用程式和實際 PV 之間的中介層。Kubernetes 會根據 PVC 的要求來找到合適的 PV 並進行綁定。
讓我們看一個實際的範例,如何在 Kubernetes 中使用 PV 和 PVC:
創建一個 pv.yaml 檔案,定義一個 NFS PV:(本地儲存庫的位置會在/var/lib/docker/volumes/minikube/_data/data)
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-nfs-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: nfs-server.example.com
path: /data/my-nfs-volume
創建一個 pvc.yaml 檔案,定義一個 PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
在您的應用程式的 Deployment 配置中使用 PVC:(mountPath:是pod內container要做本地永久儲存庫的位置)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
template:
spec:
volumes:
- name: my-pvc-storage
persistentVolumeClaim:
claimName: my-nfs-pvc
containers:
- name: my-app-container
image: my-app-image:latest
volumeMounts:
- name: my-pvc-storage
mountPath: /data
$ kubectl apply -f pv.yaml
$ kubectl apply -f pvc.yaml
$ kubectl apply -f deploy.yaml