容器服务支持在线扩容 PV 以及对应的云盘文件系统,当待扩容的云盘文件系统未被挂载时,支持重启 Pod 的情况下在线扩容;当待扩容的云盘文件系统已经挂载到节点时,支持不重启 Pod 的情况下在线扩容。本文针对云盘动态存储卷场景,为您介绍扩容云盘的详细操作。
allowVolumeExpansion:true
。详细介绍参见:使用云盘动态存储卷。待扩容的云盘文件系统未被挂载,能够避免扩容出错和文件系统扩容错误的问题,为了确保文件系统的稳定性,推荐使用该方式进行扩容。
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
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
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 名称将发生变化。
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
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
$ 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
在节点上挂载着待扩容的云硬盘文件系统,如果扩容期间存在 I/O 进程,可能会出现文件系统扩容错误的情况,请注意规避。
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
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
$ 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