为NAS动态存储卷设置目录配额

CSI组件支持为通用型NAS存储卷的子目录设置配额限制。使用subPath方式挂载NAS子目录时,可启用目录配额功能,限制子目录容量,提升资源利用率。当子目录存储卷达到配额上限时,可通过更新PVCstorage实现在线扩容,无需中断业务。

使用场景

默认情况下,在ACK集群中挂载NAS存储卷时,PVC中声明的storage并不会生效,PV中实际可用的容量为NAS文件系统的所有容量,您可根据NAS文件系统的容量限制确认NAS存储卷实际可用容量。

说明

各类NAS的容量限制不同,具体请参见通用型NAS极速型NAS

如您的NAS文件系统被多个应用共享挂载,建议使用subPath方式挂载子目录,并启用目录配额功能。启用后,动态创建的子目录PV容量将受PVC中声明的storage限制。当容量达到上限时,可通过更新PVCstorage来实现在线扩容,无需中断业务。 目录配额功能允许您为不同应用挂载独立子目录并设置容量限制,从而更好地管理NAS文件系统的资源分配,提升管理效率与资源利用率,同时有效控制存储成本。

说明

如果通过CNFS托管NAS,默认已开启目录配额功能。更多信息,请参见使用CNFS自动扩容NAS存储卷

前提条件

  • 集群中已安装CSI组件,且组件版本为v1.18.8.45及以上。如需升级,请参见升级csi-plugincsi-provisioner

  • 已创建NAS文件系统和挂载点,且满足以下条件:

    • NAS类型为通用型NAS,协议类型为NFS。如不满足,请重新创建通用型NAS文件系统

    • 挂载点和集群节点在同一VPC内,且状态可用。如不满足,请重新创建挂载点,具体请参见管理挂载点

使用限制

NFS协议的通用型NAS,且通过subpath方式挂载的NAS动态存储卷支持目录配额功能,NAS静态存储卷,以及通过sharepathfilesystem方式挂载的NAS动态存储卷不支持。

说明

更多关于目录配额功能的限制信息,请参见目录配额

使用NAS动态存储卷并设置目录配额

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

  1. 修改以下YAML内容,并保存为alicloud-nas-quota-sc.yaml。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-quota-sc
    mountOptions:
      - nolock,tcp,noresvport
      - vers=3
    parameters:
      volumeAs: subpath  # 此处必须为subpath挂载方式。
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com"  # NFS协议的通用型NAS的挂载点。
      archiveOnDelete: "false"
      path: "/test"
      volumeCapacity: "true" # 创建的动态卷支持目录配额功能。
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Delete
    allowVolumeExpansion: true # 开启目录配额功能,允许动态卷扩容。
    说明

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

    需要注意的参数如下,更多信息,请参见使用NAS动态存储卷

    参数

    说明

    parameters

    volumeAs

    使用目录配额功能时,必须配置为subpath,表示创建子目录类型的PV。

    server

    NAS文件系统的挂载点地址。关于如何查看挂载点地址,请参见管理挂载点

    path

    挂载NAS文件系统的子目录,默认为/,极速型NAS需要以/share开头。

    volumeCapacity

    是否开启目录配额功能。

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

    allowVolumeExpansion

    仅通用型NAS文件系统支持设置此参数。开启时,该StorageClass动态创建的PV将会被设置配额。

  2. 创建StorageClass。

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

步骤二:创建应用并挂载NAS存储卷

  1. 使用以下YAML内容,创建nas-sts.yaml文件。

    以下YAML将创建一个StatefulSet,包含1Pod,Pod中关联了开启目录配额功能的StorageClass,系统会自动创建对应的NAS动态存储卷并挂载到Pod上,该NAS存储卷的容量为20 GiB。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nas-sts
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            volumeMounts:
            - name: nas-pvc
              mountPath: /data
      volumeClaimTemplates:
      - metadata:
          name: nas-pvc
        spec:
          accessModes: [ "ReadWriteMany" ]
          storageClassName: "alicloud-nas-quota-sc"
          resources:
            requests:
              storage: 20Gi    
  2. 创建StatefulSet。

    kubectl apply -f nas-sts.yaml
  3. 查看StatefulSetPod的部署情况。

    kubectl get pod -l app=nginx

    预期返回:

    NAME          READY   STATUS    RESTARTS   AGE
    nas-sts-0     1/1     Running   0          24s
  4. 查看PV,并确认目录配额已经生效。

    1. 查看PV。

      kubectl get pv

      预期返回如下,可以已动态创建PV,PV的容量为20 GiB。

      NAME                             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                       STORAGECLASS            VOLUMEATTRIBUTESCLASS   REASON   AGE
      nas-****-c72c-497f-ab13-******   20Gi       RWX            Delete           Bound    default/nas-pvc-nas-sts-0   alicloud-nas-quota-sc   <unset>                          15m
    2. NAS控制台查看目录配额详情。

      NAS控制台文件系统列表页面,单击目标文件系统对应的操作列下的图标,然后单击配额管理。在配额管理页面可以看到已自动生成对应的目录配额,单击管理配额可查看详细信息。

      示例如下,可以看到目录的容量限制为20 GiB。

      nas目录配额

