阿里云容器服務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。
說明若開啟了
allowVolumeExpansion
,則該參數配置不會生效,配額將始終開啟。provisioner
表示ACK動態卷控制器名稱。
reclaimPolicy
表示PV的回收策略。可選值為:
Retain
:保留后端存儲,刪除PV及PVC不會刪除對應的后端存儲,例如云盤。Delete
:當刪除PVC時,自動刪除PV和后端的存儲。
allowVolumeExpansion
表示是否支持NAS存儲卷的擴容。
說明創建帶有配額子目錄NAS的StorageClass,需要開啟配額功能,即
volumeCapacity=true
或者allowVolumeExpansion=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