動態磁碟區佈建
動態磁碟區佈建允許隨需建立儲存磁碟區。如果沒有動態佈建,叢集管理員必須手動呼叫其雲端或儲存提供者以建立新的儲存磁碟區,然後建立 PersistentVolume
物件 以在 Kubernetes 中表示它們。動態佈建功能消除了叢集管理員預先佈建儲存空間的需求。相反地,當使用者建立 PersistentVolumeClaim
物件 時,它會自動佈建儲存空間。
背景
動態磁碟區佈建的實作是基於 API 群組 storage.k8s.io
中的 API 物件 StorageClass
。叢集管理員可以根據需要定義任意數量的 StorageClass
物件,每個物件都指定一個磁碟區外掛程式(也稱為佈建器),該外掛程式佈建磁碟區以及要在佈建時傳遞給該佈建器的一組參數。叢集管理員可以在叢集中定義和公開多種儲存類型(來自相同或不同的儲存系統),每種儲存類型都具有自訂的參數集。此設計還確保最終使用者不必擔心儲存佈建方式的複雜性和細微之處,但仍然能夠從多個儲存選項中進行選擇。
有關儲存類別的更多資訊,請參閱此處。
啟用動態佈建
為了啟用動態佈建,叢集管理員需要為使用者預先建立一個或多個 StorageClass 物件。StorageClass 物件定義了當動態佈建被調用時,應該使用哪個佈建器以及應該將哪些參數傳遞給該佈建器。StorageClass 物件的名稱必須是有效的 DNS 子網域名稱。
以下的 Manifest 建立了一個名為 "slow" 的儲存類別 (Storage Class),此類別佈建標準的磁碟型永久磁碟。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
以下的 Manifest 建立了一個名為 "fast" 的儲存類別 (Storage Class),此類別佈建類似 SSD 的永久磁碟。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
使用動態佈建
使用者透過在其 PersistentVolumeClaim
中包含儲存類別 (Storage Class) 來請求動態佈建的儲存空間。在 Kubernetes v1.6 之前,這是透過 volume.beta.kubernetes.io/storage-class
註釋完成的。然而,此註釋自 v1.9 起已被棄用。使用者現在可以而且應該改用 PersistentVolumeClaim
物件的 storageClassName
欄位。此欄位的值必須與管理員設定的 StorageClass
名稱相符(請參閱下方的 啟用動態佈建)。
例如,若要選擇 "fast" 儲存類別 (Storage Class),使用者將建立以下 PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim1
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast
resources:
requests:
storage: 30Gi
這個宣告 (Claim) 會自動佈建一個類似 SSD 的永久磁碟。當宣告 (Claim) 被刪除時,磁碟區 (Volume) 也會被銷毀。
預設行為
叢集可以啟用動態佈建,以便在未指定儲存類別 (Storage Class) 的情況下,所有宣告 (Claim) 都會被動態佈建。叢集管理員可以透過以下方式啟用此行為:
- 將一個
StorageClass
物件標記為預設; - 確保在 API 伺服器上已啟用
DefaultStorageClass
准入控制器。
管理員可以透過將 storageclass.kubernetes.io/is-default-class
註釋新增至特定的 StorageClass
來將其標記為預設。當叢集中存在預設的 StorageClass
,且使用者建立一個未指定 storageClassName
的 PersistentVolumeClaim
時,DefaultStorageClass
准入控制器會自動新增指向預設儲存類別 (Storage Class) 的 storageClassName
欄位。
請注意,如果您在叢集中多個 StorageClass 上將 storageclass.kubernetes.io/is-default-class
註釋設定為 true,然後您建立一個未設定 storageClassName
的 PersistentVolumeClaim
,Kubernetes 將會使用最近建立的預設 StorageClass。
拓撲感知
在 多可用區 叢集中,Pod 可以分散在同一區域 (Region) 的不同可用區 (Zone) 中。單一可用區的儲存後端應在 Pod 排程所在的可用區中佈建。這可以透過設定磁碟區綁定模式 (Volume Binding Mode) 來完成。