在 Red Hat OpenShift 集群上安装 Trident 并创建存储对象
使用 Red Hat Certified Trident Operator 安装 Trident 并为 ONTAP 和 Amazon FSx for NetApp ONTAP 创建存储对象,以启用容器和虚拟机的动态卷配置。在需要时为块访问准备工作节点。
-
在安装 OpenShift Virtualization 之前,请完成此页面上的步骤。OpenShift Virtualization 需要默认的 Trident 支持的 StorageClass 和 VolumeSnapshotClass 来为 VM 模板创建黄金映像。
-
如果您在配置 Trident 之前已经安装了 OpenShift Virtualization,请删除使用不同存储类创建的所有黄金映像。将 Trident 设置为默认值后,OpenShift Virtualization 会使用 Trident 存储重新创建黄金映像。
oc delete dv,VolumeSnapshot -n openshift-virtualization-os-images --selector=cdi.kubevirt.io/dataImportCron
步骤 1:安装 Trident
红帽认证 Trident Operator 由 NetApp 支持,适用于本地、公共云和 ROSA 等托管服务中的 OpenShift。从 Trident 25.02 开始,当您使用 Amazon FSx for NetApp ONTAP 并计划运行 OpenShift Virtualization VM 工作负载时,操作员还可以为 iSCSI 准备工作节点。
有关其他安装选项,请参见 "Trident 文档"。
-
在 OperatorHub 中,选择 Certified NetApp Trident。
显示示例

-
在 Install 页面上,保留最新版本并选择 Install。
显示示例

-
操作员安装后,选择 查看操作员 并创建 Trident Orchestrator 的实例。
如果要为 iSCSI 准备工作节点,请切换到 YAML 视图并添加
iscsi`到 `nodePrep。显示示例

-
确认所有 Trident Pod 都在集群中运行。
显示示例

-
如果已启用 iSCSI 节点准备,请登录到工作节点并验证 `iscsid`和 `multipathd`是否处于活动状态,以及 `multipath.conf`是否包含条目。
显示示例

显示示例

显示示例

