手動擴容NAS儲存卷需要人工介入。CNFS提供的自動擴容功能更為高效,可預設策略,在儲存用量達到閾值時自動觸發擴容,實現彈性的容量管理。
工作原理
NAS儲存卷的自動擴容由storage-operator組件實現,無需改造業務代碼。其核心工作流程如下。
|
適用範圍
儲存群組件滿足以下要求:
csi-plugin和csi-provisioner:版本不低於v1.20.5-ff6490f-aliyun。
如需升級,請參見升級CSI組件。
storage-operator:版本不低於v1.18.8.56-2aa33ba-aliyun。
如需升級,請參見管理storage-operator組件。
storage-operator為v1.33.1以下版本時,還需手動修改ConfigMap開啟自動擴容功能。
cnfs-controller:組件已安裝。
託管組件,預設安裝,需確保未卸載。
已建立CNFS且狀態為Available。可參見通過CNFS管理NAS檔案系統中關於建立CNFS的內容。
步驟一:定義NAS儲存卷擴容策略
自動擴容的核心在於定義策略。此步驟將建立一個策略,指定擴容的觸發條件與行為。
使用以下YAML模板建立StorageAutoScalerPolicy。
該策略定義了當標籤為app: nginx的PVC在default或nginx命名空間下,其容量使用率超過80%時,將觸發自動擴容。每次擴容增加當前容量的100%,上限為200 GiB。
cat << EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1alpha1
kind: StorageAutoScalerPolicy
metadata:
name: hybrid-expand-policy
spec:
# 通過標籤選取器,將此策略應用到匹配的PVC上
pvcSelector:
matchLabels:
app: nginx # 與PVC及Deployment的labels配置相同
# 策略生效的命名空間
namespaces:
- default
- nginx
# 觸發擴容的條件
conditions:
- name: condition1
key: volume-capacity-used-percentage # 監控指標:容量使用百分比
operator: Gt # 比較操作:Gt (大於)
values:
- "80" # 閾值:80%
# 滿足條件後執行的操作
actions:
- name: action1
type: volume-expand # 操作類型:擴容
params:
scale: 100% # 擴容幅度:按當前容量的100%增加
limits: 200Gi # 容量上限:擴容後總容量不超過200GiB
EOF參數 | 說明 |
| 通過標籤選取器(Label Selector)匹配需要應用此擴容策略的PVC。 |
| 策略生效的命名空間列表,多個命名空間為“或”邏輯。若不配置,預設為default。 |
| 一條觸發規則,由一個或多個判斷條件(
|
| 滿足
|
步驟二:建立StorageClass
建立StorageClass,定義儲存模板,動態建立基於已有NAS的儲存卷。其中,allowVolumeExpansion必須設定為true,為PV提供明確的容量基準。自動擴容策略依賴此基準計算使用率。
cat << EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alibabacloud-cnfs-nas # StorageClass名稱,將在後續PVC中引用
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
volumeAs: subpath
# server 欄位格式為 <nas-server-address>:/<path>
server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
archiveOnDelete: "true"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# 必須設定為true以啟用卷擴容,這是自動擴容功能的前提
allowVolumeExpansion: true
EOF參數詳細說明,可參見通過CNFS管理NAS檔案系統。
步驟三:部署應用及關聯的PVC
策略建立後,需部署一個帶有匹配標籤的應用及其PV,以關聯策略與PVC。
使用以下YAML模板建立PVC及Deployment。請確保兩者的labels (app: nginx)與策略中pvcSelector.matchLabels的配置完全一致。
cat << EOF | kubectl apply -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cnfs-nas-pvc
labels:
app: nginx # 需與擴容策略中的pvcSelector.matchLabels配置相同
spec:
accessModes:
- ReadWriteMany
# 引用此前建立的StorageClass
storageClassName: alibabacloud-cnfs-nas
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: cnfs-nas-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx # 需與擴容策略中的pvcSelector.matchLabels配置相同
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:
- mountPath: "/data"
name: cnfs-nas-pvc
volumes:
- name: cnfs-nas-pvc
persistentVolumeClaim:
claimName: cnfs-nas-pvc
EOF步驟四:驗證自動擴容結果
策略部署完成後,即可通過類比資料寫入來觸發擴容,並觀察相關事件和監控指標,以驗證策略是否生效。
查看命名空間default下的所有Pod。
kubectl get pods -l app=nginx預期輸出:
NAME READY STATUS RESTARTS AGE cnfs-nas-deployment-56dbcc7fb7-wh79z 1/1 Running 0 20m登入應用Pod並向掛載目錄寫入20 GiB的測試資料,使儲存使用率超過80%的閾值。
寫入時間可能持續較長,具體取決於網路輸送量、後段儲存效能等因素。
kubectl exec -it <podName> -- dd if=/dev/zero of=/data/testfile bs=1G count=20查看觸發擴容的事件。
kubectl get events | grep cnfs-nas-pvc擴容觸發後,系統會產生相關事件。預期輸出中應包含
StartExpand和VolumeResizeSuccessful等事件,表明擴容已成功觸發並完成,容量從 20 GiB 擴容到 40 GiB。12s Warning StartExpand persistentvolumeclaim/cnfs-nas-pvc Start to expand of pvc cnfs-nas-pvc from 20Gi to 40Gi, usedCapacityPercentage:99%, freeSize:204MB. 12s Normal ExternalExpanding persistentvolumeclaim/cnfs-nas-pvc waiting for an external controller to expand this PVC 12s Normal Resizing persistentvolumeclaim/cnfs-nas-pvc External resizer is resizing volume nas-462db2b2-717d-44fe-b0b6-fb4db03a**** 12s Normal VolumeResizeSuccessful persistentvolumeclaim/cnfs-nas-pvc Resize volume succeeded此外,也可以執行
kubectl get pvc,查看PVC的容量是否已更新。在CSI NAS監控大盤查看儲存卷使用資訊。
需開通阿里雲Prometheus監控。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在Prometheus監控頁面,單擊儲存監控頁簽,然後單擊CSI NAS頁簽。
在CSI NAS監控大盤中,選擇NAS儲存卷所在的Namespace及PVC名稱後,在總容量地區可以查看NAS儲存卷當前的容量。
本樣本Namespace選擇default、PVC選擇cnfs-nas-pvc。

從上圖可見,在10:23:30觸發擴容,且擴容後容量為100 GiB。
生產環境使用建議
為了更好地在生產環境中使用NAS儲存卷自動擴容功能,建議遵循以下實踐。
維度 | 說明 |
成本最佳化 |
|
策略與可靠性 |
|
效能考量 | 容量與效能平衡:自動擴容解決容量(Capacity)問題,而非效能(Performance)瓶頸。如果應用因IOPS或大量小檔案讀寫而變慢,應考慮選擇更高效能的NAS類型。 |