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

导入卷

您可以使用 `tridentctl import`或通过创建带有 Trident 导入注释的持久卷声明 (PVC) 将现有存储卷导入为 Kubernetes PV。

概述和注意事项

您可以将卷导入 Trident 以:

  • 容器化应用程序并重用其现有数据集

  • 将数据集的克隆用于临时应用程序

  • 重建失败的 Kubernetes 集群

  • 在灾难恢复期间迁移应用程序数据

注意事项

在导入卷之前,请查看以下注意事项。

  • Trident 只能导入 RW(读写)类型的 ONTAP 卷。DP(数据保护)类型卷是 SnapMirror 目标卷。在将卷导入 Trident 之前,您应该中断镜像关系。

  • 我们建议导入没有活动连接的卷。要导入正在使用的卷,请克隆该卷,然后执行导入。

    警告 这对于块卷尤其重要,因为 Kubernetes 不会意识到以前的连接,并且可以轻松地将活动卷附加到 pod。这可能会导致数据损坏。
  • 虽然 `StorageClass`必须在 PVC 上指定,但 Trident 在导入过程中不使用此参数。存储类用于在卷创建期间根据存储特性从可用池中进行选择。由于卷已存在,因此在导入过程中不需要选择池。因此,即使卷存在于与 PVC 中指定的存储类不匹配的后端或池中,导入也不会失败。

  • 现有卷大小在 PVC 中确定和设置。卷由存储驱动程序导入后,PV 将使用 ClaimRef 创建到 PVC。

    • 回收策略最初在 PV 中设置为 retain。Kubernetes 成功绑定 PVC 和 PV 后,回收策略将更新为与 Storage Class 的回收策略匹配。

    • 如果存储类的回收策略为 delete,则在删除 PV 时将删除存储卷。

  • 默认情况下,Trident 管理 PVC 并重命名后端上的 FlexVol 卷和 LUN。您可以传递 --no-manage 标记以导入非托管卷,并传递 --no-rename 标记以保留卷名称。

    • --no-manage* - 如果您使用 --no-manage 标志,Trident 不会在对象生命周期中对 PVC 或 PV 执行任何附加操作。删除 PV 时不会删除存储卷,也会忽略其他操作,如卷克隆和卷大小调整。

    • --no-rename* - 如果使用 --no-rename 标志,Trident 保留现有卷名,同时导入卷并管理卷的生命周期。只有 ontap-nasontap-san(包括 ASA r2 系统)和 ontap-san-economy 驱动程序才支持此选项。

      提示 如果要将 Kubernetes 用于容器化工作负载,但要管理 Kubernetes 之外的存储卷的生命周期,则这些选项非常有用。
  • 在 PVC 和 PV 上添加了一个注释,该注释具有双重目的,用于指示已导入该卷以及是否已管理 PVC 和 PV。不应修改或删除此注释。

导入卷

您可以使用 `tridentctl import`或通过创建带有 Trident 导入注释的 PVC 来导入卷。

备注 如果使用 PVC 注释,则无需下载或使用 `tridentctl`来导入卷。
使用 tridentctl
步骤
  1. 创建一个 PVC 文件(例如, pvc.yaml),该文件将用于创建 PVC。PVC 文件应包括 namenamespaceaccessModes`和 `storageClassName。或者,您可以在 PVC 定义中指定 unixPermissions

    以下是最小规格的示例:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: my_claim
      namespace: my_namespace
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: my_storage_class
    备注 仅包括所需的参数。PV 名称或卷大小等附加参数可能导致导入命令失败。
  2. 使用 `tridentctl import`命令可指定包含卷的 Trident 后端的名称以及唯一标识存储上卷的名称(例如:ONTAP FlexVol、Element Volume)。指定 PVC 文件的路径需要 `-f`参数。

    tridentctl import volume <backendName> <volumeName> -f <path-to-pvc-file>
使用 PVC 注释
步骤
  1. 使用所需的 Trident 导入注释创建 PVC YAML 文件(例如, pvc.yaml)。PVC 文件应包括:

    • namenamespace 在元数据中

    • accessModesresources.requests.storagestorageClassName 在规格中

    • 标注:

      • trident.netapp.io/importOriginalName: 后端上的卷名称

      • trident.netapp.io/importBackendUUID:卷存在的后端 UUID

      • trident.netapp.io/notManaged (Optional):为非托管卷设置为 "true"。默认值为 "false"

        下面是导入托管卷的示例规范:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: <pvc-name>
      namespace: <namespace>
      annotations:
        trident.netapp.io/importOriginalName: "<volume-name>"
        trident.netapp.io/importBackendUUID: "<backend-uuid>"
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: <size>
      storageClassName: <storage-class-name>
  2. 将 PVC YAML 文件应用到 Kubernetes 集群:

    kubectl apply -f <pvc-file>.yaml

    Trident 将自动导入卷并将其绑定到 PVC。

示例

查看以下受支持驱动程序的卷导入示例。

