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

在 Red Hat OpenShift 集群上安装 Trident 并创建存储对象

贡献者 banum-netapp netapp-jsnyder kevin-hoke

使用 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 文档"

步骤
  1. OperatorHub 中,选择 Certified NetApp Trident

    显示示例

    运营商枢纽

  2. Install 页面上,保留最新版本并选择 Install

    显示示例

    安装

  3. 操作员安装后,选择 查看操作员 并创建 Trident Orchestrator 的实例。

    如果要为 iSCSI 准备工作节点,请切换到 YAML 视图并添加 iscsi`到 `nodePrep

    显示示例

    添加 iscsi 以准备节点

  4. 确认所有 Trident Pod 都在集群中运行。

    显示示例

    安装Trident

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

    显示示例

    iscsid 正在运行

    显示示例

    多路径运行

    显示示例

    multipath.conf 文件正在运行

视频演示

以下视频展示了使用红帽认证 Trident Operator 安装 Trident 的演示。

在 OpenShift 中使用经过认证的Trident Operator 安装Trident 25.02.1

步骤 2:为您的环境准备存储后端和 StorageClass 配置文件

为您的环境创建 TridentBackendConfig 和 StorageClass 定义。您可以在环境中配置多个存储协议。为要使用的每个协议创建 YAML 文件,并将占位符值替换为特定的配置详细信息。

备注 根据您的环境完成下面的本地或 ROSA 部分,然后继续执行步骤 3。

本地 OpenShift 集群

为要配置的每个协议创建 YAML 文件。您可以配置以下一个或多个协议:NAS 用于基于 NFS 的文件存储、iSCSI 用于 iSCSI 块存储、NVMe/TCP 用于高性能 NVMe over TCP 块存储,或 FC 用于光纤通道块存储。

NAS

为 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
iSCSI

为 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
NVMe/TCP

为 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
FC

为具有光纤通道的 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。

NAS

为 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
iSCSI

为 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 集群。

步骤
  1. 为您配置的每个协议应用 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
  2. 应用 VolumeSnapshotClass 配置。

    oc create -f snapshot-class.yaml
  3. 验证资源是否已成功创建。

    检查 TridentBackendConfig 对象:

    oc get tbc -n trident

    检查 StorageClass 对象:

    oc get storageclass

    检查 VolumeSnapshotClass:

    oc get volumesnapshotclass

第 5 步:设置默认 Trident 存储和快照类

将 Trident StorageClass 和 VolumeSnapshotClass 设置为 OpenShift 集群中的默认值。这是 OpenShift Virtualization 为 VM 模板创建黄金映像源所必需的。

步骤
  1. 设置默认 Trident StorageClass。

    将 Trident 支持的 StorageClass 设置为集群默认值,以便在未指定存储类时 PersistentVolumeClaims 自动使用它。您需要配置两个注释:一个用于集群范围的默认值,一个特定于 OpenShift Virtualization。

    1. 设置集群范围的默认 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"}}}'
    2. 设置 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"}}}'
  2. 设置默认 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"}}}'