
圖來自 stackoverflow
在之前的文章中有寫到在宿主機上設置目錄和檔案的方式來儲存資料,但這可能會造成一個問題:配置文件中的 path 必須寫死,即造成了「耦合」的現象發生,為了解耦,K8s 自 1.0 版變發佈了儲存體的抽象資源類型:PV 和 PVC (不是聚氯乙烯)
為了解決 pod 和實體 volume 的耦合,K8s 將儲存直接設定路徑拆分成兩個部分:PV,Persistent Volume,定義物理機上的儲存體設定資訊,以及 PVC,Persistent Volume Claim,定義儲存的需求(如容量等等),兩份設定檔分別由管理員和開發者維護,Container 的部分只需要呼叫需要的 PVC 不需要去思考實體路徑的問題,PVC 便會找到適合的 PV 作為儲存體。
所以PV和PVC到底是啥呢 OwO
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: 172.17.0.2
以上為自官方doc的一個範例,除了基本的 apiVersion、kind 的部分外,在spec的部分就是PV需要設定的東西
capacity:因為 PV 設定檔是實際上會跟硬體層接觸的部分,因此也會需要跟硬體層指定一個大小volumeMode:有兩個選項可選
FileSystem (預設):PV 會以檔案系統的形式掛載至容器(pod)中Block:PV 會以 block device 的形式掛載accessModes:讀寫權限的設置,有 ReadWriteOnce、ReadOnlyOnce、ReadWriteMany、ReadWriteOncePod等選項(註)persistentVolumeReclaimPolicy:PV的回收機制,有Retain、Recycle、Delete三個選項(註)mountOptions:掛載的參數註:因為儲存體的種類不同,故文件內容可能會因機(?)而異,不同的雲端平台也可能有不同的 attributes
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 8Gi
storageClassName: slow
selector:
matchLabels:
release: "stable"
matchExpressions:
- {key: environment, operator: In, values: [dev]}
PVC的內容與PV大致相同,以下為PVC特有的部分:
resources:請求的資源,在這裡就是指定大小selector:在這裡一樣可以利用selector對label進行篩選,matchLabels、matchExpression皆可使用以上就是PV和PVC配置文件的大略,明天將會來介紹PV和PVC的配置原理,以及Storage Class配合的部分
k8s中的PV和PVC理解 - LiZ的博客 (boilingfrog.github.io)
Persistent Volumes | Kubernetes