存儲類(StorageClass)可以提供動態分配存儲卷的能力,阿里云CSI插件會自動根據該存儲類創建相應的存儲卷PV。您可以在創建存儲聲明PVC時,指定StorageClassName自動創建PV及底層存儲,減少了創建和維護PV的工作量。
StorageClass介紹
StorageClass用于定義存儲的類別,您可以為其設置不同的參數,使存儲資源能夠根據需求自動供應和調整。
容器服務 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-