昨天我們提到了 K8s 為了解決 volume 和實際硬體裝置設置的過於耦合的解決方案 - PV 和 PVC,PV 由管理者管理,配置實際硬體上的儲存空間、實際路徑等,PVC 則由開發者配置需要的空間等,讓開發者可以專注在容器的運行本身,不需要去管硬體的設置文件要怎麼寫、路徑該怎麼設,也讓 Container 移機使用的彈性更高。今天的主題要來談談 PV 和 PVC 的生命週期,以及另一個設定動態配置時會需要用到的StorageClass
Volume 生命週期包含五個階段-Provisioning
、Binding
、Using
、Releasing
(、Deleting
)
provisioning,為 PV 創建的階段,有靜態和動態兩種方式,最後的結果就是 PV 和 PVC 成功配對
叢集管理員預先創建許多PV,PVC與這些預先創建的PV進行配對
不需要預先建立 PVC ,當使用者透過建立 PVC 向儲存類型進行申請時,系統會透過 StorageClass 的設定內容配置相對應的 PV,並與 PVC 綁定
使用者建立 PVC 之後,系統會找尋適當的 PV 和其綁定,綁定之後 container便可以使用這個volume,且此PV 和 PVC 為1對1的綁定關係,PV 為這個 PVC 獨佔
pod 需要使用儲存資源時,須在volume的定義中引用 PVC 的部分,將 PVC 掛載到容器的特定路徑做使用
PV、PVC 為獨立於 pod 的資源,可以單獨被刪除,因此,在做刪除行為時,系統會檢測當前的儲存資源是否有被使用,若有的話會保護 PV、PVC 不在邊運行的時候被刪除,具體機制是將刪除操作延遲執行,因此若對執行中的 PVC 和 PV 執行刪除指令,PV 和 PVC 的狀態會被設為Terminating
,Finalizer 也會被系統設為kubernetes.io/pvc-protection
,當 pod 被刪除後才會對 PVC 進行刪除,接著才輪到 PV
當儲存資源使用完畢之後,即可刪除 PVC,與其綁定的 PV 狀態會被轉為 Released
,因資料內容可能還需要進行處理,待處理完成後才可以再和其他PVC進行綁定,管理員也可以設定資料處理的政策,有Retain
、Delete
、Recycle
三個選項
Released
,需管理員手動刪除資料後此PV才可以給其他PVC使用Recycle
(棄用):執行rm -rf /path/to/volume
PV、PVC 的使用大致上就是這樣!明天來講講load balance?