在Kubernetes 1.16版中,云盘数据卷在线扩容已经进入Beta阶段,ACK支持在Kubernetes 1.16及以上版本中实现CSI云盘在线扩容。本文介绍在CSI环境中如何进行云盘的动态扩容,从而增加云盘空间。
背景信息
云盘数据卷扩容包括云盘扩容和文件系统扩容两部分,云盘和文件系统都支持应用在线扩容(设备mount到目录状态下扩容),但是从文件系统扩容最佳实践角度,最稳定的扩容方案是先停止应用层服务、解除挂载目录,再进行数据卷扩容。
基于稳定性需求,提供以下两种扩容的方式:
- Pod不重启实现数据卷扩容:在负载高IO情况下,有小概率造成文件系统问题。
- Pod重启时实现数据卷扩容:应用停止后,扩容更安全。
从Kubernetes 1.16开始默认实现了Pod不重启即可以实现数据卷扩容。
为RAM用户添加ResizeDisk权限
实现云盘在线扩容前,您需要为集群的RAM角色添加ResizeDisk权限。针对不同集群和插件类型,添加ResizeDisk权限的步骤如下:
专有集群(CSI插件)
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面,选中目标集群,并在目标集群右侧操作列下,单击详情。
- 在集群管理页左侧导航栏中,单击集群信息。
- 单击集群资源页签,单击Master RAM角色链接。
- 在RAM控制台中,添加ResizeDisk权限。添加权限具体步骤,请参见修改自定义策略内容。

专有集群(Flexvolume插件)、托管集群
参照上述步骤,并将上述步骤5中的单击Master RAM 角色链接改成单击Worker RAM 角色链接。
不重启容器实现在线扩容
- 使用命令行工具连接Kubernetes集群,请参见通过kubectl连接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-wz9hpoifm43yn9zie6gl 20Gi RWO alicloud-disk-available 57s
执行以下命令获取PV信息。
kubectl get pv
返回结果如下:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
d-wz9hpoifm43yn9zie6gl 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-wz9hpoifm43yn9zie6gl
返回结果如下:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
d-wz9hpoifm43yn9zie6gl 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-wz9hpoifm43yn9zie6gl 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
您只需要执行一条命令即可完成所有的扩容操作。
重启容器实现在线扩容
- 通过命令行工具连接Kubernetes集群,请参见通过kubectl连接Kubernetes集群。
本文假设应用的当前状态如下。
执行以下命令查看Pod信息。
kubectl get pod
返回结果如下:
web-0 1/1 Running 0 42s
执行以下命令查看Pod下的挂载详情。
kubectl exec web-0 df /data
返回结果如下:
/dev/vdb 20511312 45080 20449848 1% /data
执行以下命令查看PVC信息。
kubectl get pvc
返回结果如下:
disk-ssd-web-0 Bound d-wz9g2j5qbo37r2lamkg4 20Gi RWO alicloud-disk-available 7m4s
执行以下命令查看PV信息。
kubectl get pv d-wz9g2j5qbo37r2lamkg4
返回结果如下:
d-wz9g2j5qbo37r2lamkg4 20Gi RWO Delete Bound default/disk-ssd-web-0 alicloud-disk-available 7m18s
- 执行以下命令向PV中添加调度labels,其value值为一个不存在对应zone的随意字符串。
kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone=cn-nozone
persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeled
- 重启Pod。
由于修改了调度信息,Pod会暂时Pending。
执行以下命令删除Pod。
kubectl delete pod web-0
执行以下命令查看Pod信息。
kubectl get pod
返回结果如下:
web-0 0/1 Pending 0 27s
- 执行以下命令扩容数据卷。
kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
- 删除PV的调度信息lable,促使Pod完成启动。
kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone-
返回结果如下:
persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeled
等待一定时间(一分钟内)后检查扩容是否符合预期。
执行以下命令查看Pod信息。
kubectl get pod
返回结果如下:
web-0 1/1 Running 0 3m23s
执行以下命令查看PVC信息。
kubectl get pvc
返回结果如下:
disk-ssd-web-0 Bound d-wz9g2j5qbo37r2lamkg4 30Gi RWO alicloud-disk-available 17m
执行以下命令查看PV信息。
kubectl get pv d-wz9g2j5qbo37r2lamkg4
返回结果如下:
d-wz9g2j5qbo37r2lamkg4 30Gi RWO Delete Bound default/disk-ssd-web-0 alicloud-disk-available 17m
执行以下命令查看Pod下的挂载详情。
kubectl exec web-0 df /data
返回结果如下:
/dev/vdb 30832548 45036 30771128 1% /data
可以看出云盘由20 GiB成功被扩容至30 GiB。
在文档使用中是否遇到以下问题
更多建议
匿名提交