儲存類(StorageClass)可以提供動態分配儲存卷的能力,阿里雲CSI外掛程式會自動根據該儲存類建立相應的儲存卷PV。您可以在建立儲存聲明PVC時,指定StorageClassName自動建立PV及底層儲存,減少了建立和維護PV的工作量。
StorageClass介紹
StorageClass用於定義儲存的類別,您可以為其設定不同的參數,使儲存資源能夠根據需求自動供應和調整。
Container Service for Kubernetes預設提供了以下幾種StorageClass模板,請根據雲端硬碟選型確認所需的雲端硬碟類型,從而選擇合適的StorageClass。關於雲端硬碟類型和ECS執行個體類型的匹配關係,請參見執行個體規格類型系列。
StorageClass | 匹配的雲端硬碟類型 | 說明 |
alicloud-disk-efficiency | 上一代雲端硬碟 | |
alicloud-disk-ssd | 上一代雲端硬碟 | |
alicloud-disk-essd | 通過該StorageClass預設建立的為PL1層級的ESSD雲端硬碟。 | |
alicloud-disk-topology-alltype | 提供高可用選項,優先建立ESSD雲端硬碟。
| 多可用性區域情境推薦 |
可用性區域規則說明
通過StorageClass建立雲端硬碟時,可用性區域選擇規則如下:
配置
volumeBindingMode: WaitForFirstConsumer
時,則首個使用PVC的Pod所在可用性區域為建立雲端硬碟的可用性區域。配置
volumeBindingMode: Immediate
,且配置zoneId
參數(一個可用性區域)時,則選擇此可用性區域為建立雲端硬碟的可用性區域。配置
volumeBindingMode: Immediate
,且配置zoneId
參數(多個可用性區域)時,則每次選擇輪詢配置的多個可用性區域中的一個作為建立雲端硬碟的可用性區域。
綜上,如果您是多可用性區域叢集,推薦您使用WaitForFirstConsumer
模式的StorageClass。您可以根據所需雲端硬碟類型自行建立StorageClass。如果您需要在多可用性區域部署儲存資源,請參見儲存多可用性區域部署的推薦配置。
StorageClass YAML樣本
如果以上StorageClass不能滿足需求,您也可以根據以下模板自行建立StorageClass。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-topology-alltype
provisioner: diskplugin.csi.alibabacloud.com
parameters:
type: cloud_essd,cloud_ssd,cloud_efficiency
fstype: ext4
diskTags: "a:b,b:c"
encrypted: "false"
performanceLevel: PL1
provisionedIops: "40000"
burstingEnabled: "false"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
主要參數說明
參數 | 說明 | |
| 儲存資源供應商。此處必須配置為 | |
| 參見下方Parameters參數說明。 | |
| 雲端硬碟的回收策略,預設為
如果資料安全性要求高,推薦使用 | |
| 配置為 | |
| 雲端硬碟的繫結模式。預設為
|
Parameters參數說明
參數 | 是否必選 | 說明 |
| 是 | 雲端硬碟類型。預設參數type的值為cloud_essd,支援設定的參數值如下:
以上參數可任意組合,例如 |
| 否 | 自動建立雲端硬碟所使用的檔案系統,取值 |
| 否 | 雲端硬碟格式化所用的參數。例如 |
| 否 | 自訂雲端硬碟標籤。例如 |
| 否 | 表示建立的雲端硬碟是否加密。預設為 |
| 否 | ESSD雲端硬碟的效能層級,取值 |
| 否 | 說明 該參數自CSI組件的1.31.4版本起已廢棄使用。 雲端硬碟擴容時通過快照實現自動資料備份。 |
| 否 | 雲端硬碟的預配置效能(IOPS)。 可能值:0~min{50,000, 1000×容量-基準效能}。 基準效能=min{1,800+50×容量, 50000}。 說明 該參數僅支援ESSD AutoPL雲端硬碟。更多資訊,請參見ESSD AutoPL雲端硬碟規格。 |
| 否 | 是否開啟Burst(效能突發)。預設為false。
說明 該參數僅支援ESSD AutoPL雲端硬碟。更多資訊,請參見ESSD AutoPL雲端硬碟規格。 |
| 否 | 設定為 |
計費說明
StorageClass本身不收費,通過儲存類自動建立出的雲端硬碟按照隨用隨付的雲端硬碟進行計費。關於雲端硬碟計費,請參見計費說明。
使用StorageClass
您可以在建立PVC時,指定所需的儲存卷的大小,並指定StorageClassName來選擇所需的StorageClass來建立儲存卷。如果您沒有在PVC中指定StorageClassName,您也可以通過配置預設StorageClass來建立儲存卷。
使用指定的StorageClass
建立PVC時,指定StorageClassName選擇所需使用的StorageClass,即可自動建立對應類型PV,並自動建立底層的儲存資源。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: disk-pvc
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 20Gi #申請雲端硬碟儲存卷的大小。
storageClassName: alicloud-disk-topology-alltype #指定使用哪一個StorageClass。
使用預設StorageClass
Kubernetes提供預設StorageClass機制,在PVC未指定StorageClassName的情況下,您可以通過預設StorageClass建立儲存卷。更多資訊,請參見Default StorageClass。
由於預設StorageClass會對所有PVC起作用,對於具備不同類型儲存卷能力的叢集,需謹慎使用。例如,您想產生一個NAS類型PVC、PV,並綁定PVC和PV,但可能因為有預設StorageClass而自動建立了雲端硬碟PV。ACK叢集沒有提供預設StorageClass,如果您期望使用預設StorageClass,可以參考以下配置。
配置預設StorageClass。
執行以下命令將StorageClass(alicloud-disk-topology-alltype)配置為一個預設StorageClass。
說明此處以alicloud-disk-topology-alltype為例進行說明,
kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class=true
此時,查詢叢集中的StorageClass可以看到alicloud-disk-topology-alltype名字後面加了(default)字樣。
kubectl get sc
返回結果如下:
NAME PROVISIONER AGE alicloud-disk-topology-alltype (default) diskplugin.csi.alibabacloud.com 96m
使用預設StorageClass。
使用以下模板建立一個沒有配置StorageClass的PVC。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
叢集會自動建立一個雲端硬碟儲存卷(PV),且配置了預設StorageClass(alicloud-disk-topology-alltype)。
kubectl get pvc
返回結果如下:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-pvc Bound d-bp18pbai447qverm**** 20Gi RWO alicloud-disk-topology-alltype 49s
您可以通過以下命令取消預設儲存類型的配置。
kubectl annotate storageclass alicloud-disk-topology-alltype storageclass.kubernetes.io/is-default-class-