在 Kubernetes 中,持久化儲存是保證應用資料不丟失的關鍵。這篇文章將帶你了解 Kubernetes 中的 Volume、PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 這些核心概念,以及如何設定和管理它們。
Volume 的作用
Volume 的設計目的是解決容器臨時儲存的問題,提供資料持久化支援,即使容器重啟,資料也不會丟失。除此之外,Volume 還允許在同一個 Pod 中的多個容器之間共享資料。
Volume 的類型
Kubernetes 支援多種 Volume 類型,每種都有不同的用途:
下圖展示了在 Kubernetes 中,Pod 中的容器如何透過掛載 Volume 來實現資料共享與持久化:
圖解說明:Pod 中的容器通過將 /var/dir
這個路徑掛載到指定的 Volume 上,實現資料的持久化儲存和容器間資料的共享。這種 Volume 可以是多種形式,如 emptyDir
、hostPath
等,適合不同場景的需求。這樣即使容器重啟,Volume 中的資料依然保持不變。
以下是一個使用 emptyDir
Volume 的範例:
apiVersion: v1
kind: Pod
metadata:
name: emptydir-pod
spec:
containers:
- name: busybox
image: busybox
command: [ "sh", "-c", "sleep 3600" ]
volumeMounts:
- name: shared-storage
mountPath: /usr/share/busybox
volumes:
- name: shared-storage
emptyDir: {}
這個範例展示了當 Pod 被刪除時,emptyDir
的資料將一併清除。這類 Volume 適合於需要臨時儲存資料的場景。
在需要持久化儲存的情況下,Kubernetes 提供了 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 來滿足需求。
下圖展示了如何透過 PVC 綁定 PV 並在 Pod 中使用:
圖解說明:Pod 中的容器透過掛載 Volume 來存取資料,但這次使用的是一個通過 PVC 綁定的 PV。PVC 作為用戶對儲存資源的請求,當成功綁定 PV 後,Pod 就能夠持久化地使用這些儲存資源。這種架構能夠確保資料即使在 Pod 被刪除或重新部署後依然存在,適合長期保存資料的應用場景。
1. 創建 PersistentVolume
以下是一個 NFS PersistentVolume 的範例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
path: /mnt/data
server: nfs-server.example.com
使用指令創建 PV:
kubectl apply -f nfs-pv.yaml
2. 創建 PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
創建 PVC:
kubectl apply -f nfs-pvc.yaml
3. 在 Pod 中使用 PersistentVolumeClaim
apiVersion: v1
kind: Pod
metadata:
name: pvc-pod
spec:
containers:
- name: busybox
image: busybox
command: [ "sh", "-c", "sleep 3600" ]
volumeMounts:
- name: nfs-storage
mountPath: /usr/share/busybox
volumes:
- name: nfs-storage
persistentVolumeClaim:
claimName: nfs-pvc
這個範例展示了如何在 Pod 中掛載 PVC,以便持久化應用資料。
可以使用以下指令查看現有的 PV 和 PVC:
kubectl get pv
kubectl get pvc
如果需要修改 PV 或 PVC,可以使用以下指令進行編輯:
kubectl edit pv nfs-pv
kubectl edit pvc nfs-pvc
通過這篇文章,我們了解了 Kubernetes 中 Volume、PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 的基本概念和使用方式,並學會了如何創建和管理這些儲存資源。這些知識不僅幫助我們在 Kubernetes 中更好地處理資料持久化需求,還能提升應用的可用性。
在接下來的學習中,我們將深入探討 Storage Class,學習如何在 Kubernetes 中進行動態儲存設定。這些內容將使你更全面地掌握 Kubernetes 的儲存策略,進一步提升操作能力。