全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:云盘存储卷概述

更新时间:Feb 01, 2024

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

功能介绍

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

  • ESSD AutoPL云盘:支持根据业务需求自定义云盘的预配置性能以及性能突发。该类云盘在保持ESSD云盘原有功能与性能的同时,可以实现云盘容量与云盘性能解耦。更多信息,请参见ESSD AutoPL云盘

    建议在以下业务场景中使用:

    • 应用于ESSD云盘适用的场景(大型OLTP数据库、NoSQL数据库和ELK分布式日志等场景)。

    • 业务所需的云盘容量固定,但需要更高的云盘性能来支撑业务的运行。

    • 业务波动较大,波峰高频出现,需要云盘具备应对突发业务的能力。

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

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

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

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

  • ESSD Entry云盘:具备企业级特性及数据保护能力,建议在开发与测试业务和系统盘等场景中使用。

    说明

    通用算力型实例规格族u1经济型实例规格族e支持挂载ESSD Entry云盘。

  • 高效云盘:具备高性价比、中等随机读写性能、高可靠性的云盘产品。建议在开发与测试业务和系统盘等场景中使用。

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

使用限制及说明

  • 云盘类型:包年包月的云盘不能进行挂载、卸载操作。

  • 共享存储:云盘为阿里云存储团队提供的非共享存储,只能同时被一个Pod挂载。

  • 挂载数量及容量:每个节点最多挂载云盘数量由ECS机型决定,更多信息,请参见实例规格族。单块云盘容量最小为1 GiB (ESSD PL0, ESSD AutoPL),最大32 TiB(32768 GiB)。

  • 与ECS实例的关系:云盘类型和ECS类型需要匹配才可以挂载,否则会挂载失败。关于云盘类型和ECS类型的匹配关系,请参见实例规格族。此外,云盘只能挂载到相同可用区的ECS实例,不支持跨可用区挂载。

  • 挂载应用类型:推荐使用有状态应用(StatefulSet)挂载使用云盘。无状态应用(Deployment)挂载云盘时Replica需要配置为1,无法为每个Pod配置独立的存储卷,且不能保证挂载、卸载的优先顺序。此外,由于Deployment的升级策略,重启Pod时新的Pod可能一直无法挂载,故不推荐使用。

  • 应用参数配置:使用云盘存储卷时,如果在应用模板中配置了securityContext.fsgroup参数,kubelet在存储卷挂载完成后会执行chmodchown操作,导致挂载时间延长。若需要减少挂载时间,具体操作,请参见NAS存储卷挂载时间延长OSS存储卷挂载时间延长

存储规格

适用场景

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

业务需求

参考链接

存储应用数据

系统盘或数据盘容量不足

更多信息,请参见云盘扩容指引

备份云盘数据

具体操作,请参见使用云盘存储快照

加密存储在云盘上的数据

更多信息,请参见加密概述

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

实现云盘存储数据安全

使用云盘的自动极速快照实现云盘存储数据安全,更多信息,请参见云盘存储数据安全最佳实践

计费说明

  • 待挂载的云盘类型必须是按量付费,包年包月的云盘无法被挂载。当您将集群中的ECS实例从按量付费转换成包年包月时,不能将云盘一起变成包年包月,否则云盘将无法被挂载使用。

  • 关于云盘计费项信息,请参见块存储计费。关于云盘的价格信息,请参见云服务器ECS产品详情页

  • 待挂载的云盘不支持包年包月类型,您可以通过购买SCU的方式降低成本。关于SCU的更多信息,请参见存储容量单位包SCU介绍

更多信息,请参见计费

存储类(StorageClass)

如果PVC请求多,就需要创建很多PV,对于运维人员来说维护成本很高,Kubernetes提供一种自动创建PV的机制,叫做StorageClass。

StorageClass

容器服务Kubernetes版(ACK)集群默认提供了以下几种StorageClass:

  • 适用于单可用区集群:

    • alibaba-disk-auto:ESSD AutoPL云盘

    • alicloud-disk-efficiency:高效云盘

    • alicloud-disk-ssd:SSD云盘

    • alicloud-disk-essd:ESSD云盘

  • 适用于多可用区集群:

    • alicloud-disk-topology:使用延迟绑定的方式创建云盘。

    • alicloud-disk-topology-alltype:依次尝试创建指定的存储类型,并且使用WaitForFirstConsumer模式,可以兼容多可用区集群。

如果您需要在多可用区部署存储资源,请参见存储多可用区部署的推荐配置

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"}}}'