在1.16版本的集群中,云盘存储卷在线扩容已经进入Beta阶段。ACK支持在1.16及以上版本的集群中实现CSI云盘在线扩容。本文介绍应用在线时如何动态扩容云盘,从而增加云盘空间。
使用说明
使用限制
为保证数据扩容安全,在未启用在线扩容自动完成数据备份功能时,仅支持在线扩容2000 GiB及以下容量的云盘;启用该功能后,可支持扩容32 TiB及以下容量的云盘。
数据备份
扩容存储卷前,请先备份云盘快照,以防扩容过程异常导致数据出现问题。
适用范围
只有动态存储卷才可以进行存储卷动态扩容,即配置了StorageClassName的PVC。
不支持扩容InlineVolume类型(非PV、PVC方式)的云盘存储卷。
不支持动态扩容普通云盘类型。
StorageClass需要配置为AllowVolumeExpansion: True。ACK集群默认提供的StorageClass为True,自建的StorageClass需要自行配置。
应用Pod需处于Running状态。
插件版本
升级您使用的CSI插件到最新版本。
为RAM用户添加ResizeDisk权限
实现云盘在线扩容前,您需要为集群的RAM角色添加ResizeDisk权限。针对不同集群和插件类型,添加ResizeDisk权限的步骤如下:
ACK专有集群(CSI插件)
登录容器服务管理控制台。
在控制台左侧导航栏中,单击集群。
在集群列表页面,选中目标集群,并在目标集群右侧操作列下,单击详情。
在集群管理页左侧导航栏中,单击集群信息。
单击集群资源页签,单击Master RAM角色链接。
在RAM控制台中,添加ResizeDisk权限。添加权限具体步骤,请参见改自定义权限策略内容和备注。
ACK专有集群(Flexvolume插件)、ACK托管集群(所有插件类型)
重复上述前4个步骤,然后在集群管理页面单击Worker RAM 角色链接。
不重启容器实现在线扩容
使用命令行工具连接ACK集群,请参见步骤二:选择集群凭证类型。
本文假设应用的当前状态如下。
执行以下命令获取Pod信息。
kubectl get pod
预期输出:
<your-pod-name> 1/1 Running 0 42s
执行以下命令查看Pod的挂载详情。
kubectl exec <your-pod-name> -- df /data
预期输出:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 20511312 45080 20449848 1% /data
执行以下命令获取PVC信息。
kubectl get pvc
预期输出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE <your-PVC-name> Bound d-wz9hpoifm43yn9zi**** 20Gi RWO alicloud-disk-topology-alltype 57s
执行以下命令获取PV信息。
kubectl get pv
预期输出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-wz9hpoifm43yn9zi**** 20Gi RWO Delete Bound default/<your-PVC-name> alicloud-disk-topology-alltype 65s
kubectl patch pvc <your-PVC-name> -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
等待一定时间(一分钟以内)后扩容完成,检查状态如下。
执行以下命令查看PV信息。
kubectl get pv d-wz9hpoifm43yn9zi****
预期输出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-wz9hpoifm43yn9zi**** 30Gi RWO Delete Bound default/<your-PVC-name> alicloud-disk-topology-alltype 5m23s
执行以下命令查看PVC信息。
kubectl get pvc
预期输出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE <your-PVC-name> Bound d-wz9hpoifm43yn9zi**** 30Gi RWO alicloud-disk-topology-alltype 5m10s
执行以下命令查看Pod的挂载详情。
kubectl exec <your-pod-name> -- df /data
预期输出:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 30832548 45036 30771128 1% /data
您只需要执行一条命令即可完成所有的扩容操作。
ESSD云盘在线扩容自动完成数据备份
ESSD云盘在线扩容自动完成数据备份功能的实现流程如下图所示。
流程序号 | 说明 |
① | 表示创建ESSD云盘在线扩容请求。 |
② | 表示对扩容前的云盘自动创建极速快照。 |
③ | 表示云盘扩容。 |
④ | 表示云盘内文件系统扩容。 |
⑤ | 表示扩容成功,删除自动创建的极速快照。 |
当流程③和④扩容失败时,自动创建的极速快照将被保留,用于数据恢复。
使用极速快照功能时,会产生一定费用。具体计费规则,请参见使用快照极速可用功能。
使用ESSD云盘在线扩容自动完成数据备份功能的操作步骤如下。
在创建StorageClass时,设置参数volumeExpandAutoSnapshot为forced,开启自动数据备份功能。
执行以下命令获取StorageClass信息。
kubectl describe sc <your-storageClass-name> | grep volumeExpandAutoSnapshot
预期在Annotations中输出:
"volumeExpandAutoSnapshot":"forced"
预期在Parameters中输出:
volumeExpandAutoSnapshot=forced
执行以下命令获取PVC信息。
kubectl get pvc
预期输出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE <your-PVC-name> Bound d-2ze39o7sv976dz1y**** 20Gi RWO <your-storageClass-name> 13h
在符合快照使用说明和云盘扩容说明除数据备份外的条件,且云盘类型为ESSD时,进行备份及扩容操作。
执行以下命令进行备份及扩容。
kubectl patch pvc <your-PVC-name> -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
等待一段时间扩容完成,检查状态如下。
执行以下命令查看PVC信息。
kubectl describe pvc <your-PVC-name>
预期在Events中输出:
Normal SnapshotCreatedSuccessfully 91s csi-controller-server ControllerExpandVolume:: Snapshot create successful: snapshotName[volume-expand-auto-snapshot-d-2ze39o7sv976dz1y****-2022-08-17-21:30:48], sourceId[d-2ze39o7sv976dz1y****], snapshotId[s-2ze85t4rk5d695ha****]
云盘通过自动快照实现数据备份。
若扩容成功,快照将自动删除。
若扩容失败,可通过快照手动恢复数据,快照默认保留时间24小时。
相关文档
如需在存储卷的使用率高于某个阈值时自动扩容存储卷,请参见自动扩容云盘存储卷(公测)。