在Kubernetes 1.16版中,云盘数据卷在线扩容已经进入Beta阶段,ACK支持在Kubernetes 1.16及以上版本中实现CSI云盘在线扩容。本文介绍应用在线时如何动态扩容云盘,从而增加云盘空间。
使用说明
- 使用限制
仅支持在线扩容2000 GiB及以下容量的云盘。
- 数据备份
扩容数据卷前,先备份云盘快照,以防扩容过程异常导致数据出现问题。
- 适用范围
- 只有动态存储卷才可以进行数据卷动态扩容,即配置了StorageClassName的PVC。
- 不支持扩容InlineVolume类型(非PV、PVC方式)的云盘数据卷。
- 不支持动态扩容普通云盘类型。
- StorageClass需要配置为AllowVolumeExpansion: True。ACK集群默认提供的StorageClass为True,自建的StorageClass需要自行配置。
- 应用Pod需处于Running状态。
- 插件版本
升级您使用的CSI插件到最新版本。
为RAM用户添加ResizeDisk权限
实现云盘在线扩容前,您需要为集群的RAM角色添加ResizeDisk权限。针对不同集群和插件类型,添加ResizeDisk权限的步骤如下:
专有版集群(CSI插件)
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面,选中目标集群,并在目标集群右侧操作列下,单击详情。
- 在集群管理页左侧导航栏中,单击集群信息。
- 单击集群资源页签,单击Master RAM角色链接。
- 在RAM控制台中,添加ResizeDisk权限。添加权限具体步骤,请参见修改自定义权限策略内容和备注。
专有版集群(Flexvolume插件)、托管版集群(所有插件类型)
重复上述前4个步骤,然后在集群管理页面单击Worker RAM 角色链接。
不重启容器实现在线扩容
- 使用命令行工具连接Kubernetes集群,请参见步骤二:选择集群凭证类型。
本文假设应用的当前状态如下。
执行以下命令获取Pod信息。
kubectl get pod
预期输出:
web-0 1/1 Running 0 42s
执行以下命令查看Pod的挂载详情。
kubectl exec web-0 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 disk-ssd-web-0 Bound d-wz9hpoifm43yn9zi**** 20Gi RWO alicloud-disk-available 57s
执行以下命令获取PV信息。kubectl get pv
预期输出:NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-wz9hpoifm43yn9zi**** 20Gi RWO Delete Bound default/disk-ssd-web-0 alicloud-disk-available 65s
- 在符合使用说明的各个条件下,执行以下命令进行数据卷扩容。
kubectl patch pvc disk-ssd-web-0 -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/disk-ssd-web-0 alicloud-disk-available 5m23s
执行以下命令查看PVC信息。
kubectl get pvc
预期输出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-ssd-web-0 Bound d-wz9hpoifm43yn9zi**** 30Gi RWO alicloud-disk-available 5m10s
执行以下命令查看Pod的挂载详情。
kubectl exec web-0 df /data
预期输出:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 30832548 45036 30771128 1% /data
您只需要执行一条命令即可完成所有的扩容操作。
ESSD云盘在线扩容自动完成数据备份
ESSD云盘在线扩容自动完成数据备份功能的实现流程如下图所示。

流程序号 | 说明 |
---|---|
① | 表示创建ESSD云盘在线扩容请求。 |
② | 表示对扩容前的云盘自动创建极速快照。 |
③ | 表示云盘扩容。 |
④ | 表示云盘内文件系统扩容。 |
⑤ | 表示扩容成功,删除自动创建的极速快照。 |
说明
- 当流程③和④扩容失败时,自动创建的极速快照将被保留,用于数据恢复。
- 使用极速快照功能时,会产生一定费用。具体计费规则,请参见使用快照极速可用功能。
使用ESSD云盘在线扩容自动完成数据备份功能的操作步骤如下。
- 在创建StorageClass时,设置参数volumeExpandAutoSnapshot为forced,开启自动数据备份功能。
- 执行以下命令获取StroageClass信息。
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时,进行备份及扩容操作。云盘通过自动快照实现数据备份。
- 若扩容成功,快照将自动删除。
- 若扩容失败,可通过快照手动恢复数据,快照默认保留时间24小时。