验证目录配额限制

由于以subpath方式挂载的NAS动态存储卷开启了目录配额功能,且声明容量为20 GiB,因此当挂载目录下写入的数据超过20 GiB时,系统会提示磁盘超出配额。

  1. 向挂载目录写入数据。

    命令示例如下,表示向挂载目录/data写入20000 MiB(约19.53 GiB)的数据。

    kubectl exec -it nas-sts-0 -- dd if=/dev/zero of=/data/20G.txt bs=1M count=20000
  2. 等待5~15分钟后,在NAS控制台查看目录配额详情。

    NAS控制台文件系统列表页面,单击目标文件系统对应的操作列下的图标,然后单击配额管理。在配额管理页面,单击目录对应的管理配额可查看详细信息。

    示例如下,可以看到目录的当前容量显示为19 GiB。

    nas目录配额2

  3. 再次向挂载目录写入数据,使其容量达到目录配额限制,将触发磁盘超出配额的报错。

    命令示例如下,向挂载目录/data写入1 GiB的数据时,将超出目录配额限制。

    kubectl exec -it nas-sts-0 -- dd if=/dev/zero of=/data/1G.txt bs=1M count=1024

    预期返回如下,提示超出磁盘配额。

    dd: closing output file '/data/1G.txt': Disk quota exceeded
    说明

    如需扩容,请参见扩容设置了目录配额的NAS动态存储卷

扩容设置了目录配额的NAS动态存储卷

通过更新PVCstorage的方式,您可以对动态创建的PV进行容量扩容,并查看目录配额确认NAS存储卷容量是否扩容成功。此扩容操作不影响在线业务,不会中断业务。

  1. 查看扩容前的PVC。

    kubectl get pvc

    预期返回:

    NAME                STATUS   VOLUME                           CAPACITY   ACCESS MODES   STORAGECLASS            VOLUMEATTRIBUTESCLASS   AGE
    nas-pvc-nas-sts-0   Bound    nas-****-c72c-497f-ab13-******   20Gi       RWX            alicloud-nas-quota-sc   <unset>                 23m
  2. 修改PVC,扩容NAS存储卷的容量。

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

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

  3. 查看扩容后的PVPVC。

    从返回信息中的CAPACITY字段可以确认NAS存储卷对应的目录配额已由20 GiB扩容为30 GiB。

    1. 查看PV。

      kubectl get pv

      预期返回:

      NAME                             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                       STORAGECLASS            VOLUMEATTRIBUTESCLASS   REASON   AGE
      nas-****-c72c-497f-ab13-******   30Gi       RWX            Delete           Bound    default/nas-pvc-nas-sts-0   alicloud-nas-quota-sc   <unset>                          25m
    2. 查看PVC。

      kubectl get pvc

      预期返回:

      NAME                STATUS   VOLUME                           CAPACITY   ACCESS MODES   STORAGECLASS            VOLUMEATTRIBUTESCLASS   AGE
      nas-pvc-nas-sts-0   Bound    nas-****-c72c-497f-ab13-******   30Gi       RWX            alicloud-nas-quota-sc   <unset>                 26m
  4. NAS控制台查看目录配额详情。

    NAS控制台文件系统列表页面,单击目标文件系统对应的操作列下的图标,然后单击配额管理。在配额管理页面,单击目录对应的管理配额可查看详细信息。

    示例如下,可以看到目录的容量限制已扩容到30 GiB。

    nas目录配额3

常见问题

在挂载和使用NAS存储卷的过程中,如果遇到问题,可参考以下文档进行排查。

相关文档

  • 如需了解更多关于NAS目录配额功能的信息,请参见目录配额

  • NAS存储卷设置目录配额后,如需监控NAS存储卷使用情况,您可以通过node_volume_capacity_bytes_used存储指标,参见创建Prometheus告警规则配置告警进行存储容量监控。