自动卷扩展
自动卷扩展使 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 策略
-
创建定义自动增长策略的 YAML 文件:
apiVersion: trident.netapp.io/v1 kind: TridentAutogrowPolicy metadata: name: standard-autogrow spec: usedThreshold: "80%" growthAmount: "10%" maxSize: "500Gi" -
将策略应用于您的集群:
kubectl apply -f autogrow-policy.yaml -
验证策略是否已创建:
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。
|
-
使用 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 -
应用 StorageClass:
kubectl apply -f storageclass.yaml -
验证标注:
kubectl get storageclass ontap-gold -o jsonpath='{.metadata.annotations.trident\.netapp\.io/autogrowPolicy}'预期输出production-db-policy
策略优先级
当在 StorageClass 和 PVC 上设置 Autogrow Policy 注释时,Trident 应用以下优先级规则:
-
*PVC 注释优先。*如果 PVC 设置
trident.netapp.io/autogrowPolicy,则始终使用该值。 -
StorageClass 注释仅适用于 PVC 没有注释的情况。
-
如果两者都没有注释, 则不会应用 Autogrow Policy。
| StorageClass 标注 | PVC 标注 | 有效行为 |
|---|---|---|
|
未设置 |
用途 |
|
|
使用 |
|
|
无自动增长策略(PVC 禁用自动增长)。 |
未设置 |
|
用途 |
未设置 |
未设置 |
无自动增长策略。 |
配置示例
以下示例显示了不同用例的常见 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