昨天我們談到 PersistentVolume (PV) 與 PersistentVolumeClaim (PVC),解釋了 Kubernetes 如何透過這兩者建立「應用程式與底層存儲」的橋樑。不過昨天的案例是 靜態供應 (Static Provisioning),需要先手動建立 PV 才能綁定 PVC。
問題來了:
在雲端或 CI/CD 環境裡,如果每個應用都要我們人工去建立 PV,那還叫「雲端自動化」嗎?
今天就來看看 StorageClass 與動態供應 (Dynamic Provisioning),如何讓存儲也能自動化!
假設你是雲端工程師,應用 A 想要 SSD 磁碟,應用 B 想要 HDD 磁碟,應用 C 想要高 IOPS 的 Premium SSD。如果每次都要你手動建立不同 PV,是不是超級麻煩?
這時候,StorageClass 就像一個「存儲資源模板 (Template)」,幫你定義存儲的類型與參數。應用程式只需要在 PVC 裡指定「我要哪種 StorageClass」,Kubernetes 就會自動幫你生出對應的 PV,完全不用人工介入。
StorageClass 其實就是一份 YAML,常見欄位如下:provisioner
:指定由誰負責建立 PV,例如:
parameters
:指定細節參數,例如磁碟類型(gp3、premium-lrs)。reclaimPolicy
:回收策略volumeBindingMode
:資源綁定策略我們來對比一下:
靜態供應 (Static Provisioning):
動態供應 (Dynamic Provisioning):
以下用 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 上生成)。
今天我們介紹了 StorageClass 與動態供應,讓 Kubernetes 的存儲資源也能自動化管理。
👉 明天見!Day 21:Helm 基礎:使用 chart 管理應用