2021/05/06
Container 的硬碟空間是短暫的,會隨著 Container 生命週期結束而跟著消失。因此如果我們要保存 Container 裡面的資料,就需要創立一個獨立空間,讓 Pod 中的 Container 即便因為某些因素而 crash,資料仍可以完整的被保存下來。 另一個相關應用是,如果要在 Kubernetes 裡面建立資料庫系統,並且 Replicas 大於1個的話,問題會是兩個 Pod 各自的 Container 裡面,存放各自的 Database file,理論上應該存取同一份 Database file。因此就需要一個獨立於 Pod 之外的空間去存放資料,也就是本文要介紹的 Persistent Volume。
Persistent volume(以下簡稱 PV)是一個在 Kubernetes 中提供一串儲存區的虛擬化物件
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: /tmp
在 PV 中包含多種 Volume Type:
hostPath
使用 hostPath
可以指定一個 Node 的目錄掛載到 Pod 中使用,即便 Pod 被刪除,該目錄的內容也都會存在。相對的, hostPath
形態的 Volume 也可以從 Node 掛載一個檔案或者目錄到 Pod。gcePersistentDisk
支援 Google Compute Engine(GCE)上的磁碟awsElasticBlockStore
支援 Amazon Web Service(AWS)中的 EBS VolumeazureDisk
支援 Microsoft Azure 中的 Data DiskAccess Modes 有三種
ReadWriteOnce
:只能在同一個 Node 下讀寫ReadOnlyMany
:多個 Node 可以唯讀ReadWriteMany
:多個 Node 可以讀寫<aside> 💡 Access modes 會受到儲存區的限制。例如: GCE 不支援 Disk 被多個 Node 掛載為 read/write 模式。
</aside>
PV 有四種狀態