ONTAP NAS 和 ONTAP NAS FlexGroup

Trident 支持使用 ontap-nasontap-nas-flexgroup 驱动程序进行卷导入。

备注
  • Trident 不支持使用 ontap-nas-economy 驱动程序进行卷导入。

  • ontap-nasontap-nas-flexgroup 驱动程序不允许使用重复的卷名。

使用 ontap-nas 驱动程序创建的每个卷都是 ONTAP 集群上的一个 FlexVol 卷。使用 ontap-nas 驱动程序导入 FlexVol 卷的工作原理相同。ONTAP 集群上已存在的 FlexVol 卷可以作为 ontap-nas PVC 导入。同样,FlexGroup 卷可以作为 ontap-nas-flexgroup PVC 导入。

使用 tridentctl 的 ONTAP NAS 示例

以下示例演示如何使用 tridentctl 导入托管卷和非托管卷。

托管卷

以下示例导入名为 managed_volume 的卷到名为 ontap_nas 的后端:

tridentctl import volume ontap_nas managed_volume -f <path-to-pvc-file>

+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+
|                   NAME                   |  SIZE   | STORAGE CLASS | PROTOCOL |             BACKEND UUID             | STATE  | MANAGED |
+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+
| pvc-bf5ad463-afbb-11e9-8d9f-5254004dfdb7 | 1.0 GiB | standard      | file     | c5a6f6a4-b052-423b-80d4-8fb491a14a22 | online | true    |
+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+
非受管卷

使用 `--no-manage`参数时, Trident 不会重命名卷。

以下示例在 ontap_nas 后端导入 unmanaged_volume

tridentctl import volume nas_blog unmanaged_volume -f <path-to-pvc-file> --no-manage

+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+
|                   NAME                   |  SIZE   | STORAGE CLASS | PROTOCOL |             BACKEND UUID             | STATE  | MANAGED |
+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+
| pvc-df07d542-afbc-11e9-8d9f-5254004dfdb7 | 1.0 GiB | standard      | file     | c5a6f6a4-b052-423b-80d4-8fb491a14a22 | online | false   |
+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+
使用 PVC 注释的 ONTAP NAS 示例

以下示例演示如何使用 PVC 注释导入托管和非托管卷。

托管卷

以下示例从后端 81abcb27-ea63-49bb-b606-0a5315ac5f21`导入名为 `ontap_volume1`的 1GiB `ontap-nas 卷,使用 PVC 注释设置了 RWO 访问模式:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: <managed-imported-volume>
  namespace: <namespace>
  annotations:
    trident.netapp.io/importOriginalName: "ontap_volume1"
    trident.netapp.io/importBackendUUID: "81abcb27-ea63-49bb-b606-0a5315ac5f21"
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: <storage-class-name>
非受管卷

以下示例使用 PVC 注释从后端 34abcb27-ea63-49bb-b606-0a5315ac5f34`导入名为 `ontap-volume2`的 1Gi `ontap-nas 卷,并设置 RWO 访问模式:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: <umanaged-imported-volume>
  namespace: <namespace>
  annotations:
    trident.netapp.io/importOriginalName: "ontap-volume2"
    trident.netapp.io/importBackendUUID: "34abcb27-ea63-49bb-b606-0a5315ac5f34"
    trident.netapp.io/notManaged: "true"
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: <storage-class-name>

ONTAP SAN

Trident 支持使用 ontap-san(iSCSI、NVMe/TCP 和 FC)和 `ontap-san-economy`驱动程序进行卷导入。

Trident 可以导入包含单个 LUN 的 ONTAP SAN FlexVol 卷。这与 `ontap-san`驱动程序一致,该驱动程序为每个 PVC 创建一个 FlexVol 卷,并在 FlexVol 卷中创建一个 LUN。Trident 导入 FlexVol 卷并将其与 PVC 定义相关联。Trident 可以导入包含多个 LUN 的 `ontap-san-economy`卷。

以下示例显示了如何导入托管卷和非托管卷:

托管卷

对于托管卷,Trident 会将 FlexVol 卷重命名为 pvc-<uuid> 格式,并将 FlexVol 卷中的 LUN 重命名为 lun0

以下示例导入存在于 ontap_san_default 后端的 ontap-san-managed FlexVol volume:

tridentctl import volume ontapsan_san_default ontap-san-managed -f pvc-basic-import.yaml -n trident -d

+------------------------------------------+--------+---------------+----------+--------------------------------------+--------+---------+
|                   NAME                   |  SIZE  | STORAGE CLASS | PROTOCOL |             BACKEND UUID             | STATE  | MANAGED |
+------------------------------------------+--------+---------------+----------+--------------------------------------+--------+---------+
| pvc-d6ee4f54-4e40-4454-92fd-d00fc228d74a | 20 MiB | basic         | block    | cd394786-ddd5-4470-adc3-10c5ce4ca757 | online | true    |
+------------------------------------------+--------+---------------+----------+--------------------------------------+--------+---------+
非受管卷

