Skip to main content
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

自动卷扩展

贡献者 joan-ing

自动卷扩展使 Trident 配置的持久卷能够在使用的容量达到定义的阈值时自动增长。此功能可降低运营开销,并有助于防止因容量耗尽而导致的应用程序中断。

使用 Autogrow Policies 实现自动卷扩展。Autogrow Policy 定义:

  • 触发扩展的利用率阈值

  • 卷增长的量

  • 卷可以达到的最大大小

当超过定义的利用率阈值时,卷的大小会自动增加。卷永远不会自动缩减。

要求

在配置自动卷扩展之前,请确保满足以下要求:

  • Trident 26.02 或更高版本

  • 用于创建 `TridentAutogrowPolicy`自定义资源的基于角色的访问控制权限

  • StorageClasses 配置为 allowVolumeExpansion: true

  • 支持的 ONTAP 协议:

    • 网络文件系统

    • 互联网小型计算机系统接口

    • 光纤通道协议

    • 基于结构的非易失性内存 Express

限制

  • 早于 ONTAP 9.16.1 的 ONTAP Non-Volatile Memory Express 原始块卷不支持自动扩展。

  • 对于存储区域网络卷,如果 growthAmount`小于或等于 50 mebibytes,则 Trident 会在调整大小之前自动将值增加到 51 mebibytes,前提是生成的大小不超过 `maxSize

  • 在棕地环境中,由于卷发布迁移行为,某些现有卷可能无法自动扩展。

  • 当卷达到 `maxSize`时,不会发生进一步的扩展。

  • 支持自动卷扩展的协议:

    • 网络文件系统

    • 互联网小型计算机系统接口

    • 光纤通道协议

    • 基于结构的非易失性内存 Express

使用自动增长策略配置卷

可以在两个级别配置自动增长策略:

  • 存储类级别:为所有卷设置默认值(使用注释)

  • PVC 级别:覆盖存储类默认值(使用注释)

创建 Autogrow 策略

当卷达到定义的容量阈值时,Autogrow Policies 启用自动卷扩展。

请确保您拥有:

  • 已安装 Trident 26.02 或更高版本

  • 基于角色的访问控制权限以创建 TridentAutogrowPolicy 资源

  • 了解工作负载增长需求

Autogrow Policy 定义了卷在达到定义的容量阈值时如何自动扩展。

您可以在工作流程中随时创建 Autogrow Policies:

  • 在创建 StorageClasses 和卷之前

  • 在 StorageClasses 存在后

  • 配置卷后

这种灵活性使您能够引入自动扩展,而无需重新创建现有资源。

Autogrow 策略规范

Autogrow Policies 是 Kubernetes 自定义资源,定义如下:

字段 Description 格式。 Required 示例 Default

name

唯一策略标识符

string

是的。

production-db-policy

usedThreshold

触发扩展的容量百分比

百分比字符串

是的。

"80%"

growthAmount

达到阈值时要增长的金额

百分比或大小

"10%" 或 "5Gi"

"10%"

maxSize

最大卷大小限制

Kubernetes 数量

"500Gi"

无限制

创建 Autogrow 策略

步骤
  1. 创建定义自动增长策略的 YAML 文件:

    apiVersion: trident.netapp.io/v1
    kind: TridentAutogrowPolicy
    metadata:
      name: standard-autogrow
    spec:
      usedThreshold: "80%"
      growthAmount: "10%"
      maxSize: "500Gi"
  2. 将策略应用于您的集群:

    kubectl apply -f autogrow-policy.yaml
  3. 验证策略是否已创建:

    kubectl get tridentautogrowpolicy standard-autogrow
    预期输出
    NAME                USED THRESHOLD   GROWTH AMOUNT   STATE
    standard-autogrow   80%              10%             Success

策略状态

创建策略后,Trident 验证规范并分配以下状态之一:

状态 Description 需采取行动

成功

策略已验证并可供使用。

无。

失败

检测到验证错误。

查看并修复规范。

正在删除

正在执行删除。

等待完成。

将策略与 StorageClass 关联

您可以使用 `trident.netapp.io/autogrowPolicy`批注将自动增长策略与StorageClass关联起来。从该StorageClass配置的所有卷都会继承该策略。

