扩容NAS存储卷容量

阿里云容器服务CSI支持对NAS卷的子目录进行配额限制。通过配额限制,可以确保您在资源分配的基础上,提升整体资源的利用率。当磁盘配额达到上限时,您还可以通过手动在线扩容的方式对存储卷进行扩容且不影响业务运行。

前提条件

  • csi-plugin的镜像版本不低于v1.18.8.45。关于csi-plugin的版本说明,请参见csi-plugin

  • NAS存储卷需要使用子目录进行挂载。

背景信息

关于NAS卷的管理配额,请参见目录配额

使用限制

  • 目前仅容量型NAS支持使用配额限制,其他NAS类型均不支持。关于NAS存储卷的规格类型,请参见NAS规格类型

  • NAS静态存储卷不支持扩容。

  • 仅支持子目录挂载方式设置配额。

  • 对于单个文件系统,最多允许对500个目录设置配额。

    • 设置限制性配额后,如果文件使用量超过限制,会导致增加文件长度、创建文件、目录和特殊文件,移动文件到目录等写入操作失败,应用层会收到IOError。

    • 由于限制型配额的高风险性,强烈建议您在业务关键路径上谨慎评估和测试验证后,再配置限制型配额。

    • NAS配额的设置为异步执行,因此限制型配额的生效和失效都有延迟,正常情况下需要等待5~15分钟。

使用示例

  1. 使用以下YAML内容,创建带有配额子目录NAS的StorageClass,并开启允许扩容策略。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-quota-sc
    mountOptions:
      - nolock,tcp,noresvport
      - vers=3
    parameters:
      volumeAs: subpath
      server: "xxx.cn-hangzhou.nas.aliyuncs.com:/"
      archiveOnDelete: "false"
      path: "/abc"
      volumeCapacity: "true" # 创建动态卷带有配额能力。
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Delete
    allowVolumeExpansion: true # 开启允许动态卷扩容能力。

    参数

    描述

    mountOptions

    挂载NAS的options参数在mountOptions中配置,包括NFS协议版本。

    volumeAs

    可选的subpathfilesystem,分别表示创建子目录类型的PV和文件系统类型的PV。

    server

    表示创建子目录类型的PV时,NAS文件系统的挂载点地址。

    archiveOnDelete

    表示在reclaimPolicyDelete时,是否删除后端存储。因为NAS为共享存储,添加此选项进行双重确认。默认为true

    path

    表示挂载子目录,极速NAS需要以/share开头。

    volumeCapacity

    表示是否使用配额。可选值为:truefalse

    说明

    若开启了allowVolumeExpansion,则该参数配置不会生效,配额将始终开启。

    provisioner

    表示ACK动态卷控制器名称。

    reclaimPolicy

    表示PV的回收策略。可选值为:

    • Retain:保留后端存储,删除PV及PVC不会删除对应的后端存储,例如云盘。

    • Delete:当删除PVC时,自动删除PV和后端的存储。

    allowVolumeExpansion

    表示是否支持NAS存储卷的扩容。

    说明

    创建带有配额子目录NAS的StorageClass,需要开启配额功能,即volumeCapacity=true 或者allowVolumeExpansion=true

  2. 使用以下YAML内容,创建StatefulSet,包含容量大小为20 GiB的PVC。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nas-sts
    spec:
      selector:
        matchLabels:
          app: busybox
      serviceName: "busybox"
      replicas: 1
      template:
        metadata:
          labels:
            app: busybox
        spec:
          containers:
          - name: busybox
            image: busybox
            command:
            - sleep
            - "3600"
            volumeMounts:
            - name: nas-pvc
              mountPath: /data
      volumeClaimTemplates:
      - metadata:
          name: nas-pvc
        spec:
          accessModes: [ "ReadWriteMany" ]
          storageClassName: "alicloud-nas-quota-sc"
          resources:
            requests:
              storage: 20Gi

结果验证

  1. 执行以下命令,向步骤2StatefulSet挂载的/data目录写入10 GiB数据。

    dd if=/dev/zero of=10G.txt bs=1M count=10000
  2. 等待5~15分钟后,查看子目录的配额详情。

    1. 登录NAS控制台

    2. 在控制台左侧导航栏,单击文件系统 > 文件系统列表

    3. 选择目标文件系统操作列下图标,然后单击配额管理

    4. 在目标文件系统的配额管理页面,单击操作列的管理配额

      可以看到子目录的容量限制为20 GiB,当前容量为9 GiB。配额管理

      当此子目录已写满20 GiB,再写入数据时,将会提示超过磁盘配额,即Disk quota exceeded磁盘配额

  3. 当磁盘配额达到上限时,可以通过手动在线扩容的方式对存储卷进行扩容。

    1. 执行以下命令,进行数据卷扩容。

      说明

      此操作不影响在线业务,不会中断业务。

      kubectl patch pvc nas-pvc-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
    2. 执行以下命令,查看PV信息。

      kubectl get pv

      预期输出:

      NAME                              CAPACITY  ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM               STORAGECLASS         REASON     AGE
      nas-63c37cc2-b21e-4b56-b26f-****   30Gi          RWX          Delete        Bound    default/nas-pvc-0   alicloud-nas-quota-sc           25m23s
    3. 执行以下命令,查看PVC信息。

      kubectl get pvc

      预期输出:

      NAME       STATUS   VOLUME                         CAPACITY  ACCESS MODES   STORAGECLASS            AGE
      nas-pvc-0  Bound   nas-63c37cc2-b21e-4b56-b26f-****   30Gi      RWX        alicloud-nas-quota-sc   25m10s