在线扩容云盘存储卷

当云盘存储卷的使用空间不足时,您可以扩容云盘容量以增加存储空间。ACK支持在1.16及以上版本的集群中实现CSI云盘存储卷的在线扩容。本文介绍如何在线扩容云盘存储卷。

适用范围

本文通过更新PVC的存储容量声明实现扩容云盘存储卷。该方式适用范围如下:

  • 云盘对应的PV所绑定的PVC关联了StorageClass,并且StorageClass中已配置allowVolumeExpansion: true

    说明

    ACK默认提供的StorageClass已配置allowVolumeExpansion: true,您自行创建的StorageClass需要自行配置。StorageClass不支持修改属性,只能新建。

  • 云盘挂载的应用Pod需处于Running状态。

  • 如果云盘类型为普通云盘,则不支持使用该方式扩容。

  • 如果集群版本低于1.16,则不支持使用该方式扩容。如需升级集群,请参见升级集群

  • 该方式依赖云盘的Resize能力。更多信息,请参见ResizeDisk

准备工作

  • 为云盘创建快照。

    重要

    为避免扩容过程中的误操作导致数据丢失,建议提前为云盘创建快照,做好数据备份。完成扩容后,您可以删除快照,避免快照持续计费。具体操作,请参见使用云盘快照

  • 如果您的集群是ACK专有集群,为集群的RAM角色添加ResizeDisk权限。

    说明

    如果是ACK托管集群,无需进行授权操作。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

    3. 单击基本信息页签,在集群资源区域找到Master RAM 角色并单击角色链接。

    4. RAM控制台的角色页面,添加ResizeDisk权限。

      添加权限具体步骤,请参见修改自定义权限策略内容和备注resizedisk

操作步骤

在已有应用挂载动态云盘存储卷的情况下,您可以通过更新PVC存储容量声明的方式,在不暂停Pod的同时,在线扩容云盘存储卷。

说明

下文以使用云盘动态存储卷中创建的应用为例,进行云盘存储卷扩容。

kubectl

  1. 连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群CloudShell上通过kubectl管理Kubernetes集群

  2. 查看扩容前Pod和云盘信息,以及对应的PVCStorageClass。

    1. 查看云盘挂载的Pod的信息,确认Pod处于Running状态。

      kubectl get pod -l app=nginx

      返回示例如下:

      NAME          READY   STATUS    RESTARTS   AGE
      disk-test-0   1/1     Running   0          23h
    2. 查看云盘挂载目录的磁盘空间使用情况。

      kubectl exec disk-test-0 -- df -h /data

      返回示例如下:

      Filesystem      Size  Used Avail Use% Mounted on
      /dev/vdb         20G   24K   20G   1% /data
    3. 查看PVC。

      kubectl get pvc

      返回示例如下,PVC名称为dik-pvc,该PVC绑定的云盘IDd-uf6axyb1er071h6o****,容量为20 GiB。PVC关联的StorageClassalicloud-disk-wait-for-first-consumer

      重要

      如果是静态存储卷,需确认PVCstorageClassName的配置不为空,并且集群中存在同名的StorageClass。如果没有,请根据已有云盘存储卷的属性创建对应的StorageClass并配置allowVolumeExpansion: true

      NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                            VOLUMEATTRIBUTESCLASS   AGE
      disk-pvc   Bound    d-uf6axyb1er071h6o****   20Gi       RWO            alicloud-disk-wait-for-first-consumer   <unset>                 23h
    4. 查看StorageClass,确认已开启扩容。

      kubectl get sc alicloud-disk-wait-for-first-consumer -o yaml

      预期返回如下,allowVolumeExpansion: true表示已开启扩容。

      allowVolumeExpansion: true
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        creationTimestamp: "2025-01-21T08:48:26Z"
        name: alicloud-disk-wait-for-first-consumer
        resourceVersion: "59936"
        uid: 5bdb798e-5888-40df-9f91-259ee8510f34
      parameters:
        type: cloud_auto,cloud_essd,cloud_ssd
      provisioner: diskplugin.csi.alibabacloud.com
      reclaimPolicy: Retain
      volumeBindingMode: WaitForFirstConsumer
  3. 修改PVC,扩容云盘容量。

    假设云盘容量要扩容到30 GiB,命令示例如下:

    kubectl patch pvc disk-pvc -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
  4. 等待一段时间(一分钟内)后,确认云盘是否扩容成功。

    1. 查看PVC。

      kubectl get pvc

      返回示例如下,可以看到云盘容量已扩容到30 GiB。

      NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS                            VOLUMEATTRIBUTESCLASS   AGE
      disk-pvc   Bound    d-uf6axyb1er071h6o****   30Gi       RWO            alicloud-disk-wait-for-first-consumer   <unset>                 23h
    2. 查看云盘挂载目录的磁盘空间使用情况。

      kubectl exec disk-test-0 -- df -h /data

      返回示例如下,可以看到已扩容成功。

      Filesystem      Size  Used Avail Use% Mounted on
      /dev/vdb         30G   24K   30G   1% /data

控制台

说明

控制台操作仅支持动态存储卷,如果是静态存储卷,请参考kubectl操作。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,进入集群管理页。

  3. 确认云盘挂载的Pod处于Running状态,并查看Pod使用的PVC。

    1. 在集群管理页的左侧导航栏,选择工作负载 > 有状态

    2. 单击目标应用名称,然后在容器组页签下,确认Pod处于Running状态。

      扩容-容器组

    3. 单击Pod名称,然后在存储页签下,查看Pod使用的PVC。

      扩容-pvc

  4. 查看StorageClass,确认已开启扩容。

    1. 在集群管理页的左侧导航栏,选择存储 > 存储类

    2. 找到云盘存储卷使用的StorageClass,单击查看Yaml

    3. 确认已配置allowVolumeExpansion: true

      扩容的SC

  5. 修改PVC的存储容量声明,扩容云盘容量。

    1. 在集群管理页的左侧导航栏,选择存储 > 存储声明

    2. 找到目标PVC,单击扩容

    3. 在弹出的对话框中,输入要扩容到的容量,选中注意事项,然后单击确定

      在线扩容

    4. 等待扩容完成,确认PVC的总量已扩容。

相关文档