配置存储类
https://kubernetes.io/docs/concepts/storage/storage-classes/["Kubernetes StorageClass 对象"^] 标识置备程序并指示置备程序如何置备卷。本节将向您展示如何配置将 Trident 指定为置备程序的 Kubernetes StorageClass 对象。
创建 StorageClass 对象
当您为 FSx for ONTAP 创建 StorageClass 时,Trident 将自动创建后端配置。
|
|
如果要手动配置存储后端,请参阅 [create-a-kubernetes-storageclass-without-automatic-backend-configuration] 部分了解如何分别创建 Trident 后端和存储类。 |
指定所需 StorageClass 参数
创建 StorageClass 时需要定义以下三个参数:
| 参数 | 必填项 | 类型 | 说明 |
|---|---|---|---|
|
是 |
string |
FSx for NetApp ONTAP 文件系统 ID |
|
是 |
string |
Trident 存储驱动程序(例如, |
|
是 |
string |
包含 FSx for ONTAP 凭据的 Kubernetes Secret 的名称 |
指定可选参数
您可以通过 StorageClass 传递可选的后端参数。在 StorageClass parameters 部分中将所有可选值定义为字符串。有关后端参数的完整列表,请参阅:"FSx for NetApp ONTAP 后端配置"。
示例 StorageClass 配置文件。
以下示例显示了触发自动后端配置的 StorageClass。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ontap-fsx-demo
annotations:
description: "Demo StorageClass for FSx for NetApp ONTAP"
provisioner: csi.trident.netapp.io
parameters:
fsxFilesystemID: "fs-0abc123"
storageDriverName: "ontap-nas"
credentialsName: trident-fsx-credentials
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: Immediate
{
"apiVersion": "storage.k8s.io/v1",
"kind": "StorageClass",
"metadata": {
"name": "ontap-fsx-demo",
"annotations": {
"description": "Demo StorageClass for FSx for NetApp ONTAP"
}
},
"provisioner": "csi.trident.netapp.io",
"parameters": {
"fsxFilesystemID": "fs-0abc123",
"storageDriverName": "ontap-nas",
"credentialsName": "trident-fsx-credentials"
},
"allowVolumeExpansion": true,
"reclaimPolicy": "Delete",
"volumeBindingMode": "Immediate"
}
创建 StorageClass
创建配置文件后,请运行以下命令来创建存储类。
kubectl create -f storage-class-ontapnas.yaml
现在,您应该在 Kubernetes 和 Trident 中都看到 basic-csi 存储类,并且 Trident 应该已经发现了后端的池。
kubectl get sc basic-csi
NAME PROVISIONER AGE basic-csi csi.trident.netapp.io 15h
应用 StorageClass 后,Trident 会自动创建后端。然后,您可以创建引用此 StorageClass 的 PersistentVolumeClaims。
验证后端配置状态
Trident 在 StorageClass 注释中记录后端创建的结果。
| 标注 | 说明 |
|---|---|
|
配置结果 ( |
|
详细状态或错误消息 |
|
内部配置器资源的名称 |
|
表示 StorageClass 由 Trident 管理 |
|
为此后端创建的存储池 |
要验证状态,请运行:
kubectl get storageclass ontap-fsx-demo -o yaml
确认 trident.netapp.io/configuratorStatus`已设置为 `Success。如果值为 Failure,请检查 `trident.netapp.io/configuratorMessage`以了解错误。
添加其他 FSxN 文件系统
如果在继续使用相同的 StorageClass 的同时需要额外的存储容量,请添加其他 FSxN 文件系统 ID。
编辑 StorageClass 并添加以下注释:
metadata:
annotations:
trident.netapp.io/additionalFsxNFileSystemID: '["fs-xxxxxxxxxxxxxxxxxx"]'
应用更改后,Trident 更新后端配置并更新 StorageClass 注释。
操作注意事项和限制
-
删除具有自动后端配置的 StorageClass 通常会删除关联的 Trident 后端。这可能会中断存储连接并中断正在运行的工作负载。在删除托管的 StorageClass 之前,请验证影响。
-
只有适用于 NetApp ONTAP 的 AWS FSx 才支持自动后端配置。
创建没有自动后端配置的 Kubernetes StorageClass
如果要单独创建 Trident 后端和 StorageClass,请按照以下步骤操作。
了解自动后端配置的工作原理
Trident 从 StorageClass 定义中导出后端配置。当您应用 StorageClass 时,Trident 验证所需的参数,创建后端,并使用状态注释 StorageClass。
Trident 只创建一次 VolumeSnapshotClass。Trident 会为后续的 StorageClasses 重复使用同一个 VolumeSnapshotClass。
创建 Trident 后端
要创建 Trident 后端,需要创建 JSON 或 YAML 格式的配置文件。文件需要指定所需的存储类型(NAS 或 SAN)、文件系统和获取该文件的 SVM 以及使用该文件进行身份验证的方式。以下示例演示如何定义基于 NAS 的存储并使用 AWS 密钥将凭据存储到要使用的 SVM:
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: backend-tbc-ontap-nas
namespace: trident
spec:
version: 1
storageDriverName: ontap-nas
backendName: tbc-ontap-nas
svm: svm-name
aws:
fsxFilesystemID: fs-xxxxxxxxxx
credentials:
name: "arn:aws:secretsmanager:us-west-2:xxxxxxxx:secret:secret-name"
type: awsarn
{
"apiVersion": "trident.netapp.io/v1",
"kind": "TridentBackendConfig",
"metadata": {
"name": "backend-tbc-ontap-nas"
"namespace": "trident"
},
"spec": {
"version": 1,
"storageDriverName": "ontap-nas",
"backendName": "tbc-ontap-nas",
"svm": "svm-name",
"aws": {
"fsxFilesystemID": "fs-xxxxxxxxxx"
},
"managementLIF": null,
"credentials": {
"name": "arn:aws:secretsmanager:us-west-2:xxxxxxxx:secret:secret-name",
"type": "awsarn"
}
}
}
FSx for ONTAP 驱动程序详细信息
您可以使用以下驱动程序将 Trident 与 Amazon FSx for NetApp ONTAP 集成:
| 驱动程序名称 | 说明 |
|---|---|
|
每个配置的 PV 都是其自己的 Amazon FSx for NetApp ONTAP 卷中的一个 LUN。推荐用于块存储。 |
|
配置的每个 PV 都是完整的 Amazon FSx for NetApp ONTAP 卷。推荐用于 NFS 和 SMB。 |
|
每个配置的 PV 都是一个 LUN,每个 Amazon FSx for NetApp ONTAP 卷具有可配置数量的 LUN。 |
|
配置的每个 PV 都是一个 qtree,每个 Amazon FSx for NetApp ONTAP 卷具有可配置数量的 qtree。 |
|
每个已配置的 PV 都是一个完整的 Amazon FSx for NetApp ONTAP FlexGroup 卷。 |
有关驱动程序的详细信息,请参阅 "NAS 驱动程序" 和 "SAN 驱动程序"。
创建后端
创建配置文件后,运行以下命令以创建和验证 Trident 后端配置 (TBC):
-
从 yaml 文件创建 Trident 后端配置 (TBC) 并运行以下命令:
kubectl create -f backendconfig.yaml -n tridenttridentbackendconfig.trident.netapp.io/backend-tbc-ontap-nas created
-
验证已成功创建 Trident 后端配置 (TBC):
Kubectl get tbc -n tridentNAME BACKEND NAME BACKEND UUID PHASE STATUS backend-tbc-ontap-nas tbc-ontap-nas 933e0071-66ce-4324-b9ff-f96d916ac5e9 Bound Success
有关其他配置选项的详细信息,请参见以下 [Backend-advanced-configuration-and-examples] 部分。
配置存储类*无*自动后端配置
以下是与 Trident 和 FSx for ONTAP 配合使用的存储类配置示例。
NFS 存储类
您可以使用此示例为使用 NFS 的卷设置 StorageClass(有关属性的完整列表,请参阅下面的 Trident 属性部分):
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ontap-gold
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-nas"
provisioningType: "thin"
snapshots: "true"
适用于 iSCSI 的 Storage Class
使用此示例为使用 iSCSI 的卷设置 StorageClass:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ontap-gold
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-san"
provisioningType: "thin"
snapshots: "true"
使用 NFSv3 和 AWS Bottlerocket 的存储类
要在 AWS Bottlerocket 上配置 NFSv3 卷,请将所需的 `mountOptions`添加到存储类:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ontap-gold
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-nas"
media: "ssd"
provisioningType: "thin"
snapshots: "true"
mountOptions:
- nfsvers=3
- nolock
Trident StorageClass 属性
这些参数确定应使用哪些 Trident 管理的存储池来配置给定类型的卷。
| 属性 | 类型 | 值 | 提供 | 请求 | 支持方 |
|---|---|---|---|---|---|
媒体1 |
string |
hdd、hybrid、ssd |
池包含此类型的介质;混合意味着两者兼有 |
指定媒体类型 |
ontap-nas,ontap-nas-economy,ontap-nas-flexgroup,ontap-san,solidfire-san |
provisioningType |
string |
薄、厚 |
池支持此配置方法 |
已指定配置方法 |
thick:所有 ONTAP;thin:所有 ONTAP 和 solidfire-san |
backendType |
string |
ontap-nas,ontap-nas-economy,ontap-nas-flexgroup,ontap-san,solidfire-san,azure-netapp-files,ontap-san-economy |
池属于此类型的后端 |
指定后端 |
所有驱动程序 |
snapshots |
布尔值 |
true,false |
池支持具有快照的卷 |
已启用快照的卷 |
ontap-nas、ontap-san、solidfire-san |
个克隆 |
布尔值 |
true,false |
池支持克隆卷 |
已启用克隆的卷 |
ontap-nas、ontap-san、solidfire-san |
加密 |
布尔值 |
true,false |
池支持加密卷 |
已启用加密的卷 |
ontap-nas,ontap-nas-economy,ontap-nas-flexgroups,ontap-san |
IOPS |
int |
正整数 |
池能够保证此范围内的 IOPS |
卷保证这些 IOPS |
solidfire-san |
1:ONTAP Select 或 FSx for ONTAP 系统不支持
请参阅"Kubernetes 和 Trident 对象",了解存储类如何与 `PersistentVolumeClaim`交互,以及用于控制 Trident 配置卷的参数详情。
创建存储类
配置 StorageClass 后,您可以在 Kubernetes 中创建它。
-
这是一个 Kubernetes 对象,因此请使用
kubectl在 Kubernetes 中创建它。kubectl create -f storage-class-ontapnas.yaml -
现在,您应该在 Kubernetes 和 Trident 中都看到 basic-csi 存储类,并且 Trident 应该已经发现了后端的池。
kubectl get sc basic-csi
NAME PROVISIONER AGE basic-csi csi.trident.netapp.io 15h
配置 SMB 卷
您可以使用 ontap-nas 驱动程序配置 SMB 卷。但是,要执行此操作,您必须完成以下步骤:"准备配置 SMB 卷"。
后端高级配置和示例
有关后端配置选项,请参见下表:
| 参数 | 说明 | 示例 |
|---|---|---|
|
始终为 1 |
|
|
存储驱动程序的名称 |
|
|
自定义名称或存储后端 |
驱动程序名称 + "_" + dataLIF |
|
集群或 SVM 管理 LIF 的 IP 地址,也可以指定完全限定域名(FQDN)。如果使用 IPv6 标志安装了 Trident,则可以设置为使用 IPv6 地址。IPv6 地址必须以方括号定义,例如 [28e8:d9fb:a825:b7bf:69a8:d02f:9e7b:3555]。如果你在 |
“10.0.0.1”,“[2001:1234:abcd::fefe]” |
|
协议 LIF 的 IP 地址。ONTAP NAS 驱动程序:NetApp 建议指定 dataLIF。如果未提供,Trident 将从 SVM 获取 dataLIF。可以指定要用于 NFS 挂载操作的完全限定域名 (FQDN),允许您创建轮询 DNS 以跨多个 dataLIF 进行负载平衡。可以在初始设置后更改。ONTAP SAN 驱动程序:不要为 iSCSI 指定。Trident 使用 ONTAP Selective LUN Map 来发现建立多路径会话所需的 iSCSI LIF。如果明确定义了 dataLIF,则会生成警告。如果使用 IPv6 标志安装了 Trident,则可以设置为使用 IPv6 地址。IPv6 地址必须以方括号定义,例如 [28e8:d9fb:a825:b7bf:69a8:d02f:9e7b:3555]。 |
|
|
启用自动导出策略创建和更新 [Boolean]。使用 `autoExportPolicy`和 `autoExportCIDRs`选项,Trident 可以自动管理导出策略。 |
|
|
启用 `autoExportPolicy`时用于过滤 Kubernetes 节点 IP 的 CIDR 列表。使用 `autoExportPolicy`和 `autoExportCIDRs`选项,Trident 可以自动管理导出策略。 |
"["0.0.0.0/0", "::/0"]" |
|
要应用于卷的任意 JSON 格式标签集 |
"" |
|
客户端证书的 Base64 编码值。用于基于证书的身份验证 |
"" |
|
客户端私钥的 Base64 编码值。用于基于证书的身份验证 |
"" |
|
受信任 CA 证书的 Base64 编码值。可选。用于基于证书的身份验证。 |
"" |
|
连接到集群或 SVM 的用户名。用于基于凭据的身份验证。例如,vsadmin。 |
|
|
连接到集群或 SVM 的密码。用于基于凭据的身份验证。 |
|
|
要使用的 Storage Virtual Machine |
如果指定了 SVM managementLIF,则派生。 |
|
在 SVM 中配置新卷时使用的前缀。创建后无法修改。要更新此参数,您需要创建一个新的后端。 |
|
|
*请勿为 Amazon FSx for NetApp ONTAP 指定。*提供的 `fsxadmin`和 `vsadmin`不包含检索聚合使用情况并使用 Trident 限制它所需的权限。 |
请勿使用。 |
|
如果请求的卷大小高于此值,则设置失败。还限制其为 qtree 和 LUN 管理的卷的最大大小,并且该 `qtreesPerFlexvol`选项允许自定义每个 FlexVol 卷的最大 qtree 数 |
" (默认情况下不强制执行) |
|
每个 FlexVol volume 的最大 LUN 数必须在 [50, 200] 范围内。仅限 SAN。 |
“100” |
|
故障排除时使用的调试标志。例如,{"api":false, "method":true} 除非正在进行故障排除并需要详细的日志转储,否则不要使用 |
空 |
|
NFS 挂载选项的逗号分隔列表。Kubernetes 持久卷的挂载选项通常在存储类中指定,但如果存储类中未指定挂载选项,则 Trident 将回退到使用存储后端配置文件中指定的挂载选项。如果存储类或配置文件中未指定挂载选项,Trident 将不会在关联的持久卷上设置任何挂载选项。 |
"" |
|
配置 NFS 或 SMB 卷创建。选项为 |
|
|
每个 FlexVol 卷的最大 Qtree 数,必须在 [50, 300] 范围内 |
|
|
您可以指定以下选项之一:使用 Microsoft Management Console 或 ONTAP CLI 创建的 SMB 共享的名称,或允许 Trident 创建 SMB 共享的名称。Amazon FSx for ONTAP 后端需要此参数。 |
|
|
使用 ONTAP REST API 的布尔参数。当设置为 `true`时,Trident 将使用 ONTAP REST API 与后端进行通信。此功能需要 ONTAP 9.11.1 及更高版本。此外,所使用的 ONTAP 登录角色必须能够访问 `ontap`应用程序。这通过预定义的 `vsadmin`和 `cluster-admin`角色来满足。 |
|
|
您可以在 AWS FSx for ONTAP 的配置文件中指定以下内容:- |
|
|
指定要存储在 AWS Secrets Manager 中的 FSx SVM 凭据。- |
用于配置卷的后端配置选项
您可以使用配置的 defaults 部分中的这些选项来控制默认配置。有关示例,请参阅下面的配置示例。
| 参数 | 说明 | 默认 |
|---|---|---|
|
LUN 的空间分配 |
|
|
空间预留模式;"none"(精简)或 "volume"(厚) |
|
|
要使用的 Snapshot 策略 |
|
|
要为创建的卷分配的 QoS 策略组。为每个存储池或后端选择 qosPolicy 或 adaptiveQosPolicy 中的一个。在 Trident 中使用 QoS 策略组需要 ONTAP 9.8 或更高版本。您应该使用非共享 QoS 策略组,并确保该策略组单独应用于每个组成部分。共享 QoS 策略组强制执行所有工作负载总吞吐量的上限。 |
"" |
|
要为创建的卷分配的自适应 QoS 策略组。为每个存储池或后端选择 qosPolicy 或 adaptiveQosPolicy 中的一个。ontap-nas-economy 不支持此功能。 |
"" |
|
为快照"0"保留的卷的百分比 |
如果 |
|
创建时从其父级拆分克隆 |
|
|
在新卷上启用 NetApp Volume Encryption (NVE);默认为 |
|
|
启用 LUKS 加密。请参见 "使用 Linux Unified Key Setup (LUKS)"。仅限 SAN。 |
"" |
|
要使用的分层策略 |
|
|
新卷的模式。对于 SMB 卷,请留空。 |
"" |
|
新卷的安全样式。NFS 支持 `mixed`和 `unix`安全样式。SMB 支持 `mixed`和 `ntfs`安全样式。 |
NFS 默认值为 |