You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
云盘存储(EBS)
动态扩容云盘数据卷
复制全文
下载 pdf
动态扩容云盘数据卷
容器服务支持在线扩容 PV 以及对应的云盘文件系统,当待扩容的云盘文件系统未被挂载时,支持重启 Pod 的情况下在线扩容;当待扩容的云盘文件系统已经挂载到节点时,支持不重启 Pod 的情况下在线扩容。本文针对云盘动态存储卷场景,为您介绍扩容云盘的详细操作。
前提条件
  • 已创建 v1.20.15-vke.11 及以上版本的容器服务集群,且将 csi-ebs 组件升级为最新版本。
  • 已经使用云盘动态存储卷,其中 StorageClass 中设置 allowVolumeExpansion:true。详细介绍参见:使用云盘动态存储卷
  • 为了避免扩容失败导致数据丢失,建议在扩容前备份数据,详细介绍参见:使用云盘快照
操作步骤
方式一(推荐):重启 Pod 实现离线扩容
待扩容的云盘文件系统未被挂载,能够避免扩容出错和文件系统扩容错误的问题,为了确保文件系统的稳定性,推荐使用该方式进行扩容
  1. 执行 kubectl exec [pod_name] df [数据卷挂载路径] 命令,查看扩容前文件系统状态;执行 kubectl get pv [pv_name] 命令,查看 PV 状态。示例如下(PV 和文件系统大小均为 20 GiB):
$ kubectl exec deployment-nginx-mlt-7db45f9b6-5jckg df /usr/share/nginx/html
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vdc 20511312 45080 20449848 1% /usr/share/nginx/html
$ kubectl get pv pvc-6c98cd01-dd32-4636-ac11-794ce9fff540
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-6c98cd01-dd32-4636-ac11-794ce9fff540 20Gi RWO Delete Bound default/pvc-for-sc-mlt sc-ebs-ssd-mlt 3m55s
  1. 执行kubectl label pv [pv_name] topology.kubernetes.io/zone=nozone命令,为 PV 打一个非法 zone 标签,目的在于 Pod 重启后将无法调度到某个节点上。示例如下:
$ kubectl label pv pvc-6c98cd01-dd32-4636-ac11-794ce9fff540 topology.kubernetes.io/zone=nozone
persistentvolume/pvc-6c98cd01-dd32-4636-ac11-794ce9fff540 labeled
  1. 执行kubectl delete pod [pod_name]命令,删除当前 Pod 并重启一个新的 Pod,由于 Pod 对应的 PV 标签是非法 zone,重启后的 Pod 将处于 Pending 状态。示例如下:
$ kubectl delete pod deployment-nginx-mlt-7db45f9b6-5jckg
pod "deployment-nginx-mlt-7db45f9b6-5jckg" deleted
$ kubectl get pod deployment-nginx-mlt-7db45f9b6-frqvb # 查询 Pod 状态
NAME READY STATUS RESTARTS AGE
deployment-nginx-mlt-7db45f9b6-frqvb 0/1 Pending 0 28s
$ kubectl describe pod deployment-nginx-mlt-7db45f9b6-frqvb # 查询 Pod 详细信息
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 52s default-scheduler 0/6 nodes are available: 2 node(s) had no available volume zone, 4 node(s) had volume node affinity conflict.
Warning FailedScheduling 50s (x1 over 52s) default-scheduler 0/6 nodes are available: 2 node(s) had no available volume zone, 4 node(s) had volume node affinity conflict.
说明
执行kubectl delete命令删除 Pod 后,将重启一个新的 Pod,此时 Pod 名称将发生变化。
  1. 执行kubectl patch pvc [pvc_name] -p '{"spec":{"resources":{"requests":{"storage":"[扩容后的容量]"}}}}'命令,修改 PVC 中的容量,将容量扩容至 30 GiB。示例如下:
