昨天有講到 PV 配置給 PVC 的方式有兩種,靜態配置和動態配置,然後講到StorageClass只放上了一張圖就沒了,因此今天先補補 StorageClass 的東東吧
一樣先上圖:
StorageClass 為對於儲存資源的抽象定義,為管理員提供一種描述存儲類別 Class的方法,對不同的儲存類別,配置不同的儲存體設置;對於動態配置的策略,K8s 會直接依據 StorageClass設置內容進行PV的配置,而靜態配置則是會在可用的PV已耗盡之後才會依據StoageClass進行配置(若有配置Storage的話)
StorageClass 中包含provisioner
(資源提供者)、parameters
(後端儲存的參數)、reclaimPolicy
(回收機制),概念跟 PV 的設置基本上非常類似;在這裡有個地方要特別注意,就是 StorageClass 的物件名稱非常重要,因為這是使用者建立 PVC 時的引用項目,如果已經利用 StorageClass 設置好 PV,若之後需要更新資料唯一的方式就是刪除 StorageClass 再重來。
以下是一個StorageClass的YAML
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
- debug
volumeBindingMode: Immediate
Provisioner 設置的內容即是儲存體資源的提供者,可將其看成後端儲存的驅動,當前K8s支援的 provisioner
包含AWS, Azure, GCE等,詳情可以看k8s官網的表列
K8s 內建的 provisioner名稱皆以 kubernetes.io
開頭,當然開發者也可以依據自己的需求採用第三方元件或是自己製作元件。官方也有host 一個github來存放這些provisioner的資訊:Github、一些外部的provisioner則是列在另一個 repo
在parameter區塊,可以定義後端儲存的參數
作用跟PV設置文件一模一樣,可以為由StorageClass建立的PV訂定回收策略,但只有Delete
和Retained
兩個選項,且預設為Delete
若為管理員手動建立、後由StorageClass管理的PV,會保留其在建立的時候的回收策略
PV 可以被設定為允許擴充,當此欄位被設定成true的時候,將允許使用者透過編輯PVC的儲存空間自動完成PV的擴充。