全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:存储类(StorageClass)

更新时间:Aug 22, 2024

存储类(StorageClass)可以提供动态分配存储卷的能力,阿里云CSI插件会自动根据该存储类创建相应的存储卷PV。您可以在创建存储声明PVC时,指定StorageClassName自动创建PV及底层存储,减少了创建和维护PV的工作量。

StorageClass介绍

StorageClass用于定义存储的类别,您可以为其设置不同的参数,使存储资源能够根据需求自动供应和调整。

容器服务 Kubernetes 版默认提供了以下几种StorageClass模板,请根据云盘选型确认所需的云盘类型,从而选择合适的StorageClass。关于云盘类型和ECS实例类型的匹配关系,请参见实例规格族

StorageClass

匹配的云盘类型

说明

alicloud-disk-efficiency

高效云盘

上一代云盘

alicloud-disk-ssd

SSD云盘

上一代云盘

alicloud-disk-essd

ESSD云盘

通过该StorageClass默认创建的为PL1级别的ESSD云盘。

alicloud-disk-topology-alltype

提供高可用选项,优先创建ESSD云盘。

  • 如果ESSD云盘售尽或当前节点不支持ESSD云盘,则尝试创建SSD云盘。

  • 如果SSD云盘售尽或当前节点不支持SSD云盘,则尝试创建高效云盘。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-disk-topology-alltype
    parameters:
      type: cloud_essd,cloud_ssd,cloud_efficiency
    provisioner: diskplugin.csi.alibabacloud.com
    reclaimPolicy: Delete
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer

多可用区场景推荐

可用区规则说明

通过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  

主要参数说明

参数

说明

provisioner

存储资源提供商。此处必须配置为diskplugin.csi.alibabacloud.com,表示使用阿里云云盘Provisioner插件创建StorageClass。

parameters

参见下方Parameters参数说明

reclaimPolicy

云盘的回收策略,默认为Delete,支持Retain

  • Delete:删除PVC时,PV和云盘会一起删除。

  • Retain:删除PVC时,PV和云盘数据不会被删除,需要您手动删除。

如果数据安全性要求高,推荐使用Retain方式,以免误删数据。

allowVolumeExpansion

配置为true时,可以实现云盘的自动扩容。

volumeBindingMode

云盘的绑定模式。默认为Immediate,支持WaitForFirstConsumer

  • Immediate:表示先创建云盘再调度Pod。

  • WaitForFirstConsumer:延迟绑定,即调度器先调度Pod,并根据Pod的可用区信息创建云盘。

Parameters参数说明

参数

是否必选

说明

type

云盘类型。默认参数type的值为cloud_essd,支持设置的参数值如下:

  • 高效云盘cloud_efficiency

  • ESSD AutoPLcloud_auto

  • SSD云盘cloud_ssd

  • ESSD云盘cloud_essd

  • ESSD Entrycloud_essd_entry

以上参数可任意组合,例如type: cloud_efficiency, cloud_ssd, cloud_essd,此配置方式会支持对指定类型的云盘依次创建,直到创建成功。

fstype

自动创建云盘所使用的文件系统,取值ext4xfs,默认为ext4

mkfsOptions

云盘格式化所用的参数。例如mkfsOptions: "-O project,quota"

diskTags

自定义云盘标签。例如diskTags: "a:b,b:c"。支持使用diskTags/a: b的格式指定(v1.30.3起)。

encrypted

表示创建的云盘是否加密。默认为false,创建的云盘不加密。

performanceLevel

ESSD云盘的性能级别,取值PL0PL1PL2PL3。默认值为PL1。更多信息,请参见容量范围与性能级别的关系

volumeExpandAutoSnapshot

云盘扩容时通过快照实现自动数据备份,保证数据安全,默认为closed

  • forced:自动快照创建失败时放弃云盘扩容。

  • besteffort:自动快照创建失败时报event warning,继续进行云盘扩容。

  • closed:不使用自动快照功能。

如果数据安全性要求高,推荐使用forced方式避免扩容失败时的数据丢失。

说明
  • 仅会对支持快照极速可用的云盘创建快照。扩容正常时,自动快照将自动删除;扩容失败时,自动快照将保留24小时。

  • 快照的计费信息,请参见快照计费

provisionedIops

云盘的预配置性能(IOPS)。

可能值:0~min{50,000, 1000×容量-基准性能}。

基准性能=min{1,800+50×容量, 50000}。

说明

该参数仅支持ESSD AutoPL云盘。更多信息,请参见ESSD AutoPL云盘规格

burstingEnabled

是否开启Burst(性能突发)。默认为false。

  • true:开启。

  • false:不开启。

说明

该参数仅支持ESSD AutoPL云盘。更多信息,请参见ESSD AutoPL云盘规格

multiAttach

设置为true以开启多实例挂载,请参见云盘多重挂载功能

计费说明

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,可以参考以下配置。

  1. 配置默认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
  2. 使用默认StorageClass。

    1. 使用以下模板创建一个没有配置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-