说明
推荐扩容后的 PVC 容量大小为 10 的倍数。
$ kubectl patch pvc pvc-for-sc-mlt -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
persistentvolumeclaim/pvc-for-sc-mlt patched
  1. 执行kubectl label pv [pv_name] topology.kubernetes.io/zone-命令,去除 PV 先前打的标签,标签去除后 Pod 即可调度成功。示例如下:
$ kubectl label pv pvc-6c98cd01-dd32-4636-ac11-794ce9fff540 topology.kubernetes.io/zone-
persistentvolume/pvc-6c98cd01-dd32-4636-ac11-794ce9fff540 unlabeled
  1. 执行以下命令,验证扩容结果。从返回结果可以看,Pod 状态为 Running、对应 PV 和文件系统已经从 20 GiB 扩容到 30 GiB。示例如下:
$ kubectl get pod deployment-nginx-mlt-7db45f9b6-frqvb # 查看 Pod 状态
NAME READY STATUS RESTARTS AGE
deployment-nginx-mlt-7db45f9b6-frqvb 1/1 Running 0 3m39s
$ kubectl get pv pvc-6c98cd01-dd32-4636-ac11-794ce9fff540 # 查看 pv 存储容量
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-6c98cd01-dd32-4636-ac11-794ce9fff540 30Gi RWO Delete Bound default/pvc-for-sc-mlt sc-ebs-ssd-mlt 9m46s
$ kubectl get pvc pvc-for-sc-mlt # 查看 pvc 存储容量
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-for-sc-mlt Bound pvc-6c98cd01-dd32-4636-ac11-794ce9fff540 30Gi RWO sc-ebs-ssd-mlt 10m
$ kubectl exec deployment-nginx-mlt-7db45f9b6-frqvb df /usr/share/nginx/html # 查看文件系统状态
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vdc 30832548 45036 30771128 1% /usr/share/nginx/html
方式二:不重启 Pod 实现在线扩容
在节点上挂载着待扩容的云硬盘文件系统,如果扩容期间存在 I/O 进程,可能会出现文件系统扩容错误的情况,请注意规避。
  1. 执行 kubectl exec [pod_name] df [数据卷挂载路径] 命令,查看扩容前文件系统状态;执行 kubectl get pv [pv_name] 命令,查看 PV 状态。示例如下(PV 和文件系统大小均为 20 GiB):
$ kubectl exec deployment-nginx-mlt-7db45f9b6-5jckg df /usr/share/nginx/html
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vdc 20511312 45080 20449848 1% /usr/share/nginx/html
$ kubectl get pv pvc-6c98cd01-dd32-4636-ac11-794ce9fff540
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-6c98cd01-dd32-4636-ac11-794ce9fff540 20Gi RWO Delete Bound default/pvc-for-sc-mlt sc-ebs-ssd-mlt 3m55s
  1. 执行kubectl patch pvc [pvc_name] -p '{"spec":{"resources":{"requests":{"storage":"[扩容后的容量]"}}}}'命令,修改 PVC 中的容量,将容量扩容至 30 GiB。示例如下:
说明
推荐扩容后的 PVC 容量大小为 10 的倍数。
$ kubectl patch pvc pvc-for-sc-mlt -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
persistentvolumeclaim/pvc-for-sc-mlt patched
  1. 重复步骤一中的命令,验证扩容结果。从返回结果可以看到,PV 和文件系统已经从 20 GiB 扩容至 30 GiB。示例如下:
$ kubectl exec deployment-nginx-mlt-7db45f9b6-5jckg df /usr/share/nginx/html
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vdc 30832548 45036 30771128 1% /usr/share/nginx/html
$ kubectl get pv pvc-6c98cd01-dd32-4636-ac11-794ce9fff540
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-6c98cd01-dd32-4636-ac11-794ce9fff540 30Gi RWO Delete Bound default/pvc-for-sc-mlt sc-ebs-ssd-mlt 9m46s
最近更新时间:2025.08.06 11:40:45
这个页面对您有帮助吗?
有用
有用
无用
无用