阿里雲Container ServiceCSI支援對NAS卷的子目錄進行配額限制。通過配額限制,可以確保您在資源分派的基礎上,提升整體資源的利用率。當磁碟配額達到上限時,您還可以手動線上擴容的方式對儲存卷進行擴容且不影響業務運行。
前提條件
csi-plugin的鏡像版本不低於v1.18.8.45。關於csi-plugin的版本說明,請參見csi-plugin。
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