全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:扩容NAS动态存储卷容量

更新时间:Jan 20, 2025

CSI组件支持对通用型NAS存储卷的子目录设置配额限制。在容器中直接挂载使用NAS动态存储卷时,您可以开启子目录配额功能,以提升整体资源的利用率。当容量配额达到上限时,您可以手动在线扩容NAS动态存储卷,无需中断业务运行。

如果您通过CNFS托管NAS的方式挂载存储卷,默认已开启资源配额功能。相关内容,请参见使用CNFS自动扩容NAS存储卷

前提条件

  • 确认集群中默认安装的CSI组件为v1.18.8.45及以上版本。关于csi-plugin的版本说明,请参见csi-plugin。如需升级,请参见升级csi-plugin和csi-provisioner

    说明

    如果您集群中使用Flexvolume组件,由于Flexvolume已废弃,请参见迁移Flexvolume至CSI完成迁移后再进行挂载。您可以在运维管理 > 组件管理,在存储页签下确认存储组件类型。

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

使用限制

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

  • 仅支持通用型NAS(性能型、容量型和高级型)且通过子目录方式挂载的存储卷设置配额,不支持极速型NAS。

  • 对于单个文件系统,最多可以对500个目录设置配额,支持配置的最大目录深度为8层。(例如,根目录/深度为0层,/workspace深度为1层,/workspace/dir1深度为2层,依此类推。)

    重要
    • 设置限制型配额后,如果文件使用量超过限制会导致写入操作(包括增加文件长度、创建文件、目录、移动文件到目录等操作)失败,应用层会收到IOError。您可以参照为什么向文件系统写入数据时,返回Disk quota exceeded错误信息?进行处理。

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

    • 新建目录配额后,会有初始化过程,状态为初始化中。初始化过程时长取决于文件系统的文件和目录数目,最长可达数小时甚至更长。初始化完成之后,状态为运行中。目录配额的状态您可通过NAS控制台或调用DescribeDirQuotas API查询。

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

操作步骤

步骤一:创建StorageClass并开启目录配额功能

您可以在创建存储类StorageClass时开启子目录配额功能。

  1. 将以下示例保存为alicloud-nas-quota-sc.yaml文件,创建带有配额子目录NAS的StorageClass,并开启配额功能允许扩容。

    说明

    allowVolumeExpansionvolumeCapacity 配置为true均可开启目录配额功能。如果allowVolumeExpansion参数配置为truevolumeCapacity的参数配置将不会生效,配额会始终开启。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-quota-sc
    mountOptions:
      - nolock,tcp,noresvport
      - vers=3
    parameters:
      volumeAs: subpath  # 此处必须为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协议版本。挂载NAS存储卷的NFS协议版本号,推荐使用v3,极速类型NAS仅支持v3。关于NFS协议的更多信息,请参见NFS协议

    volumeAs

    必须设置为subpath,表示创建子目录类型的PV。

    server

    创建子目录类型的PV时,NAS文件系统的挂载点地址。如何查看挂载点地址,请参见管理挂载点

    archiveOnDelete

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

    path

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

    volumeCapacity

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

    说明

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

    provisioner

    驱动类型。此处必须配置为nasplugin.csi.alibabacloud.com,表示使用阿里云NAS CSI插件。

    reclaimPolicy

    PV的回收策略。取值:

    • Retain:保留后端存储,删除PV及PVC不会删除对应的后端存储,例如NAS文件系统。

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

    allowVolumeExpansion

    仅通用型NAS文件系统支持设置此参数。

    开启时,该StorageClass动态创建的PV将会被设置配额。

  2. 执行以下命令,创建StorageClass。

    kubectl apply -f alicloud-nas-quota-sc.yaml

步骤二:创建应用挂载动态存储卷

  1. 将以下示例保存为nas-sts.yaml文件,创建StatefulSet应用。

    该YAML配置关联上一步已创建的存储类,同时自动创建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: mirrors-ssl.aliyuncs.com/busybox:latest
            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
  2. 执行以下命令,创建已挂载PVC的应用。

    kubectl apply -f nas-sts.yaml

步骤三:在挂载目录中写入数据验证配额限制

您可以参考以下操作对上文挂载的20 GiB的NAS动态存储卷进行配额功能验证,当其子目录写入数据超过20 GiB时,系统会提示磁盘超出配额。

  1. 执行以下命令,在上文步骤二StatefulSet挂载的/data目录中写入20 GiB数据。

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

    1. 登录NAS控制台

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

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

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

      可以看到子目录的容量限制为20 GiB,当前容量显示为19 GiB。

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

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

步骤四:手动在线扩容NAS动态存储卷

通过编辑PVC对动态创建的PV进行存储卷容量扩容,并查看配额确认NAS存储卷容量是否扩容成功。

说明

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

  1. 扩容存储卷。

    kubectl patch pvc nas-pvc-nas-sts-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
    重要

    NAS目录配额单位为GiB,CSI将按照扩容后的PVC容量为NAS目录设置配额,实际设置的容量上限为将PVC容量按GiB单位向上取整后的值。

  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-nas-sts-0    alicloud-nas-quota-sc           25m23s
  3. 查看PVC信息。

    kubectl get pvc

    预期输出:

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

    以上PV和PVC输出表明,NAS存储卷子目录配额已由20 GiB扩容为30 GiB。

相关文档