在前一篇我們介紹了 Volume 的基礎類型,例如 EmptyDir 與 HostPath。
雖然這些 Volume 在某些情境下很方便,但它們有一個致命的缺點:
在實際生產環境裡,我們常常需要 跨 Pod、跨節點保存資料,例如:
這就是 PersistentVolume (PV) 與 PersistentVolumeClaim (PVC) 登場的時候。
Kubernetes 透過「需求與供給」的方式來管理持久化儲存。
PersistentVolume (PV)
可以把它想像成:
Pod → PVC → PV → 實體儲存
Pod 不需要知道背後到底是 NFS 還是雲端硬碟,只要透過 PVC 就能拿到對應的儲存。
(1) 在 NFS Server 建立資料夾
mkdir -p /srv/nfs/kubedata
chmod 777 /srv/nfs/kubedata
(2) 建立 PersistentVolume (PV)
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /srv/nfs/kubedata
server: <NFS_SERVER_IP>
(3) 建立 PersistentVolumeClaim (PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Mi
(4) Pod 使用 PVC
apiVersion: v1
kind: Pod
metadata:
name: nginx-pv-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: webdata
volumes:
- name: webdata
persistentVolumeClaim:
claimName: nfs-pvc
1. 在 NFS Server 放入一個 index.html。
2. 透過瀏覽器訪問 Pod 的 nginx,就能看到檔案內容。
3. 即使刪除並重建 Pod,檔案依然存在。
👉 這就是 PV/PVC 的強大之處,資料不會隨 Pod 消失。