手动扩容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类型。 |