您可以在阿里云容器服务Kubernetes集群中使用阿里云云盘存储卷。目前,阿里云CSI插件支持通过PV/PVC方式挂载云盘,包括静态存储卷和动态存储卷。本文介绍了阿里云云盘存储卷的功能介绍、存储规格、适用场景、使用限制及计费说明。

功能介绍

云盘是阿里云为云服务器ECS提供的数据块级别的块存储产品,具有低时延、高性能、持久性、高可靠等特点。云盘采用分布式三副本机制,为ECS实例提供数据可靠性保证。支持在可用区内自动复制您的数据,防止意外硬件故障导致的数据不可用,保护您的业务免于组件故障的威胁。

根据性能分类,云盘包含以下几类产品:
  • ESSD云盘:基于新一代分布式块存储架构的超高性能云盘产品,结合25GE网络和RDMA技术,单盘可提供高达100万的随机读写能力和更低的单路时延能力。更多详情,请参见ESSD云盘

    建议在大型OLTP数据库、NoSQL数据库和ELK分布式日志等场景中使用。

  • SSD云盘:具备稳定的高随机读写性能、高可靠性的高性能云盘产品。

    建议在I/O密集型应用、中小型关系数据库和NoSQL数据库等场景中使用。

  • 高效云盘:具备高性价比、中等随机读写性能、高可靠性的云盘产品。

    建议在开发与测试业务和系统盘等场景中使用。

  • 普通云盘:属于上一代云盘产品,已经逐步停止售卖。

存储规格

各类型云盘的性能比较如下表所示。

性能类别 ESSD云盘 SSD云盘 高效云盘 普通云盘
PL3 PL2 PL1 PL0
单盘容量范围(GiB) 1261~32768 461~32768 20~32768 40~32768 20~32768 20~32768 5~2000
最大IOPS 1000000 100000 50000 10000 25000 5000 数百
最大吞吐量(MB/s) 4000 750 350 180 300 140 30~40
单盘IOPS性能计算公式 min{1800+50*容量, 1000000} min{1800+50*容量, 100000} min{1800+50*容量, 50000} min{ 1800+12*容量, 10000 } min{1800+30*容量, 25000} min{1800+8*容量, 5000}
单盘吞吐量性能计算公式(MB/s) min{120+0.5*容量, 4000} min{120+0.5*容量, 750} min{120+0.5*容量, 350} min{100+0.25*容量, 180} min{120+0.5*容量, 300} min{100+0.15*容量, 140}
单路随机写平均时延(ms),Block Size=4K 0.2 0.3~0.5 0.5~2 1~3 5~10
API参数取值 cloud_essd cloud_ssd cloud_efficiency cloud

云盘更多性能介绍请参见块存储性能

适用场景

根据业务需求,您可以对云盘做以下操作:

业务需求 参考链接
存储应用数据
系统盘或数据盘容量不足

更多信息,请参见扩容概述

备份云盘数据 具体操作,请参见使用云盘存储快照
加密存储在云盘上的数据 更多信息,请参见加密概述

具体操作,请参见加密云盘存储卷

关于ACK使用云盘快速入门,请参见以下视频:

使用限制

  • 云盘为非共享存储,通过PV/PVC使用云盘时,一个云盘只能同时被一个Pod挂载。
  • 推荐使用有状态应用(StatefulSet)挂载使用云盘。无状态应用(Deployment)挂载云盘时Replica需要为1,且不能保证挂载、卸载的优先顺序。使用Deployment时由于升级策略,可能出现重启Pod时新的Pod一直无法挂载,故不推荐使用Deployment。
  • 使用静态云盘存储卷前需要先申请一个云盘,并获得磁盘ID。具体操作,请参见创建云盘
    说明 申请云盘时,请遵循如下容量限制:
    • 高效云盘:最小20 GiB。
    • SSD云盘:最小20 GiB。
    • ESSD云盘:最小20 GiB。
  • 集群中只有与云盘在同一个可用区(Zone)的节点才可以挂载云盘,即您期望Pod运行在哪个可用区,就需要申请对应可用区的云盘。
  • 云盘类型和ECS类型需要匹配才可以挂载,否则会挂载失败。关于云盘类型和ECS类型的匹配关系,请参考实例规格族
  • 每个节点最多可挂载16块云盘,单块云盘容量最大32 TiB。

