通过定义CNFS中托管的NAS存储卷的自动扩容策略,当NAS存储卷的使用率高于某个阈值时,触发NAS存储卷的自动扩容。本文介绍如何使用CNFS实现NAS存储卷的自动扩容。
前提条件
已创建Kubernetes托管版集群,且存储插件选择为CSI。
若需要新建集群,选择CSI存储插件时,请同时选中创建默认NAS文件系统和CNFS容器网络文件系统动态存储类型,并默认开启NAS回收站特性,支持数据快速恢复。
若已创建集群,但未选中开启默认创建的功能,请使用CNFS托管NAS文件系统。具体操作,请参见通过CNFS方式使用NAS文件系统。
csi-plugin和csi-provisioner组件版本不低于v1.20.5-ff6490f-aliyun。关于升级csi-plugin和csi-provisioner组件的操作,请参见升级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-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中。
kubectl exec cnfs-nas-deployment-56dbcc7fb7-wh79z -ti sh
执行以下命令在NAS存储卷挂载目录写入50 GiB的测试数据。
cd /data dd if=<数据路径> of=<挂载路径>
执行以下命令查看触发扩容的事件。
kubectl get events
预期输出:
default 0s Warning NotEnoughDiskSpace persistentvolumeclaim/cnfs-nas-pvc Pvc cnfs-nas-pvc is not enough disk space, namespace: default, totalSize:50Gi, usedSize:49Gi, usedPercentage:98.00%, threshold:85.00% default 1s Warning StartExpand persistentvolumeclaim/cnfs-nas-pvc Start to expand of pvc cnfs-nas-pvc from 50Gi to 100Gi, usedCapacityPercentage:98%, freeSize:1024MB. default 0s Normal Resizing persistentvolumeclaim/cnfs-nas-pvc External resizer is resizing volume nas-1acba306-e626-46f3-8441-110c10a6**** default 0s Warning ExternalExpanding persistentvolumeclaim/cnfs-nas-pvc Ignoring the PVC: didn't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC. default 0s Normal FileSystemResizeRequired persistentvolumeclaim/cnfs-nas-pvc Require file system resize of volume on node default 0s Normal FileSystemResizeSuccessful pod/cnfs-nas-deployment-56dbcc7fb7-wh79z MountVolume.NodeExpandVolume succeeded for volume "nas-1acba306-e626-46f3-8441-110c10a6****"
从以上预期输出可得,当前NAS存储卷的容量使用量已超过80%,触发扩容,NAS存储卷容量将从50 GiB扩容到100 GiB。
在CSI Nodes监控大盘查看CNFS监控信息。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Prometheus监控页面,单击存储监控页签,然后单击CSI存储组件监控-节点维度页签。
在CSI存储组件监控-节点维度页面,选择NAS存储卷所在的StorageType、Namespace及PVC名称后,在Total Capacity区域可以查看NAS存储卷当前的容量。
本示例StorageType选择为nas、Namespace选择为default、PVC为cnfs-nas-pvc。
从上图可见,在16:55:30触发扩容,且扩容后容量为100 GiB。