以下示例在 ontap_san 后端导入 unmanaged_example_volume

tridentctl import volume -n trident san_blog unmanaged_example_volume -f pvc-import.yaml --no-manage
+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+
|                   NAME                   |  SIZE   | STORAGE CLASS | PROTOCOL |             BACKEND UUID             | STATE  | MANAGED |
+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+
| pvc-1fc999c9-ce8c-459c-82e4-ed4380a4b228 | 1.0 GiB | san-blog      | block    | e3275890-7d80-4af6-90cc-c7a0759f555a | online | false   |
+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+

如果您的 LUN 映射到与 Kubernetes 节点 IQN 共享 IQN 的 igroup,如以下示例所示,您将收到错误: LUN already mapped to initiator(s) in this group。您需要删除启动器或取消映射 LUN 以导入卷。

映射到 iqn 和集群 iqn 的 LUN 的图像。

Element

Trident 支持 NetApp Element 软件和 NetApp HCI 卷导入,使用 `solidfire-san`驱动程序。

备注 Element 驱动程序支持重复的卷名。但是,如果存在重复的卷名,Trident 返回错误。作为一种解决方法,请克隆该卷,提供唯一的卷名,然后导入克隆的卷。

以下示例将在后端 `element_default`导入 `element-managed`卷。

tridentctl import volume element_default element-managed -f pvc-basic-import.yaml -n trident -d

+------------------------------------------+--------+---------------+----------+--------------------------------------+--------+---------+
|                   NAME                   |  SIZE  | STORAGE CLASS | PROTOCOL |             BACKEND UUID             | STATE  | MANAGED |
+------------------------------------------+--------+---------------+----------+--------------------------------------+--------+---------+
| pvc-970ce1ca-2096-4ecd-8545-ac7edc24a8fe | 10 GiB | basic-element | block    | d3ba047a-ea0b-43f9-9c42-e38e58301c49 | online | true    |
+------------------------------------------+--------+---------------+----------+--------------------------------------+--------+---------+

Azure NetApp Files

Trident 支持使用 `azure-netapp-files`驱动程序进行卷导入。

备注 若要导入 Azure NetApp Files 卷,请通过其卷路径识别卷。卷路径是卷的导出路径在 :/`之后的部分。例如,如果装载路径为 `10.0.0.2:/importvol1,则卷路径为 importvol1

以下示例将在后端 azurenetappfiles_40517`上导入一个 `azure-netapp-files`卷,卷路径为 `importvol1

tridentctl import volume azurenetappfiles_40517 importvol1 -f <path-to-pvc-file> -n trident

+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+
|                   NAME                   |  SIZE   | STORAGE CLASS | PROTOCOL |             BACKEND UUID             | STATE  | MANAGED |
+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+
| pvc-0ee95d60-fd5c-448d-b505-b72901b3a4ab | 100 GiB | anf-storage   | file     | 1c01274f-d94b-44a3-98a3-04c953c9a51e | online | true    |
+------------------------------------------+---------+---------------+----------+--------------------------------------+--------+---------+

Google Cloud NetApp Volumes

Trident 支持使用 `google-cloud-netapp-volumes`驱动程序进行卷导入。

以下示例在后端 backend-tbc-gcnv1 上导入卷 testvoleasiaeast1

tridentctl import volume backend-tbc-gcnv1 "testvoleasiaeast1" -f < path-to-pvc> -n trident

+------------------------------------------+---------+----------------------+----------+--------------------------------------+--------+---------+
|                   NAME                   |  SIZE   | STORAGE CLASS        | PROTOCOL |             BACKEND UUID             | STATE  | MANAGED |
+------------------------------------------+---------+----------------------+----------+--------------------------------------+--------+---------+
| pvc-a69cda19-218c-4ca9-a941-aea05dd13dc0 |  10 GiB | gcnv-nfs-sc-identity | file     | 8c18cdf1-0770-4bc0-bcc5-c6295fe6d837 | online | true    |
+------------------------------------------+---------+----------------------+----------+--------------------------------------+--------+---------+

当两个卷位于同一区域时,以下示例导入 `google-cloud-netapp-volumes`卷:

tridentctl import volume backend-tbc-gcnv1 "projects/123456789100/locations/asia-east1-a/volumes/testvoleasiaeast1" -f <path-to-pvc> -n trident

+------------------------------------------+---------+----------------------+----------+--------------------------------------+--------+---------+
|                   NAME                   |  SIZE   | STORAGE CLASS        | PROTOCOL |             BACKEND UUID             | STATE  | MANAGED |
+------------------------------------------+---------+----------------------+----------+--------------------------------------+--------+---------+
| pvc-a69cda19-218c-4ca9-a941-aea05dd13dc0 |  10 GiB | gcnv-nfs-sc-identity | file     | 8c18cdf1-0770-4bc0-bcc5-c6295fe6d837 | online | true    |
+------------------------------------------+---------+----------------------+----------+--------------------------------------+--------+---------+