存储类(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
volumeExpandAutoSnapshot: "forced" # 该设置仅在创建的云盘类型为cloud_essd时生效。
provisionedIops: "40000"
burstingEnabled: "false"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
主要参数说明
参数 | 说明 | |
| 存储资源提供商。此处必须配置为 | |
| 参见下方Parameters参数说明。 | |
| 云盘的回收策略,默认为
如果数据安全性要求高,推荐使用 | |
| 配置为 | |
| 云盘的绑定模式。默认为
|
Parameters参数说明
参数 | 是否必选 | 说明 |
| 是 | 云盘类型。默认参数type的值为cloud_essd,支持设置的参数值如下:
以上参数可任意组合,例如 |
| 否 | 自动创建云盘所使用的文件系统,取值 |
| 否 | 云盘格式化所用的参数。例如 |
| 否 | 自定义云盘标签。例如 |
| 否 | 表示创建的云盘是否加密。默认为 |
| 否 | ESSD云盘的性能级别,取值 |
| 否 | 云盘扩容时通过快照实现自动数据备份,保证数据安全,默认为
如果数据安全性要求高,推荐使用 说明
|
| 否 | 云盘的预配置性能(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-