天天看點

Kubernetes必備知識:PersistentVolume

所屬技術領域:

K8s

|名詞定義|

PersistentVolume(PV)用于為使用者和管理者提供如何提供和消費存儲的API,PV由管理者在叢集中提供的存儲。它就像Node一樣是叢集中的一種資源。PersistentVolume 也是和存儲卷一樣的一種插件,但其有着自己獨立的生命周期。PersistentVolumeClaim (PVC)是使用者對存儲的請求,類似于Pod消費Node資源,PVC消費PV資源。Pod能夠請求特定的資源(CPU和記憶體),聲明請求特定的存儲大小和通路模式。PV是一個系統的資源,是以沒有所屬的命名空間。

|技術特點|

 為什麼又要引入 PV 呢?

我們知道 pod 中聲明的 volume 生命周期與 pod 是相同的,以下有幾種常見的場景:

1.pod 銷毀重建(如Deployment管理的Pod鏡像更新)

2.主控端故障遷移(如StatefulSet管理的Pod帶遠端volume遷移)

3.多個 pod共享一個資料volume

4.資料volume snapshot,resize等功能的擴充實作

以上場景中,通過 Pod Volumes 很難準确地表達它的複用/共享語義,對它的擴充也比較困難。是以 K8s 中又引入了 Persistent Volumes 概念,它可以将存儲和計算分離,通過不同的元件來管理存儲資源和計算資源,然後解耦 pod 和 Volume 之間生命周期的關聯。這樣,當把 pod 删除之後,它使用的 PV 仍然存在,還可以被建立的 pod 複用。

 PV對象的産生

1.Static Volume Provisioning

靜态 Provisioning:由叢集管理者事先去規劃這個叢集中的使用者會怎樣使用存儲,它會先預配置設定一些存儲,也就是預先建立一些 PV;然後使用者在送出自己的存儲需求(也就是 PVC)的時候,K8s 内部相關元件會幫助它把 PVC 和 PV 做綁定;之後使用者再通過 pod 去使用存儲的時候,就可以通過 PVC 找到相應的 PV,它就可以使用了。

2.Dynamic Volume Provisioning

動态供給是什麼意思呢?就是說現在叢集管理者不預配置設定 PV,他寫了一個模闆檔案,這個模闆檔案是用來表示建立某一類型存儲(塊存儲,檔案存儲等)所需的一些參數,這些參數是使用者不關心的,給存儲本身實作有關的參數。使用者隻需要送出自身的存儲需求,也就是 PVC 檔案,并在 PVC 中指定使用的存儲模闆(StorageClass)。

 PV Spec 重要字段解析

Capacity:存儲總空間;

AccessModes:也是使用者需要關心的,就是說我使用這個 PV 的方式。它有三種使用方式。

 ReadWriteOnce隻允許單 node 通路;

 ReadOnlyMany允許多個node隻讀通路

 ReadWriteMany允許多node讀寫通路

一個PV可以設定多個通路政策,PVC與PV bound時,PV Controller會優先找到AccessModes清單最短并且比對PVC AccessModes清單的PV集合,然後從該集合中找到Capacity最小且最符合PVC size需求的PV對象。

PersistentVolumeReclaimPolicy:PV被release之後(與之bound的PVC被删除)回收再利用政策

 Recycle(已廢棄)

 Delete:volume被released之後直接delete,需要volume plugin支援

 Retain:預設政策,由系統管理者來手動管理該volume

StorageClassName:PVC可通過該字段找到相同值的字段的PV(靜态provisioning),也可通過該字段對應的storageclass進而動态provisioning新PV對象PVC

NodeAffinity:限制可以通路該volume的nodes,對使用該volume的pod的排程有影響(因為使用該volume的pod隻能排程能通路該PV的node上才能正常工作)

|資料來源|

名詞定義:

https://blog.csdn.net/bbwangj/article/details/82355337