第 7 章:為 Pods 建立 Storage
Volume 卷
容器中的文件在磁碟上是暫時存放的,這會為在容器中執行較重要的應用程式帶來一些問題。 當容器崩潰或停止時會出現一個問題。 此時容器狀態未儲存, 因此在容器生命週期內建立或修改的所有檔案都會遺失。 在崩潰期間,kubelet 會以乾淨的狀態重新啟動容器。 當多個容器在一個 Pod 中運作並且需要共用檔案時,會出現另一個問題。 跨所有容器設定和存取共用檔案系統具有一定的挑戰性
Volume 卷兩大分類
Volume 非持久化的存儲
- 只是為了一個 Pod 中的多個 container 之間可以共享數據,它具有和 pod 相同的生命週期
Persistent Volume 持久化的存儲
- 能夠將資料進行持久化儲存的一種資源對象,生命週期與 Pod 無關,因此 PersistentVolume 不應該依附於任何一個宿主機節點,否則必然會對Pod 調度產生限制
使用 Persistent Volumes 持久化的存儲
Static Provisionling Workflow
- 建立 PersistentVolume
- 由 Cluster 管理者建立
- 建立 PersistentVolumeClaim
- 由 pod 使用者申請使用 PersistentVolume
- 在 Pod 中的定義 PersistentVolumeClaim 來使用 Persistent Volume
建立 PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs
spec:
capacity:
storage: 4Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: 192.168.56.20
path: "/export/volumes/pod
建立 PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nfs
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
- 宣告事項
- Size
- Access mode ( Node 層級設定 )
ReadWriteOnce
:通過單一節點以 read-write 方式掛載ReadWriteMany
:通過多節點以 read-write 方式掛載ReadOnlyMany
:通過多節點以 read-only 模式掛載
- Storage Class
在 Pod 中的定義 PersistentVolumeClaim 來使用 Persistent Volume
根據 PVC 的 request 和 PV 的 properties,將最合適的 PV 及 PVC 結合起來
apiVersion: apps/v1
kind: Deployment
spec:
volumes:
- name: webcontent
persistentVolumeClaim:
claimName: pvc-nfs