iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
DevOps

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

Day 20: StorageClass 與動態供應:自動化存儲管理

  • 分享至 

  • xImage
  •  

昨天我們談到 PersistentVolume (PV) 與 PersistentVolumeClaim (PVC),解釋了 Kubernetes 如何透過這兩者建立「應用程式與底層存儲」的橋樑。不過昨天的案例是 靜態供應 (Static Provisioning),需要先手動建立 PV 才能綁定 PVC。

問題來了:
在雲端或 CI/CD 環境裡,如果每個應用都要我們人工去建立 PV,那還叫「雲端自動化」嗎?
今天就來看看 StorageClass 與動態供應 (Dynamic Provisioning),如何讓存儲也能自動化!

為什麼需要 StorageClass?

假設你是雲端工程師,應用 A 想要 SSD 磁碟,應用 B 想要 HDD 磁碟,應用 C 想要高 IOPS 的 Premium SSD。如果每次都要你手動建立不同 PV,是不是超級麻煩?

這時候,StorageClass 就像一個「存儲資源模板 (Template)」,幫你定義存儲的類型與參數。應用程式只需要在 PVC 裡指定「我要哪種 StorageClass」,Kubernetes 就會自動幫你生出對應的 PV,完全不用人工介入。

StorageClass 的重要欄位

StorageClass 其實就是一份 YAML,常見欄位如下:
provisioner:指定由誰負責建立 PV,例如:

  • kubernetes.io/aws-ebs → AWS EBS
  • kubernetes.io/gce-pd → GCP Persistent Disk
  • kubernetes.io/azure-disk → Azure Disk
  • csi.driver.name → 各種 CSI Driver(Ceph、Longhorn、NFS…)
    parameters:指定細節參數,例如磁碟類型(gp3、premium-lrs)。
    reclaimPolicy:回收策略
  • Delete → PVC 刪掉,PV 與底層磁碟一併刪除。
  • Retain → PVC 刪掉,PV 保留,資料不會被刪。
    volumeBindingMode:資源綁定策略
  • Immediate → 立刻分配
  • WaitForFirstConsumer → 等有 Pod 需要時才分配(避免錯誤的區域配置)。

動態供應 (Dynamic Provisioning)

我們來對比一下:
靜態供應 (Static Provisioning):

  1. 管理員手動建立 PV。
  2. 應用程式提出 PVC。
  3. PVC 綁定到符合的 PV。

動態供應 (Dynamic Provisioning):

  1. 管理員建立 StorageClass。
  2. 應用程式提出 PVC,並指定 StorageClass。
  3. Kubernetes 自動生成 PV,並綁定到 PVC。

範例實作

以下用 AWS EBS 當例子(其他雲或本地環境概念相同)。

Step 1. 建立 StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp3
  fsType: ext4
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

Step 2. 建立 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: demo-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: fast-storage

Step 3. 建立 Pod 使用 PVC

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
spec:
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: storage
  volumes:
    - name: storage
      persistentVolumeClaim:
        claimName: demo-pvc

Step 4. 驗證

kubectl get pvc
kubectl get pv

結果你會發現:PVC 一建立,Kubernetes 就幫你動態創建了對應的 PV(EBS 磁碟也會在 AWS 上生成)。

實務應用場景

  • 雲端平台:AWS、GCP、Azure 都有對應的 StorageClass。
  • 私有環境:可透過 CSI Driver 搭配 NFS、Ceph、Rook、Longhorn 等方案。
  • DevOps Workflow:
    • 減少人工作業,讓 CI/CD pipeline 自動幫應用分配存儲。
    • 減少資源浪費,搭配 WaitForFirstConsumer。

最佳實務建議

  1. 多 StorageClass 管理:為不同需求建立多個 StorageClass,例如 fast-ssd、standard-hdd。
  2. 注意 reclaimPolicy:開發測試環境用 Delete,正式環境建議 Retain。
  3. 搭配 Helm:可以把 PVC 與 StorageClass 設定放進 Helm chart,讓應用程式一鍵部署帶有專屬的存儲策略。

結語

今天我們介紹了 StorageClass 與動態供應,讓 Kubernetes 的存儲資源也能自動化管理。

  • 從昨天的 PV/PVC 靜態供應 → 進化到今天的動態供應。
  • 下一步,我們要走向更高層次的管理:Helm!
    我們會學會如何用 chart 封裝這些設定,讓部署與存儲管理更加一致。

👉 明天見!Day 21:Helm 基礎:使用 chart 管理應用


上一篇
Day 19: PersistentVolume (PV) 與 PersistentVolumeClaim (PVC):持久化儲存
下一篇
Day 21: Helm 基礎:使用 Chart 管理應用
系列文
新創視角下的 DevOps × AI 探索22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言