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时开启子目录配额功能。
将以下示例保存为alicloud-nas-quota-sc.yaml文件,创建带有配额子目录NAS的StorageClass,并开启配额功能允许扩容。
说明将
allowVolumeExpansion
或volumeCapacity
配置为true
均可开启目录配额功能。如果allowVolumeExpansion
参数配置为true
,volumeCapacity
的参数配置将不会生效,配额会始终开启。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
在
reclaimPolicy
为Delete
时,是否删除后端存储。NAS为共享存储,添加此选项旨在进行双重确认。默认为true
。path
挂载NAS的子目录,极速型NAS需要以/share开头。
volumeCapacity
是否使用配额。可选值:
true
、false
。说明若同时配置了
allowVolumeExpansion
为true
,则该参数配置不会生效,配额将始终开启。provisioner
驱动类型。此处必须配置为
nasplugin.csi.alibabacloud.com
,表示使用阿里云NAS CSI插件。reclaimPolicy
PV的回收策略。取值:
Retain
:保留后端存储,删除PV及PVC不会删除对应的后端存储,例如NAS文件系统。Delete
:当删除PVC时,自动删除PV和后端的存储。
allowVolumeExpansion
仅通用型NAS文件系统支持设置此参数。
开启时,该StorageClass动态创建的PV将会被设置配额。
执行以下命令,创建StorageClass。
kubectl apply -f alicloud-nas-quota-sc.yaml
步骤二:创建应用挂载动态存储卷
将以下示例保存为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
执行以下命令,创建已挂载PVC的应用。
kubectl apply -f nas-sts.yaml
步骤三:在挂载目录中写入数据验证配额限制
您可以参考以下操作对上文挂载的20 GiB的NAS动态存储卷进行配额功能验证,当其子目录写入数据超过20 GiB时,系统会提示磁盘超出配额。
执行以下命令,在上文步骤二StatefulSet挂载的
/data
目录中写入20 GiB数据。dd if=/dev/zero of=20G.txt bs=1M count=10000
等待5~15分钟后,通过NAS控制台查看子目录的配额详情。
登录NAS控制台。
在控制台左侧导航栏,单击 。
选择目标文件系统操作列下,然后单击配额管理。
在目标文件系统的配额管理页面,单击操作列的管理配额。
可以看到子目录的容量限制为20 GiB,当前容量显示为19 GiB。
当此子目录已写满20 GiB,再写入数据时,将会提示超出磁盘配额,即
Disk quota exceeded
。当磁盘配额达到上限时,通过手动在线扩容的方式对存储卷进行扩容。
步骤四:手动在线扩容NAS动态存储卷
通过编辑PVC对动态创建的PV进行存储卷容量扩容,并查看配额确认NAS存储卷容量是否扩容成功。
此扩容操作不影响在线业务,不会中断业务。
扩容存储卷。
kubectl patch pvc nas-pvc-nas-sts-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
重要NAS目录配额单位为GiB,CSI将按照扩容后的PVC容量为NAS目录设置配额,实际设置的容量上限为将PVC容量按GiB单位向上取整后的值。
查看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
查看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。
相关文档
关于NAS存储卷的目录配额功能,请参见目录配额。
NAS目录配额设置完成后,如需监控NAS存储卷使用情况,您可以通过node_volume_capacity_bytes_used存储指标,参见创建Prometheus告警规则配置告警进行存储容量监控。
使用NAS存储卷时,如遇到权限无法访问的问题,请参见使用NAS存储卷时,提示chown: Operation not permitted解决。
为确保不同用户和用户组之间数据的安全性,您可以参见如何实现NAS的用户或用户组隔离?解决。
如果您在使用NAS过程中遇到读写访问的问题,请参见读写访问文件类问题排查。
如果您在容器中使用NAS时遇到问题,请参见NAS存储卷FAQ排查。