tencent cloud

文档反馈

在线扩容云硬盘

最后更新时间:2023-12-20 09:25:57

    操作场景

    TKE 支持在线扩容 PV、对应的云硬盘及文件系统,即不需要重启 Pod 即可完成扩容。为确保文件系统的稳定性,建议在云硬盘文件系统处于未挂载状态时进行操作。

    前提条件

    已创建1.16或以上版本的 TKE 集群
    已将 CBS-CSI 更新为最新版本。
    (可选)为避免扩容失败导致数据丢失,可以在扩容前 使用快照备份数据
    1.20以下集群非 CBS-CSI 类型的 PV 不支持在线扩容。

    操作步骤

    创建允许扩容的 StorageClass

    使用以下 YAML 创建允许扩容的 StorageClass,在 Storageclass 中设置 allowVolumeExpansiontrue。示例如下:
    allowVolumeExpansion: true
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
    name: cbs-csi-expand
    parameters:
    diskType: CLOUD_PREMIUM
    provisioner: com.tencent.cloud.csi.cbs
    reclaimPolicy: Delete
    volumeBindingMode: Immediate

    在线扩容

    提供以下两种扩容方式:
    扩容方式
    说明
    重启 Pod 的情况下在线扩容
    待扩容的云硬盘文件系统未被挂载,能够避免扩容出错以及方式2存在的问题。推荐使用该方式进行扩容
    不重启 Pod 的情况下在线扩容
    在节点上挂载着待扩容的云硬盘文件系统,如果存在 I/O 进程,将可能出现文件系统扩容错误。
    重启Pod情况下在线扩容
    不重启Pod情况下在线扩容
    1. 执行以下命令,确认扩容前 PV 和文件系统状态。示例如下,PV 和文件系统大小均为30G:
    $ kubectl exec ivantestweb-0 df /usr/share/nginx/html
    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/vdd 30832548 44992 30771172 1% /usr/share/nginx/html
    
    $ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c
    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
    pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 30Gi RWO Delete Bound default/www1-ivantestweb-0 cbs-csi 20h
    2. 执行以下命令,为 PV 对象打上一个非法 zone 标签,旨在下一步重启 Pod 后,使 Pod 无法调度到某个节点上。示例如下:
    $ kubectl label pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c failure-domain.beta.kubernetes.io/zone=nozone
    3. 执行以下命令重启 Pod,重启后由于 Pod 对应的 PV 的标签表明的是非法 zone,Pod 将处于 Pending 状态。示例如下:
    $ kubectl delete pod ivantestweb-0
    
    $ kubectl get pod ivantestweb-0
    NAME READY STATUS RESTARTS AGE
    ivantestweb-0 0/1 Pending 0 25s
    
    $ kubectl describe pod ivantestweb-0
    Events:
    Type Reason Age From Message
    ---- ------ ---- ---- -------
    Warning FailedScheduling 40s (x3 over 2m3s) default-scheduler 0/1 nodes are available: 1 node(s) had no available volume zone.
    4. 执行以下命令,修改 PVC 对象中的容量,将容量扩容至40G。示例如下:
    kubectl patch pvc www1-ivantestweb-0 -p '{"spec":{"resources":{"requests":{"storage":"40Gi"}}}}'
    注意:
    扩容后的 PVC 对象容量的大小必须为10的倍数,不同云硬盘类型所支持的存储容量规格可参考说明 创建云硬盘
    5. 执行以下命令,去除 PV 对象之前打上的标签, 标签去除之后 Pod 即可调度成功。示例如下:
    $ kubectl label pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c failure-domain.beta.kubernetes.io/zone-
    persistentvolume/pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c labeled
    6. 执行以下命令,可以查看到 Pod 状态为 Running、对应的 PV 和文件系统扩容成功,从30G扩容到40G。示例如下:
    $ kubectl get pod ivantestweb-0
    NAME READY STATUS RESTARTS AGE
    ivantestweb-0 1/1 Running 0 17m
    
    $ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c
    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
    pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 40Gi RWO Delete Bound default/www1-ivantestweb-0 cbs-csi 20h
    
    $ kubectl get pvc www1-ivantestweb-0
    NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
    www1-ivantestweb-0 Bound pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 40Gi RWO cbs-csi 20h
    
    $ kubectl exec ivantestweb-0 df /usr/share/nginx/html
    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/vdd 41153760 49032 41088344 1% /usr/share/nginx/html
    1. 执行以下命令,确认扩容前 PV 和文件系统状态。示例如下,PV 和文件系统大小均为20G:
    $ kubectl exec ivantestweb-0 df /usr/share/nginx/html
    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/vdd 20511312 45036 20449892 1% /usr/share/nginx/html
    
    $ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c
    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
    pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 20Gi RWO Delete Bound default/www1-ivantestweb-0 cbs-csi 20h
    
    2. 执行以下命令,修改 PVC 对象中的容量,将容量扩容至30G。示例如下:
    $ kubectl patch pvc www1-ivantestweb-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
    
    注意:
    扩容后的PVC对象容量的大小必须为10的倍数,不同硬盘类型所支持的存储容量规格可参考说明 创建云硬盘
    3. 执行以下命令,可以查看到 PV 和文件系统已扩容至30G。示例如下:
    $ kubectl exec ivantestweb-0 df /usr/share/nginx/html
    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/vdd 30832548 44992 30771172 1% /usr/share/nginx/html
    
    $ kubectl get pv pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c
    NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
    pvc-e193201e-6f6d-48cf-b96d-ccc09225cf9c 30Gi RWO Delete Bound default/www1-ivantestweb-0 cbs-csi 20h
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持