如果您的集群版本低于1.16,或者使用的云盘类型为普通云盘,无法通过更新PVC的方式来在线扩容云盘存储卷,您可以直接扩容云盘本身,即手动扩容云盘及其文件系统的容量。
适用范围
本文通过手动扩容存储介质本身容量的方式(不修改PVC)实现云盘存储卷的扩容。如果您的集群版本低于1.16,或者不满足在线扩容云盘存储卷的要求时,可采用该方式。
该方式需要您在ECS侧完成云盘扩容,集群内资源不受影响(即在集群侧查看PVC和PV的容量,仍是扩容前的大小)。为尽量保证集群内PV与PVC的容量显示与实际一致,推荐您使用在线扩容云盘存储卷。
该方式支持在线扩容和离线扩容,请您根据业务需求进行选择。
云盘类型为普通云盘时,不支持在线扩容,请采用离线扩容。
下文以使用云盘静态存储卷中创建的应用为例,进行云盘存储卷扩容。
在线扩容
不暂停应用,直接在ECS侧完成云盘的在线扩容。
步骤一:查看云盘信息
连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群或在CloudShell上通过kubectl管理Kubernetes集群。
查看云盘挂载的Pod的信息,确认Pod处于Running状态。
kubectl get pod
返回示例如下:
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 38s
查看PVC,获取云盘ID。
kubectl get pvc
返回示例如下,可以看到PVC绑定的PV为
d-uf628m33r5rsbi******
(即云盘ID),容量为20 GiB。NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE disk-pvc Bound d-uf628m33r5rsbi****** 20Gi RWO disk <unset> 64s
步骤二:扩容云盘及其文件系统
登录ECS管理控制台。
在左侧导航栏,选择 。
在页面左侧顶部,选择目标资源所在的资源组和地域。
根据云盘ID找到应用挂载的云盘,选中云盘然后单击底部的扩容。
在弹出的向导页,参考界面提示,完成扩容操作。
在确定目标盘与须知页面,确认云盘信息并阅读相关提示,然后单击已知晓并备份,继续扩容。
在配置扩容方式与容量页面,设置扩容参数,然后单击扩容。
参数
描述
示例
参数
描述
示例
扩容后的容量
设置扩容后的容量,扩容后容量不允许小于当前容量。
30 GiB
扩容方式
选择在线扩容,扩容后无需重启,修改后的容量直接生效。
在线扩容
在确认扩容结果页面,确认云盘容量已经扩容成功,然后单击下一步,扩容分区和文件系统。
扩容云盘容量后,还需要扩容文件系统,否则容器内存储空间依然是扩容前的大小。
在扩容分区和文件系统页面,选择通过云助手操作,然后勾选授权本次云助手操作,单击授权云助手。
操作后,请确认云盘容量和文件系统均已扩容成功。
离线扩容
通过将Replica配置为0的方式暂停应用,完成云盘扩容后再重新启动应用。
步骤一:查看云盘信息并暂停应用
连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群或在CloudShell上通过kubectl管理Kubernetes集群。
查看云盘挂载的Pod的信息,确认Pod处于Running状态。
kubectl get pod
返回示例如下:
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 38s
查看PVC,获取云盘ID。
kubectl get pvc
返回示例如下,可以看到PVC绑定的PV为
d-uf628m33r5rsbi******
(即云盘ID),容量为20 GiB。NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE disk-pvc Bound d-uf628m33r5rsbi****** 20Gi RWO disk <unset> 64s
将应用缩容为0个副本,暂停应用。
kubectl scale sts disk-test --replicas=0
预期输出:
statefulset.apps/disk-test scaled
步骤二:扩容云盘
登录ECS管理控制台。
在左侧导航栏,选择 。
在页面左侧顶部,选择目标资源所在的资源组和地域。
根据云盘ID找到应用挂载的云盘,选中云盘然后单击底部的扩容。
在弹出的向导页,参考界面提示,完成扩容操作。
在确定目标盘与须知页面,确认云盘信息并阅读相关提示,然后单击已知晓并备份,继续扩容。
在配置扩容方式与容量页面,设置扩容参数,然后单击扩容。
参数
描述
示例
参数
描述
示例
扩容后的容量
设置扩容后的容量,扩容后容量不允许小于当前容量。
30 GiB
扩容方式
由于暂停应用后,云盘处于待挂载状态,此处只能选择离线扩容。
离线扩容
在确认扩容结果页面,确认云盘容量已经扩容成功,然后单击下一步,扩容分区和文件系统。
在扩容分区和文件系统页面,选择通过文档自助操作,在扩容分区和文件系统(Linux)处查看文档。
扩容云盘容量后,还需要扩容文件系统,否则容器内存储空间依然是扩容前的大小。
由于云盘处于待挂载状态,无法通过云助手操作,请手动扩容文件系统。
步骤三:扩容文件系统
以下操作针对未分区云盘。
不建议在Kubernetes中使用分区云盘。
若PV使用未分区云盘,则不能手动执行分区操作,否则将会对当前文件系统产生破坏,造成数据丢失。
若PV使用分区云盘,则需要扩容分区设备后扩容文件系统。具体操作,请参见扩容分区和文件系统(Linux)或扩容分区和文件系统(Windows)。
将云盘挂载到ECS实例。
在ECS管理控制台的块存储页面,找到目标云盘,在操作列中单击挂载。
在挂载到实例的向导页,选择要挂载的ECS实例,然后单击下一步。
请勿选中云盘相关释放行为。
在分区及创建文件系统并挂载的向导页,在初始化方式区域单击稍后设置。
确认云盘的状态已变更为使用中。
连接到ECS实例。具体操作,请参见ECS远程连接方式概述。
获取云盘设备符。
命令示例如下,其中
<serial>
为云盘的序列号,请根据实际替换。您可以通过云盘ID快速确认云盘序列号(云盘ID=d-{云盘序列号})。更多信息,请参见查看块存储序列号。
如果云盘创建时间早于2020年06月10日,则不支持序列号特性,您无法通过以下命令获取云盘设备符。您可在云盘挂载前和挂载后分别执行
ls /dev/vd*
命令查看云盘列表,比较两者的差异确认目标云盘的设备符。realpath /dev/disk/by-id/virtio-<serial>
返回示例如下,表示云盘设备符为
/dev/vdb
。/dev/vdb
扩容文件系统。
命令示例如下,其中请替换为实际的云盘设备符。
resize2fs /dev/vdb
如果返回以下错误提示,请先按照提示执行
e2fsck -f /dev/vdb
再执行resize2fs /dev/vdb
扩容文件系统。resize2fs 1.46.0 (29-Jan-2020) Please run 'e2fsck -f /dev/vdb' first.
扩容文件系统后,预期返回如下:
resize2fs 1.46.0 (29-Jan-2020) Resizing the filesystem on /dev/vdb to 7864320 (4k) blocks. The filesystem on /dev/vdb is now 7864320 (4k) blocks long.
确认文件系统扩容成功。
创建临时文件夹
/mnt/disk/
,并将云盘挂载到临时文件夹上.mkdir /mnt/disk mount /dev/vdb /mnt/disk/
查看文件系统大小。
df /mnt/disk/
预期返回如下,可以看到
/dev/vdb
的容量已扩容到30 GiB。Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 30787536 24 30771128 1% /mnt/disk
将云盘从临时文件夹卸载。
umount /mnt/disk
从ECS实例上卸载云盘。具体操作,请参见卸载数据盘。
步骤四:重启应用
将应用扩容为1个副本,重启应用。
kubectl scale sts disk-test --replicas=1
预期输出:
statefulset.apps/disk-test scaled
确认Pod是否恢复。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 5s
查看文件系统大小。
kubectl exec -it disk-test-0 -- df /data
预期输出如下,可以看到挂载路径对应的文件系统已扩容成功。
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 30787536 24 30771128 1% /data
- 本页导读 (1)
- 适用范围
- 在线扩容
- 步骤一:查看云盘信息
- 步骤二:扩容云盘及其文件系统
- 离线扩容
- 步骤一:查看云盘信息并暂停应用
- 步骤二:扩容云盘
- 步骤三:扩容文件系统
- 步骤四:重启应用