iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
DevOps

新創視角下的 DevOps × AI 探索系列 第 19

Day 19: PersistentVolume (PV) 與 PersistentVolumeClaim (PVC):持久化儲存

  • 分享至 

  • xImage
  •  

前言:為什麼需要持久化儲存?

在前一篇我們介紹了 Volume 的基礎類型,例如 EmptyDir 與 HostPath。
雖然這些 Volume 在某些情境下很方便,但它們有一個致命的缺點:

  • EmptyDir:Pod 被刪除或重啟,資料就會消失。
  • HostPath:與節點綁定,Pod 如果被調度到其他節點,資料就不見了。

在實際生產環境裡,我們常常需要 跨 Pod、跨節點保存資料,例如:

  • 資料庫(MySQL、PostgreSQL)
  • 使用者上傳的檔案
  • Web 服務的靜態檔案

這就是 PersistentVolume (PV) 與 PersistentVolumeClaim (PVC) 登場的時候。

PV 與 PVC 的核心概念

Kubernetes 透過「需求與供給」的方式來管理持久化儲存。
PersistentVolume (PV)

  • 叢集層級的資源,由管理員建立。
  • 對應到實際的儲存後端(如 NFS、雲端磁碟)。
    PersistentVolumeClaim (PVC)
  • 使用者提出的需求,像「我要 500Mi 的磁碟空間」。
  • 系統會幫它找到合適的 PV 進行綁定。

可以把它想像成:

Pod → PVC → PV → 實體儲存

Pod 不需要知道背後到底是 NFS 還是雲端硬碟,只要透過 PVC 就能拿到對應的儲存。

PV 與 PVC 的生命週期

  1. 供應 (Provisioning)
  • 靜態:管理員手動建立 PV。
  • 動態:透過 StorageClass 自動建立(下一篇會深入)。
  1. 綁定 (Binding)
  • PVC 發出需求,系統會幫它找到符合條件的 PV。
  1. 使用 (Using)
  • Pod 掛載 PVC,就能像使用普通 Volume 一樣。
  1. 回收 (Reclaiming)
  • PV 不再被使用時,會依照策略決定要 Retain / Delete。

常見的 PV 後端

  • NFS:跨節點共用,常見於測試或內部應用。
  • 雲端儲存:AWS EBS、GCP Persistent Disk、Azure Disk。
  • 分散式儲存:CephFS、GlusterFS。
  • 本地磁碟:僅限單一節點。

實作範例:使用 NFS 建立 PV 與 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 消失。

小結

  • PV 與 PVC 解決了 Volume 的短暫性問題,讓資料與 Pod 解耦。
  • 回收策略(Retain / Delete)決定 PV 的資料命運。
  • 不過,手動建立 PV 與 PVC 仍然不夠彈性,因此下一篇我們會進一步介紹 StorageClass 與動態供應,讓存儲管理自動化。

上一篇
Day 18: Volume 基礎:EmptyDir、HostPath
下一篇
Day 20: StorageClass 與動態供應:自動化存儲管理
系列文
新創視角下的 DevOps × AI 探索22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言