备注 StorageClass 必须具有 allowVolumeExpansion: true
步骤
  1. 使用 Autogrow Policy 注释创建或修改 StorageClass:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ontap-gold
      annotations:
        trident.netapp.io/autogrowPolicy: "production-db-policy"
    provisioner: csi.trident.netapp.io
    parameters:
      backendType: "ontap-san"
      fsType: "ext4"
    allowVolumeExpansion: true
  2. 应用 StorageClass:

    kubectl apply -f storageclass.yaml
  3. 验证标注:

    kubectl get storageclass ontap-gold -o jsonpath='{.metadata.annotations.trident\.netapp\.io/autogrowPolicy}'
    预期输出
    production-db-policy

策略优先级

当在 StorageClass 和 PVC 上设置 Autogrow Policy 注释时,Trident 应用以下优先级规则:

  1. *PVC 注释优先。*如果 PVC 设置 trident.netapp.io/autogrowPolicy,则始终使用该值。

  2. StorageClass 注释仅适用于 PVC 没有注释的情况。

  3. 如果两者都没有注释, 则不会应用 Autogrow Policy。

StorageClass 标注 PVC 标注 有效行为

trident.netapp.io/autogrowPolicy: standard-agp

未设置

用途 standard-agp

trident.netapp.io/autogrowPolicy: standard-agp

trident.netapp.io/autogrowPolicy: logs-policy

使用 logs-policy(PVC 覆盖 StorageClass)。

trident.netapp.io/autogrowPolicy: standard-agp

trident.netapp.io/autogrowPolicy: "none"

无自动增长策略(PVC 禁用自动增长)。

未设置

trident.netapp.io/autogrowPolicy: dev-policy

用途 dev-policy

未设置

未设置

无自动增长策略。

配置示例

以下示例显示了不同用例的常见 Autogrow Policy 配置。

生产数据库的保守策略

apiVersion: trident.netapp.io/v1
kind: TridentAutogrowPolicy
metadata:
  name: production-db-policy
spec:
  usedThreshold: "75%"
  growthAmount: "20%"
  maxSize: "5Ti"

具有固定增长增量的日志存储

apiVersion: trident.netapp.io/v1
kind: TridentAutogrowPolicy
metadata:
  name: log-storage-policy
spec:
  usedThreshold: "90%"
  growthAmount: "10Gi"
  maxSize: "100Gi"

具有默认值的最小策略

当您忽略 `growthAmount`和 `maxSize`时,Trident 使用默认值(`10%`增长,无限大小):

apiVersion: trident.netapp.io/v1
kind: TridentAutogrowPolicy
metadata:
  name: logs-policy
spec:
  usedThreshold: "85%"

具有自定义 maxSize 和默认 growthAmount 的策略

apiVersion: trident.netapp.io/v1
kind: TridentAutogrowPolicy
metadata:
  name: default-ga-policy
spec:
  usedThreshold: "70%"
  maxSize: "100Gi"

无限制 maxSize 的激进增长

apiVersion: trident.netapp.io/v1
kind: TridentAutogrowPolicy
metadata:
  name: aggressive-growth-policy
spec:
  usedThreshold: "80%"
  growthAmount: "150%"

具有分数百分比的策略

apiVersion: trident.netapp.io/v1
kind: TridentAutogrowPolicy
metadata:
  name: precise-policy
spec:
  usedThreshold: "80.28%"
  growthAmount: "10.65%"
  maxSize: "100Gi"
备注 支持分数百分比。如果指定的小数位数超过三位,Trident 会将值舍入到小数点后三位。

具有 Autogrow 的 NAS StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ontap-nas-autogrow
  annotations:
    trident.netapp.io/autogrowPolicy: "standard-autogrow"
provisioner: csi.trident.netapp.io
parameters:
  backendType: "ontap-nas"
  fsType: "ext4"
allowVolumeExpansion: true

SAN StorageClass 使用 Autogrow

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: database-storage
  annotations:
    trident.netapp.io/autogrowPolicy: "production-db-policy"
provisioner: csi.trident.netapp.io
parameters:
  backendType: "ontap-san"
  fsType: "ext4"
allowVolumeExpansion: true