文档首页/ 云容器引擎 CCE/ 用户指南/ 存储/ 云硬盘存储(EVS)/ 配置云硬盘存储卷自动扩容策略
更新时间:2026-09-22 GMT+08:00
分享

配置云硬盘存储卷自动扩容策略

CCE支持通过CRD的方式定义云盘自动扩容策略,在存储卷剩余容量低于指定阈值时实现自动扩容,保障业务持续运行。本文介绍如何通过Everest的StorageAutoScalerPolicy配置自动扩容策略,并验证云盘存储卷的自动扩容效果。

前提条件

已创建集群,并在集群中安装2.5.92及以上版本的CCE容器存储(Everest)。

约束与限制

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

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

  • 云硬盘挂载的应用Pod需处于Running状态。
  • 触发扩容的最大时间间隔约为2分钟,云盘扩容时间约为1分钟,请勿在3min内将云盘写满。
  • 避免多个策略关联到同一个PVC。若多个策略关联到同一PVC,最新创建的策略生效。
  • 插件删除后,扩容策略及CRD不会级联删除。
  • 若额外配置了安全组或ACL规则,需确保容器能够访问节点3125端口。

操作步骤

  1. 创建有状态应用及PVC。

    1. 编写“statefulset.yaml”文件,通过volumeClaimTemplates为每个Pod自动创建独立PVC,并通过labels为后续策略匹配提供依据。
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: nginx
        namespace: default
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: nginx
        serviceName: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
              - name: nginx
                image: nginx:alpine  # 请根据实际应用更换为正确的镜像地址
                volumeMounts:
                  - name: data
                    mountPath: /data
        volumeClaimTemplates:              # 为每个Pod自动创建独立PVC
          - metadata:
              name: data
              labels:
                app: nginx                 # PVC继承此标签,用于策略匹配
            spec:
              accessModes: ["ReadWriteOnce"]
              storageClassName: csi-disk
              resources:
                requests:
                  storage: 10Gi
    2. 执行以下命令,部署应用。
      kubectl apply -f statefulset.yaml
    3. 确认PVC已创建并绑定。
      kubectl get pvc -l app=nginx

      预期输出:

      NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      data-nginx-0   Bound    pvc-d8073e47-939f-4ebb-b1c0-ff6cf1******   10Gi       RWO            csi-disk       18s
    4. 确认Pod处于Running状态。
      kubectl get pod nginx-0

      预期输出:

      NAME       READY   STATUS    RESTARTS   AGE
      nginx-0    1/1     Running   0          17s

  2. 配置自动扩容策略。

    1. 编写策略pvc-auto-expansion-policy.yaml文件,在kube-system命名空间中创建StorageAutoScalerPolicy,定义扩容阈值与步长。
      apiVersion: storage.everest.io/v1
      kind: StorageAutoScalerPolicy
      metadata:
        name: pvc-auto-expansion
        namespace: kube-system
      spec:
        namespaces:
          - default
        pvcSelector:
          matchLabels:
            app: nginx
        maxCapacity: 15Gi
        rule:
          availableCapacityThreshold: "20%"
          expansionStep: "50%"

      涉及参数说明如下表所示。

      参数

      类型

      是否必填

      说明

      spec.namespaces

      string数组

      是

      策略生效的命名空间列表。支持具体命名空间名称(例如["default", "production"])或通配符["*"](匹配所有命名空间)。通配符*不可与其他命名空间名称混用。

      spec.pvcSelector

      LabelSelector

      是

      PVC标签选择器,支持matchLabels和matchExpressions。仅标签匹配的PVC会被策略管理。选择器不可为空,空选择器不会匹配任何PVC。

      spec.maxCapacity

      string

      是

      单个PVC允许扩容到的最大容量。仅支持绝对值格式,例如500Gi、1Ti。

      扩容结果超过此值时会被截断为maxCapacity。

      spec.rule.availableCapacityThreshold

      string

      是

      可用容量阈值,PVC剩余容量低于此值时触发扩容。支持以下格式:

      • 百分比:例如“20%”,表示当可用容量低于当前总容量的20%时触发。以PVC当前容量为基准动态计算。
      • 绝对值:例如“5Gi”,表示当可用容量低于5Gi时触发。固定阈值,不随PVC容量变化。

      spec.rule.expansionStep

      string

      是

      每次扩容步长。触发扩容后,PVC容量按此步长增加。支持以下格式:

      • 百分比:例如“50%”,表示每次扩容增加当前容量的50%(如 10Gi→15Gi)。以PVC当前容量为基准动态计算。
      • 绝对值:例如“5Gi”,表示每次扩容固定增加5Gi。固定步长,不随PVC容量变化。
    2. 执行以下命令,创建自动扩容策略。
      kubectl apply -f pvc-auto-expansion-policy.yaml

  3. 写入数据触发扩容阈值。

    1. 在Pod写入数据,使云盘可用容量低于20%阈值。
      kubectl exec nginx-0 -- sh -c 'dd if=/dev/zero of=/data/fill bs=1M count=8300'
    2. 确认磁盘使用率已超过阈值(可用容量占比低于20%)。
      kubectl exec nginx-0 -- sh -c 'df -h /data'

      预期输出:

      Filesystem      Size  Used Avail Use% Mounted on
      /dev/sda        9.8G  8.2G  1.7G  84% /data

      此时可用容量占比约17%(1.7G / 9.8G),低于策略定义的20%阈值。

    3. 等待控制器同步:控制器约60s检测一次,下一次同步时将自动触发扩容。

  4. 验证自动扩容结果。

    1. 查看PVC容量变化。
      kubectl get pvc data-nginx-0

      预期输出:

      NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      data-nginx-0   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   15Gi       RWO            csi-disk       3m29s

      PVC容量已从10Gi扩容至15Gi,因策略配置的扩容步长为50%,即每次扩容增加当前容量的50%(10Gi × 50% = 5Gi),所以扩容后容量为10Gi + 5Gi = 15Gi。

    2. 查看扩容事件。
      kubectl get events

      预期输出:

      LAST SEEN   TYPE     REASON                       OBJECT                                MESSAGE
      100s        Normal   PVCExpanded                  persistentvolumeclaim/data-nginx-0   PVC default/data-nginx-0 auto expanded from 10Gi to 15Gi (remaining: 16.7%, policy: pvc-auto-expansion)
      100s        Normal   Resizing                     persistentvolumeclaim/data-nginx-0   External resizer is resizing volume pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      100s        Normal   ExternalExpanding            persistentvolumeclaim/data-nginx-0   waiting for an external controller to expand this PVC
      96s         Normal   FileSystemResizeRequired     persistentvolumeclaim/data-nginx-0   Require file system resize of volume on node
      25s         Normal   FileSystemResizeSuccessful   persistentvolumeclaim/data-nginx-0   MountVolume.NodeExpandVolume succeeded for volume "pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" 192.168.x.x
    3. 在Pod内确认文件系统已扩容。
      kubectl exec nginx-0 -- sh -c 'df -h /data'

      预期输出:

      Filesystem      Size  Used Avail Use% Mounted on
      /dev/sda         15G  8.2G  6.6G  56% /data

      文件系统容量已从10Gi扩容至15Gi,可用空间由1.7G提升至6.6G,扩容完成。

常见问题

相关文档

相关文档