通过定义CNFS中托管的NAS存储卷的自动扩容策略,当NAS存储卷的使用率高于阈值时触发自动扩容。本文介绍如何使用CNFS实现NAS存储卷的自动扩容。
前提条件
集群使用容器网络文件系统CNFS来管理NAS文件系统。更多信息,请参见通过CNFS管理NAS文件系统(推荐)。
集群的存储插件为CSI,且存储相关组件满足以下要求:
csi-plugin和csi-provisioner组件版本不低于v1.20.5-ff6490f-aliyun。如需升级,请参见升级csi-plugin和csi-provisioner。
csi-plugin默认的
dnsPolicy
是ClusterFirst
。若要使用CNFS自动扩容NAS存储卷,需要手动将ClusterFirst
改为ClusterFirstWithHostNet
。storage-operator组件版本不低于v1.18.8.56-2aa33ba-aliyun。如需升级,请参见管理storage-operator组件。
步骤一:配置storage-operator组件开启自动扩容
storage-operator组件中默认的storage-auto-expander负责自动扩容存储资源。连接集群,执行以下命令修改storage-operator的ConfigMap文件,开启自动扩容功能。
kubectl patch configmap/storage-operator \
-n kube-system \
--type merge \
-p '{"data":{"storage-auto-expander":"{\"imageRep\":\"acs/storage-auto-expander\",\"imageTag\":\"\",\"install\":\"true\",\"template\":\"/acs/templates/storage-auto-expander/install.yaml\",\"type\":\"deployment\"}"}}'
步骤二:配置NAS自动扩容策略
查看CNFS对象的状态,需要确保CNFS对象的状态为Available。
查看CNFS对象。
kubectl get cnfs
预期输出:
NAME AGE default-cnfs-nas-837d6ea-20210819155623 14d
查看CNFS对象的状态。
kubectl get cnfs <上一步查询到的CNFS对象> -o yaml | grep Available
预期输出:
status: Available
使用以下YAML模板创建NAS扩容策略。
cat << EOF | kubectl apply -f - apiVersion: storage.alibabacloud.com/v1alpha1 kind: StorageAutoScalerPolicy metadata: name: hybrid-expand-policy spec: pvcSelector: matchLabels: app: nginx # 需要与PVC及Deployment下labels的配置相同,本示例均为app: nginx。 namespaces: - default - nginx conditions: - name: condition1 key: volume-capacity-used-percentage operator: Gt values: - "80" actions: - name: action1 type: volume-expand params: scale: 100% limits: 500Gi EOF
参数
说明
pvcSelector
选择目标PVC,通过Label-Selector方式实现扩容策略与PVC之间的匹配。本示例为nginx。
namespaces
表示目标PVC所在的命名空间,多个命名空间为或逻辑。若不配置,默认为default。本示例为default及nginx。
conditions
表示触发规则的条件,多个condition为与逻辑。每个condition包含以下参数:
key:定义一个Metric的类型。
volume-capacity-used-percentage:表示容量使用百分比。
operator:定义规则,包含Gt(大于)、Lt(小于)、Eq(等于)或Ne(不等于),不限制英文字母大小写。
values:规则的具体数值。
本示例表示当PVC容量的使用率高于80%时会触发actions。
actions
表示满足上述conditions时执行的操作,可以是多个操作。包含以下参数:
type:表示行为方式,目前只支持扩容。
scale:表示扩容的大小,单位为GiB,或可使用百分比。
limits:表示PVC在此action中的最大限制。
若actions中有多个action时,则从首个action开始匹配,执行首个满足条件的action,其余跳过。
本示例的action1表示,当满足扩容条件时NAS存储卷容量以当前容量的100%为单位扩容,最大扩容到500 GiB。
使用以下YAML模板创建PVC及Deployment。
重要通过匹配扩容策略与对应PVC及Deployment之间的标签,将扩容策略应用到PVC及Deployment中。例如,本示例扩容策略中pvcSelector.matchLabels的值为
app: nginx
,对应PVC及Deployment中labels的值为app: nginx
。cat << EOF | kubectl apply -f - kind: PersistentVolumeClaim apiVersion: v1 metadata: name: cnfs-nas-pvc labels: app: nginx # 需要与扩容策略YAML模板下pvcSelector.matchLabels的配置相同,本示例均为app: nginx。 spec: accessModes: - ReadWriteMany storageClassName: alibabacloud-cnfs-nas resources: requests: storage: 50Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: cnfs-nas-deployment labels: app: nginx spec: selector: matchLabels: app: nginx # 需要与扩容策略YAML模板下pvcSelector.matchLabels的配置相同,本示例均为app: nginx。 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 volumeMounts: - mountPath: "/data" name: cnfs-nas-pvc volumes: - name: cnfs-nas-pvc persistentVolumeClaim: claimName: cnfs-nas-pvc EOF
步骤三:验证NAS存储卷的自动扩容
查看命名空间default下的所有Pod。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE cnfs-nas-deployment-56dbcc7fb7-wh79z 1/1 Running 0 20m
进入应用Pod,在NAS存储卷挂载目录写入50 GB的测试数据。
cd /data dd if=<数据路径> of=<挂载路径> kubectl exec -it cnfs-nas-deployment-56dbcc7fb7-wh79z -ti -- dd if=/dev/zero of=/data/test1 bs=1G count=50
查看触发扩容的事件。
kubectl get events
预期输出如下,可以看到当前NAS存储卷的容量使用量已超过80%,触发扩容,NAS存储卷容量将从50 GiB扩容到100 GiB。
12s Warning StartExpand persistentvolumeclaim/cnfs-nas-pvc Start to expand of pvc cnfs-nas-pvc from 50Gi to 100Gi, usedCapacityPercentage:96%, freeSize:2048MB. 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
在CSI NAS监控大盘查看存储卷使用信息。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Prometheus监控页面,单击存储监控页签,然后单击CSI NAS页签。
在CSI NAS监控大盘中,选择NAS存储卷所在的Namespace及PVC名称后,在总容量区域可以查看NAS存储卷当前的容量。
本示例Namespace选择default、PVC选择cnfs-nas-pvc。
从上图可见,在10:23:30触发扩容,且扩容后容量为100 GiB。