计费说明

  • 待挂载的云盘类型必须是按量付费,包年包月的云盘无法被挂载。当您把集群中的ECS实例从按量付费转换成包年包月时,不可以把云盘一起变成包年包月,否则云盘将不能被挂载使用。
  • 云盘的具体价格信息,请参见详细定价
更多信息,请参见计费

存储类(StorageClass)

StorageClass

容器服务Kubernetes版(ACK)集群默认提供了以下几种StorageClass:
  • alicloud-disk-efficiency:高效云盘。
  • alicloud-disk-ssd:SSD云盘。
  • alicloud-disk-essd:ESSD云盘。
  • alicloud-disk-available:提供高可用选项,优先创建SSD云盘;如果SSD云盘售尽,则创建高效云盘。
    注意
    • 对于alicloud-csi-provisioner v1.14.8.39-0d749258-aliyun之前的版本,优先创建ESSD云盘。
    • 如果ESSD云盘售尽,则创建SSD云盘。
    • 如果SSD云盘售尽,则创建高效云盘。
  • alicloud-disk-topology:使用延迟绑定的方式创建云盘。

以上5种StorageClass中,前4种可以在单可用区使用,最后一种更适合在多可用区使用。

通过StorageClass创建云盘,可用区选择规则如下:
  • StorageClass配置volumeBindingMode: WaitForFirstConsumer,则取PVC的Pod所在可用区为创建云盘的可用区。
  • StorageClass配置volumeBindingMode: Immediate,且配置zoneId参数(一个可用区),则选择此可用区为创建云盘的可用区。
  • StorageClass配置volumeBindingMode: Immediate,且配置zoneId参数(多个可用区),则每次选择轮询配置的多个可用区中的一个作为创建云盘的可用区。
  • StorageClass配置volumeBindingMode: Immediate,且没有配置zoneId参数,则选择csi-provisioner所在的可用区作为创建云盘的可用区。

综上,如果您是多可用区集群,推荐您使用WaitForFirstConsumer模式的StorageClass。您可以根据需要的云盘类型自行创建StorageClass。

Default StorageClass

Kubernetes提供Default StorageClass机制,您在PVC不指定StorageClass的情况下,可以通过Default StorageClass创建数据卷,请参见Default StorageClass

说明
  • 由于Default StorageClass会对所有PVC起作用,对于具备不同类型存储卷能力的集群,需要小心使用。例如,您想生成一个NAS类型PVC、PV,并绑定PVC和PV,但可能因为有Default StorageClass而自动创建了云盘PV。基于上述原因,ACK集群没有提供Default StorageClass,如果您期望使用Default StorageClass,可以参考以下配置。
  • 一个集群中最多配置一个Default StorageClass,否则默认能力将不起作用。
  1. 配置Default StorageClass。
    执行以下命令将StorageClass (alicloud-disk-ssd)配置为一个Default StorageClass。
    kubectl patch storageclass alicloud-disk-ssd -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    这时查询集群中的StorageClass可以看到alicloud-disk-ssd名字后面加了(default)字样。
    kubectl get sc

    返回结果如下:

    NAME                          PROVISIONER                       AGE
    alicloud-disk-ssd (default)   diskplugin.csi.alibabacloud.com   96m
  2. 使用Default StorageClass。
    1. 使用以下模板创建一个没有配置StorageClass的PVC。
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: disk-pvc
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 20Gi
      集群会自动创建一个云盘卷(PV),且配置了Default StorageClass(alicloud-disk-ssd)。
      kubectl get pvc

      返回结果如下:

      NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS        AGE
      disk-pvc   Bound    d-bp18pbai447qverm3ttq   20Gi       RWO            alicloud-disk-ssd   49s
您可以通过以下命令取消默认存储类型配置。
kubectl patch storageclass alicloud-disk-ssd -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'