阿里雲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。
說明若開啟了
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