iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Cloud Native

從 Docker 到 K8s:我的 30 天雲原生筆記系列 第 13

Day 13: PersistentVolume (PV) & PersistentVolumeClaim (PVC)

  • 分享至 

  • xImage
  •  

大家好!歡迎來到 K8s 的第六天!

昨天的 Day 12,我們把設定檔(ConfigMapSecret)成功「搬」出應用程式,讓 Deployment 看起來更乾淨。這樣的應用還屬於「無狀態 (Stateless)」,因為它們不在乎重啟後是不是資料全沒了。

但現實世界可不是這麼簡單啊!像資料庫、消息隊列這些服務,都需要長久保存資料。那問題來了:如果 Pod 重啟時被調度到另一台機器,原本的資料還能找到嗎?

「哎呀,這不是用 Volume 就好了嗎?」,別急,在單機的 Docker 裡這麼做沒問題,但在 Kubernetes 的多節點世界裡,事情可沒那麼單純。因為 Pod 可能搬家,搬到另一台 Node 上之後,就再也看不到原本那塊本地硬碟的資料了 。

所以今天,我們要來學習 Kubernetes 一套能讓資料跟著應用走的持久化儲存系統。

Part 1:K8s 的儲存哲學 —— 「供需分離」

K8s 處理這個問題的方法很聰明:它把「提供儲存的人」和「使用儲存的人」徹底分開,走的是「供需分離」模式。
就好像公司裡的 IT 流程一樣:

  • 叢集管理員:就像 IT 人員,負責先準備好 SSD、HDD、雲端硬碟這些資源。
  • 開發者:就像寫程式的人,只要填張申請單,寫上「我需要 10GB 的 SSD」,就能獲得一塊適合的儲存。

在 Kubernetes 裡,這兩個角色對應到兩個重要物件:

  1. PersistentVolume (PV) —— 管理員準備的儲存資源。
  2. PersistentVolumeClaim (PVC) —— 開發者提出的申請單。

Part 2:PersistentVolume (PV) —— IT 的「資源庫房」

PV 可以想成「已經貼好標籤、放在機房架子上的硬碟」。它是管理員準備好的儲存空間,寫好屬性、大小、類型,但還沒分配給誰用。常見屬性包含:

  • 容量 (Capacity):例如 10Gi
  • 存取模式 (Access Modes):例如 ReadWriteOnce(一次只能一個節點讀寫)
  • StorageClass:例如 fast-ssd

PV 屬於「叢集層級」資源,不綁定任何 Namespace

Part 3:PersistentVolumeClaim (PVC) —— 開發者的「資源申請單」

PVC 就像開發者遞交的申請表單,寫上:

  • 「我需要 8Gi」
  • 「我要 ReadWriteOnce
  • 「最好是 fast-ssd 類型」

K8s 收到 PVC 後,會開始幫你「配對」:

  1. 看看有哪些 PV 可用。
  2. 找到符合容量、模式的那一塊。
  3. 一旦媒合成功,PVC 和 PV 會綁定 (Bind)。
  4. 綁定後,這塊 PV 就專屬於這個 PVC,不會再被別人搶走。

PVC 屬於「Namespace 層級」,必須和 Pod 在同一個 Namespace。

Part 4:在 Pod 中使用 PVC

當 PVC 綁定到 PV 後,你就能像用 Volume 一樣,把它掛載到 Pod。

  1. 先寫一張 PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ota-db-pvc <-- 這邊
  namespace: project-space
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  1. 修改 Deployment:
volumes:
- name: db-storage
  persistentVolumeClaim:
    claimName: ota-db-pvc <-- 這邊

這樣 MariaDB 的資料就能存在 PVC 對應的 PV 裡,即使 Pod 搬到另一個 Node 也沒問題 。

Part 5:自動化魔法 —— StorageClass

以前要用 PV,都得請管理員先準備好硬碟。現在有了 StorageClass,這件事自動化了!你可以把 StorageClass 想像成 IT 部門提供的「資源目錄」:

  • standard:HDD
  • fast-ssd:SSD
  • cloud-backup:雲端儲存

當 PVC 指定了某個 StorageClass,K8s 就會自己去底層幫你動態建立一個 PV,並自動綁定。
管理員只要定義「有哪些類型可用」,不需要一個個手動建。

Part 6:一張圖看懂 K8s 儲存架構

https://ithelp.ithome.com.tw/upload/images/20250920/20178656129DS7UjVU.png

現在我們的應用,不只可以被部署、帶著設定檔,還能「帶著記憶」一起運行。但下一個問題又來了:Pod 真的健康嗎?光是看到它 Running,不代表它就能正常接受連線。接下來就要來談 Kubernetes 的「健康檢查 (Probes)」機制 ,明天見!


上一篇
Day 12: ConfigMap & Secret
下一篇
Day 14: Probes (Liveness & Readiness)
系列文
從 Docker 到 K8s:我的 30 天雲原生筆記16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言