阿里云容器服务CSI支持对NAS卷的子目录进行配额限制。通过配额限制,可以确保您在资源分配的基础上,提升整体资源的利用率。当磁盘配额达到上限时,您还可以手动在线扩容的方式对存储卷进行扩容且不影响业务运行。
前提条件
csi-plugin的镜像版本不低于v1.18.8.45。关于csi-plugin的版本说明,请参见csi-plugin。
NAS存储卷需要使用子目录进行挂载。
背景信息
关于NAS卷的管理配额,请参见目录配额。
使用限制
目前仅容量型NAS支持使用配额限制,其他NAS类型均不支持。关于NAS存储卷的规格类型,请参见NAS规格类型。
NAS静态存储卷不支持扩容。
仅支持子目录挂载方式设置配额。
对于单个文件系统,最多允许对500个目录设置配额。
设置限制性配额后,如果文件使用量超过限制,会导致增加文件长度、创建文件、目录和特殊文件,移动文件到目录等写入操作失败,应用层会收到IOError。
由于限制型配额的高风险性,强烈建议您在业务关键路径上谨慎评估和测试验证后,再配置限制型配额。
NAS配额的设置为异步执行,因此限制型配额的生效和失效都有延迟,正常情况下需要等待5~15分钟。
使用示例
使用以下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
可选的subpath、filesystem,分别表示创建子目录类型的PV和文件系统类型的PV。
server
表示创建子目录类型的PV时,NAS文件系统的挂载点地址。
archiveOnDelete
表示在reclaimPolicy为Delete时,是否删除后端存储。因为NAS为共享存储,添加此选项进行双重确认。默认为true。
path
表示挂载子目录,极速NAS需要以/share开头。
volumeCapacity
表示是否使用配额。可选值为:true,false。
provisioner
表示ACK动态卷控制器名称。
reclaimPolicy
表示PV的回收策略。可选值为:
Retain
:保留后端存储,删除PV及PVC不会删除对应的后端存储,例如云盘。Delete
:当删除PVC时,自动删除PV和后端的存储。
allowVolumeExpansion
表示是否支持NAS存储卷的扩容。
说明创建带有配额子目录NAS的StorageClass,需要将volumeCapacity设置为true。
使用以下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
结果验证
执行以下命令,向步骤2StatefulSet挂载的/data目录写入10 GiB数据。
dd if=/dev/zero of=10G.txt bs=1M count=10000
等待5~15分钟后,查看子目录的配额详情。
登录NAS控制台。
在控制台左侧导航栏,单击 。
选择目标文件系统操作列下,然后单击配额管理。
在目标文件系统的配额管理页面,单击操作列的管理配额。
可以看到子目录的容量限制为20 GiB,当前容量为9 GiB。
当此子目录写满20 GiB,再写入数据时,会提示超过磁盘配额,即
Disk quota exceeded
。
当磁盘配额达到上限时,可以通过手动在线扩容的方式对存储卷进行扩容。
执行以下命令,进行数据卷扩容。
说明此操作不影响在线业务,不会中断业务。
kubectl patch pvc nas-pvc-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
执行以下命令,查看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
执行以下命令,查看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