CSI組件支援為通用型NAS儲存卷的子目錄設定配額限制。使用subPath方式掛載NAS子目錄時,可啟用目錄配額功能,限制子目錄容量,提升資源使用率。當子目錄儲存卷達到配額上限時,可通過更新PVC的storage實現線上擴容,無需中斷業務。
使用情境
預設情況下,在ACK叢集中掛載NAS儲存卷時,PVC中聲明的storage並不會生效,PV中實際可用的容量為NAS檔案系統的所有容量,您可根據NAS檔案系統的容量限制確認NAS儲存卷實際可用容量。
如您的NAS檔案系統被多個應用共用掛載,建議使用subPath方式掛載子目錄,並啟用目錄配額功能。啟用後,動態建立的子目錄PV容量將受PVC中聲明的storage限制。當容量達到上限時,可通過更新PVC的storage來實現線上擴容,無需中斷業務。 目錄配額功能允許您為不同應用掛載獨立子目錄並設定容量限制,從而更好地管理NAS檔案系統的資源分派,提升管理效率與資源使用率,同時有效控制儲存成本。
如果通過CNFS託管NAS,預設已開啟目錄配額功能。更多資訊,請參見使用CNFS自動擴容NAS儲存卷。
前提條件
叢集中已安裝CSI組件,且組件版本為v1.18.8.45及以上。如需升級,請參見升級csi-plugin和csi-provisioner。
已建立NAS檔案系統和掛載點,且滿足以下條件:
NAS類型為通用型NAS,協議類型為NFS。如不滿足,請重新建立通用型NAS檔案系統。
掛載點和叢集節點在同一VPC內,且狀態為可用。如不滿足,請重新建立掛載點,具體請參見管理掛載點。
使用限制
僅NFS協議的通用型NAS,且通過subpath方式掛載的NAS動態儲存裝置卷支援目錄配額功能,NAS靜態儲存卷,以及通過sharepath或filesystem方式掛載的NAS動態儲存裝置卷不支援。
更多關於目錄配額功能的限制資訊,請參見目錄配額。
使用NAS動態儲存裝置卷並設定目錄配額
步驟一:建立StorageClass並開啟目錄配額功能
修改以下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 # 開啟目錄配額功能,允許動態磁碟區擴容。說明將
allowVolumeExpansion或volumeCapacity配置為true均可開啟目錄配額功能。如果allowVolumeExpansion參數配置為true,volumeCapacity的參數配置將不會生效,目錄配額會始終開啟。需要注意的參數如下,更多資訊,請參見使用NAS動態儲存裝置卷。
參數
說明
parametersvolumeAs使用目錄配額功能時,必須配置為
subpath,表示建立子目錄類型的PV。serverNAS檔案系統的掛載點地址。關於如何查看掛載點地址,請參見管理掛載點。
path掛載NAS檔案系統的子目錄,預設為
/,極速型NAS需要以/share開頭。volumeCapacity是否開啟目錄配額功能。
若同時配置了
allowVolumeExpansion為true,則該參數配置不會生效,配額會始終開啟。allowVolumeExpansion僅通用型NAS檔案系統支援設定此參數。開啟時,該StorageClass動態建立的PV將會被設定配額。
建立StorageClass。
kubectl apply -f alicloud-nas-quota-sc.yaml
步驟二:建立應用並掛載NAS儲存卷
使用以下YAML內容,建立nas-sts.yaml檔案。
以下YAML將建立一個StatefulSet,包含1個Pod,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建立StatefulSet。
kubectl apply -f nas-sts.yaml查看StatefulSet中Pod的部署情況。
kubectl get pod -l app=nginx預期返回:
NAME READY STATUS RESTARTS AGE nas-sts-0 1/1 Running 0 24s查看PV,並確認目錄配額已經生效。
查看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在NAS控制台查看目錄配額詳情。
在NAS控制台的檔案系統列表頁面,單擊目標檔案系統對應的操作列下的
,然後單擊配額管理。在配額管理頁面可以看到已自動產生對應的目錄配額,單擊管理配額可查看詳細資料。樣本如下,可以看到目錄的容量限制為20 GiB。

驗證目錄配額限制
由於以subpath方式掛載的NAS動態儲存裝置卷開啟了目錄配額功能,且聲明容量為20 GiB,因此當掛載目錄下寫入的資料超過20 GiB時,系統會提示磁碟超出配額。
向掛載目錄寫入資料。
命令樣本如下,表示向掛載目錄
/data寫入20000 MiB(約19.53 GiB)的資料。kubectl exec -it nas-sts-0 -- dd if=/dev/zero of=/data/20G.txt bs=1M count=20000等待5~15分鐘後,在NAS控制台查看目錄配額詳情。
在NAS控制台的檔案系統列表頁面,單擊目標檔案系統對應的操作列下的
,然後單擊配額管理。在配額管理頁面,單擊目錄對應的管理配額可查看詳細資料。樣本如下,可以看到目錄的當前容量顯示為19 GiB。

再次向掛載目錄寫入資料,使其容量達到目錄配額限制,將觸發磁碟超出配額的報錯。
命令樣本如下,向掛載目錄
/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動態儲存裝置卷
通過更新PVC的storage的方式,您可以對動態建立的PV進行容量擴容,並查看目錄配額確認NAS儲存卷容量是否擴容成功。此擴容操作不影響線上業務,不會中斷業務。
查看擴容前的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修改PVC,擴容NAS儲存卷的容量。
kubectl patch pvc nas-pvc-nas-sts-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'重要NAS目錄配額的單位為GiB,CSI將按照擴容後的PVC容量為NAS目錄設定配額,實際設定的容量上限為將PVC容量按GiB單位向上取整後的值。
查看擴容後的PV和PVC。
從返回資訊中的
CAPACITY欄位可以確認NAS儲存卷對應的目錄配額已由20 GiB擴容為30 GiB。查看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查看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
在NAS控制台查看目錄配額詳情。
在NAS控制台的檔案系統列表頁面,單擊目標檔案系統對應的操作列下的
,然後單擊配額管理。在配額管理頁面,單擊目錄對應的管理配額可查看詳細資料。樣本如下,可以看到目錄的容量限制已擴容到30 GiB。

常見問題
在掛載和使用NAS儲存卷的過程中,如果遇到問題,可參考以下文檔進行排查。
相關文檔
如需瞭解更多關於NAS目錄配額功能的資訊,請參見目錄配額。
對NAS儲存卷設定目錄配額後,如需監控NAS儲存卷使用方式,您可以通過node_volume_capacity_bytes_used儲存指標,參見建立Prometheus警示規則配置警示進行儲存容量監控。