以下视频展示了使用红帽认证 Trident Operator 安装 Trident 的演示。
步骤 2:为您的环境准备存储后端和 StorageClass 配置文件
为您的环境创建 TridentBackendConfig 和 StorageClass 定义。您可以在环境中配置多个存储协议。为要使用的每个协议创建 YAML 文件,并将占位符值替换为特定的配置详细信息。
|
|
根据您的环境完成下面的本地或 ROSA 部分,然后继续执行步骤 3。 |
本地 OpenShift 集群
为要配置的每个协议创建 YAML 文件。您可以配置以下一个或多个协议:NAS 用于基于 NFS 的文件存储、iSCSI 用于 iSCSI 块存储、NVMe/TCP 用于高性能 NVMe over TCP 块存储,或 FC 用于光纤通道块存储。
为 ONTAP NAS 创建 TridentBackendConfig 和 StorageClass,以启用基于 NFS 的持久存储配置。后端配置包括存储在 Kubernetes Secret 中的凭据,并引用您的 ONTAP SVM 和管理 LIF。
后端 secret 和后端配置文件(另存为 tbc-nas.yaml):
# tbc-nas.yaml
apiVersion: v1
kind: Secret
metadata:
name: tbc-nas-secret
type: Opaque
stringData:
username: <cluster admin username>
password: <cluster admin password>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: tbc-nas
spec:
version: 1
storageDriverName: ontap-nas
managementLIF: <ONTAP management LIF>
backendName: tbc-nas
svm: zoneb #<replace with your SVM name>
storagePrefix: testzoneb #<replace with your prefix>
defaults:
nameTemplate: "{{ .config.StoragePrefix }}_{{ .volume.Namespace }}_{{ .volume.RequestName }}"
credentials:
name: tbc-nas-secret
StorageClass 定义(另存为 sc-nas.yaml):
# sc-nas.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sc-nas
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-nas"
media: "ssd"
provisioningType: "thin"
snapshots: "true"
allowVolumeExpansion: true
为 ONTAP SAN 创建 TridentBackendConfig 和 StorageClass,以启用基于 iSCSI 的块存储配置。后端配置使用 ontap-san 驱动程序,包括存储在 Kubernetes Secret 中的凭据。
后端 secret 和后端配置文件(另存为 tbc-iscsi.yaml):
# tbc-iscsi.yaml
apiVersion: v1
kind: Secret
metadata:
name: backend-tbc-ontap-iscsi-secret
type: Opaque
stringData:
username: <cluster admin username>
password: <cluster admin password>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: ontap-iscsi
spec:
version: 1
storageDriverName: ontap-san
managementLIF: <management LIF>
backendName: ontap-iscsi
svm: <SVM name>
credentials:
name: backend-tbc-ontap-iscsi-secret
StorageClass 定义(另存为 sc-iscsi.yaml):
# sc-iscsi.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sc-iscsi
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-san"
media: "ssd"
provisioningType: "thin"
fsType: ext4
snapshots: "true"
allowVolumeExpansion: true
为 ONTAP SAN 创建 TridentBackendConfig 和 StorageClass,使用 NVMe over TCP 以实现高性能块存储调配。后端配置使用针对 NVMe/TCP 传输优化的 ontap-san 驱动程序,并包括存储在 Kubernetes Secret 中的凭据。
后端 secret 和后端配置文件(另存为 tbc-nvme.yaml):
# tbc-nvme.yaml
apiVersion: v1
kind: Secret
metadata:
name: backend-tbc-ontap-nvme-secret
type: Opaque
stringData:
username: <cluster admin username>
password: <cluster admin password>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: backend-tbc-ontap-nvme
spec:
version: 1
storageDriverName: ontap-san
sanType: nvme
managementLIF: <ONTAP management LIF>
backendName: backend-tbc-ontap-nvme
svm: <SVM name>
credentials:
name: backend-tbc-ontap-nvme-secret
StorageClass 定义(另存为 sc-nvme.yaml):
# sc-nvme.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sc-nvme
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-san"
media: "ssd"
provisioningType: "thin"
fsType: ext4
snapshots: "true"
allowVolumeExpansion: true
为具有光纤通道的 ONTAP SAN 创建 TridentBackendConfig 和 StorageClass,以启用基于 FC 的块存储配置。后端配置使用指定了 FCP 协议的 ontap-san 驱动程序,并包括存储在 Kubernetes Secret 中的凭据。
后端 secret 和后端配置文件(另存为 tbc-fc.yaml):
# tbc-fc.yaml
apiVersion: v1
kind: Secret
metadata:
name: tbc-fc-secret
type: Opaque
stringData:
username: <cluster admin username>
password: <cluster admin password>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: tbc-fc
spec:
version: 1
storageDriverName: ontap-san
managementLIF: <ONTAP management LIF>
backendName: tbc-fc
svm: openshift-fc #<replace with your SVM name>
sanType: fcp
storagePrefix: demofc #<replace with your prefix>
defaults:
nameTemplate: "{{ .config.StoragePrefix }}_{{ .volume.Namespace }}_{{ .volume.RequestName }}"
credentials:
name: tbc-fc-secret
StorageClass 定义(另存为 sc-fc.yaml):
# sc-fc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sc-fc
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-san"
media: "ssd"
provisioningType: "thin"
fsType: ext4
snapshots: "true"
allowVolumeExpansion: true
使用 Amazon FSx for NetApp ONTAP 的 ROSA 集群
为要配置的每个协议创建 YAML 文件。可以配置以下协议之一或两者:用于基于 NFS 的文件存储的 NAS 或用于块存储的 iSCSI。
为 Amazon FSx for NetApp ONTAP 创建 TridentBackendConfig 和 StorageClass,并使用 ONTAP NAS,以便在 ROSA 集群上启用基于 NFS 的持久存储配置。后端配置使用 Amazon FSx for NetApp ONTAP 的 DNS 名称来管理和数据 LIF,并包含存储在 trident 命名空间的 Kubernetes Secret 中的凭据。
后端 secret 和后端配置文件(另存为 tbc-fsx-nas.yaml):
# tbc-fsx-nas.yaml
apiVersion: v1
kind: Secret
metadata:
name: backend-fsx-ontap-nas-secret
type: Opaque
stringData:
username: <FSx for ONTAP, for example fsxadmin>
password: <FSx for ONTAP password>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: backend-fsx-ontap-nas
spec:
version: 1
backendName: fsx-ontap
storageDriverName: ontap-nas
managementLIF: <Management DNS name>
dataLIF: <NFS DNS name>
svm: <SVM NAME>
credentials:
name: backend-fsx-ontap-nas-secret
StorageClass 定义(另存为 sc-fsx-nas.yaml):
# sc-fsx-nas.yaml (storage class name is trident-csi)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: trident-csi
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-nas"
fsType: "ext4"
allowVolumeExpansion: true
reclaimPolicy: Retain
为 Amazon FSx for NetApp ONTAP 配置 ONTAP SAN,创建 TridentBackendConfig 和 StorageClass,以便在 ROSA 集群上启用基于 iSCSI 的块存储配置。后端配置使用 ontap-san 驱动,并包含存储在 Kubernetes Secret 中的凭据。确保工作节点已为 iSCSI 访问做好准备。
后端 secret 和后端配置文件(另存为 tbc-fsx-iscsi.yaml):
# tbc-fsx-iscsi.yaml
apiVersion: v1
kind: Secret
metadata:
name: backend-tbc-fsx-iscsi-secret
type: Opaque
stringData:
username: <FSx for ONTAP, for example fsxadmin>
password: <FSx for ONTAP password>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: fsx-iscsi
spec:
version: 1
storageDriverName: ontap-san
managementLIF: <Management DNS name>
backendName: fsx-iscsi
svm: <SVM name>
credentials:
name: backend-tbc-fsx-iscsi-secret
StorageClass 定义(另存为 sc-fsx-iscsi.yaml):
# sc-fsx-iscsi.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sc-fsx-iscsi
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-san"
media: "ssd"
provisioningType: "thin"
fsType: ext4
snapshots: "true"
allowVolumeExpansion: true
步骤 3:创建 VolumeSnapshotClass 配置文件
为本地和 ROSA 部署创建 VolumeSnapshotClass 定义。此配置为持久卷启用基于快照的操作。
VolumeSnapshotClass 定义(另存为 snapshot-class.yaml):
# snapshot-class.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: trident-snapshotclass
driver: csi.trident.netapp.io
deletionPolicy: Retain
步骤 4:将配置文件应用于集群
将前面步骤中创建的配置文件应用于 OpenShift 集群。
-
为您配置的每个协议应用 TridentBackendConfig 和 StorageClass 文件。
对于本地集群:
oc create -f tbc-nas.yaml -n trident oc create -f sc-nas.yaml oc create -f tbc-iscsi.yaml -n trident oc create -f sc-iscsi.yaml oc create -f tbc-nvme.yaml -n trident oc create -f sc-nvme.yaml oc create -f tbc-fc.yaml -n trident oc create -f sc-fc.yaml对于 ROSA 集群:
oc create -f tbc-fsx-nas.yaml -n trident oc create -f sc-fsx-nas.yaml oc create -f tbc-fsx-iscsi.yaml -n trident oc create -f sc-fsx-iscsi.yaml -
应用 VolumeSnapshotClass 配置。
oc create -f snapshot-class.yaml -
验证资源是否已成功创建。
检查 TridentBackendConfig 对象:
oc get tbc -n trident检查 StorageClass 对象:
oc get storageclass检查 VolumeSnapshotClass:
oc get volumesnapshotclass
第 5 步:设置默认 Trident 存储和快照类
将 Trident StorageClass 和 VolumeSnapshotClass 设置为 OpenShift 集群中的默认值。这是 OpenShift Virtualization 为 VM 模板创建黄金映像源所必需的。
-
设置默认 Trident StorageClass。
将 Trident 支持的 StorageClass 设置为集群默认值,以便在未指定存储类时 PersistentVolumeClaims 自动使用它。您需要配置两个注释:一个用于集群范围的默认值,一个特定于 OpenShift Virtualization。
-
设置集群范围的默认 StorageClass 注释。
确保仅将一个 StorageClass 设置为默认值。如果另一个 StorageClass 已设置为默认值,则将其注释设置为 false。
在控制台中,编辑标注:
storageclass.kubernetes.io/is-default-class: "true"从 CLI:
kubectl patch storageclass <storage class name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' -
设置 OpenShift Virtualization 特定的默认注释。
OpenShift Virtualization 使用优先于集群常规 `is-default-class`注释的特定注释。如果另一个 StorageClass 已设置为默认值,则将其注释设置为 false。
在控制台中,编辑标注:
storageclass.kubevirt.io/is-default-virt-class: "true"从 CLI:
kubectl patch storageclass <storage class name> -p '{"metadata": {"annotations":{"storageclass.kubevirt.io/is-default-virt-class": "true"}}}' -
-
设置默认 Trident VolumeSnapshotClass。
将 Trident 支持的 VolumeSnapshotClass 设置为集群默认值,为持久卷启用基于快照的操作。这可确保在未指定快照类时 VolumeSnapshots 自动使用 Trident CSI 驱动程序,并允许 OpenShift Virtualization 创建黄金映像的快照。
确保仅将一个 VolumeSnapshotClass 设置为默认值。如果另一个 VolumeSnapshotClass 已设置为默认值,则将其注释设置为 false。
在控制台中,编辑标注:
snapshot.storage.kubernetes.io/is-default-class: "true"从 CLI:
oc patch volumesnapshotclass <snapshot class name> --type=merge -p '{"metadata":{"annotations":{"snapshot.storage.kubernetes.io/is-default-class":"true"}}}'