您可以在阿里云容器服务Kubernetes集群中使用阿里云云盘存储卷。目前,阿里云CSI插件支持通过PV/PVC方式挂载云盘,包括静态存储卷和动态存储卷。本文介绍了阿里云云盘存储卷的使用限制及相关要求。

使用说明

  • 云盘为非共享存储,通过PV/PVC使用云盘时,一个云盘只能同时被一个Pod挂载。
  • 推荐使用有状态应用(StatefulSet)挂载使用云盘。无状态应用(Deployment)挂载云盘时Replica需要为1,且不能保证挂载、卸载的优先顺序,不推荐使用。
  • 使用静态云盘存储卷前需要先申请一个云盘,并获得磁盘ID。具体操作,请参见创建云盘
    说明 申请云盘时,请遵循如下容量限制:
    • 高效云盘:最小20 GiB。
    • SSD云盘:最小20 GiB。
    • ESSD云盘:最小20 GiB。
  • 集群中只有与云盘在同一个可用区(Zone)的节点才可以挂载云盘,即您期望Pod运行在哪个可用区,就需要申请对应可用区的云盘。
  • 云盘类型和ECS类型需要匹配才可以挂载,否则会挂载失败。关于云盘类型和ECS类型的匹配关系,请参考实例规格族
  • 待挂载的云盘类型必须是按量付费,包年包月的云盘无法被挂载。当您把集群中的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"}}}'