导入卷
您可以使用 `tridentctl import`或通过创建带有 Trident 导入注释的持久卷声明 (PVC) 将现有存储卷导入为 Kubernetes PV。
概述和注意事项
您可以将卷导入到Trident中、以便:
-
将应用程序容器化并重复使用其现有数据集
-
对一个应用程序使用数据集的克隆
-
重建发生故障的Kubrenetes集群
-
在灾难恢复期间迁移应用程序数据
导入卷之前、请查看以下注意事项。
-
Trident只能导入RW (读写)类型的ONTAP卷。DP (数据保护)类型的卷是SnapMirror目标卷。在将卷导入Trident之前、应先中断镜像关系。
-
我们建议导入没有活动连接的卷。要导入当前使用的卷、请克隆此卷、然后执行导入。
这对于块卷尤其重要、因为Kubnetes不会意识到先前的连接、并且可以轻松地将活动卷连接到Pod。这可能会导致数据损坏。 -
虽然 `StorageClass`必须在PVC上指定、但Trident在导入期间不使用此参数。创建卷期间会使用存储类根据存储特征从可用池中进行选择。由于卷已存在、因此导入期间不需要选择池。因此、即使卷位于与PVC中指定的存储类不匹配的后端或池中、导入也不会失败。
-
现有卷大小在PVC中确定和设置。存储驱动程序导入卷后,系统将创建 PV ,并为其创建一个 Claims Ref 。
-
回收策略最初设置为
retain在PV中。Kubernetes 成功绑定 PVC 和 PV 后,将更新回收策略以匹配存储类的回收策略。 -
存储类的回收策略为时
delete、删除PV时、存储卷将被删除。
-
-
默认情况下, Trident管理 PVC,并在后端重命名FlexVol volume和 LUN。你可以通过 `--no-manage`导入非托管卷的标志和 `--no-rename`标记以保留卷名。
-
--no-manage* - 如果您使用 `--no-manage`标志表明, Trident在对象的生命周期内不会对 PVC 或 PV 执行任何额外的操作。删除 PV 时,存储卷不会被删除,其他操作(如卷克隆和卷调整大小)也会被忽略。 -
--no-rename* - 如果您使用--no-rename`标志, Trident在导入卷时保留现有卷名称,并管理卷的生命周期。此选项仅支持以下情况: `ontap-nas,ontap-san(包括ASA r2 系统) `ontap-san-economy`司机。如果您想使用 Kubernetes 进行容器化工作负载,但又想在 Kubernetes 之外管理存储卷的生命周期,那么这些选项非常有用。
-
-
PVC 和 PV 中会添加一个标注,用于指示卷已导入以及 PVC 和 PV 是否已管理。不应修改或删除此标注。
导入卷
您可以使用 `tridentctl import`或通过创建带有 Trident 导入注释的 PVC 来导入卷。
|
|
如果使用 PVC 注释,则无需下载或使用 `tridentctl`来导入卷。 |
-
创建一个 PVC 文件(例如,
pvc.yaml),该文件将用于创建 PVC。PVC 文件应包括name、namespace、accessModes`和 `storageClassName。或者,您可以在 PVC 定义中指定unixPermissions。以下是最低规格示例:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: my_claim namespace: my_namespace spec: accessModes: - ReadWriteOnce storageClassName: my_storage_class仅包括所需的参数。PV 名称或卷大小等附加参数可能导致导入命令失败。 -
使用 `tridentctl import`用于指定包含卷的Trident后端名称以及唯一标识存储上卷的名称的命令(例如: ONTAP FlexVol、Element Volume)。这 `-f`需要提供参数来指定PVC文件的路径。
tridentctl import volume <backendName> <volumeName> -f <path-to-pvc-file>
-
使用所需的 Trident 导入注释创建 PVC YAML 文件(例如,
pvc.yaml)。PVC 文件应包括:-
name和namespace在元数据中 -
accessModes、resources.requests.storage和storageClassName在规格中 -
标注:
-
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> -
-
将 PVC YAML 文件应用到 Kubernetes 集群:
kubectl apply -f <pvc-file>.yaml
Trident 将自动导入卷并将其绑定到 PVC。
示例
查看以下卷导入示例、了解受支持的驱动程序。
ONTAP NAS和ONTAP NAS FlexGroup
Trident支持使用和 ontap-nas-flexgroup`驱动程序导入卷 `ontap-nas。
|
|
|
使用驱动程序创建的每个卷 ontap-nas`都是ONTAP集群上的一个FlexVol volume。使用驱动程序导入FlexVol卷的 `ontap-nas`工作原理相同。可以将ONTAP集群上已存在的FlexVol卷作为PVC导入 `ontap-nas。同样、FlexGroup vols也可以作为PVC导入 ontap-nas-flexgroup。
以下示例演示如何使用 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不会重命名卷。
以下示例导入 unmanaged_volume 在上 ontap_nas 后端:
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 注释导入托管和非托管卷。
以下示例从后端 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 volume,并在FlexVol volume内创建一个 LUN。Trident导入FlexVol volume并将其与 PVC 定义关联。Trident可以导入 ontap-san-economy 包含多个 LUN 的卷。
以下示例显示了如何导入托管卷和非托管卷:
对于受管卷,Trident会将FlexVol volume重命名为格式,并将FlexVol volume中的LUN重命名 pvc-<uuid>`为 `lun0。
以下示例将导入 ontap-san-managed`后端上的FlexVol volume `ontap_san_default:
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 | +------------------------------------------+--------+---------------+----------+--------------------------------------+--------+---------+
以下示例导入 unmanaged_example_volume 在上 ontap_san 后端:
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映射到与Kubornetes节点IQN共享IQN的igroux、如以下示例所示、您将收到错误: LUN already mapped to initiator(s) in this group。您需要删除启动程序或取消映射LUN才能导入卷。

Element
Trident支持使用驱动程序导入NetApp Element软件和NetApp HCI卷 solidfire-san。
|
|
Element 驱动程序支持重复的卷名称。但是、如果存在重复的卷名称、Trident将返回错误。作为临时解决策、克隆卷、提供唯一的卷名称并导入克隆的卷。 |
以下示例将导入 element-managed 后端上的卷 element_default。
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。
|
以下示例将导入 azure-netapp-files 后端上的卷 azurenetappfiles_40517 卷路径 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卷
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 | +------------------------------------------+---------+----------------------+----------+--------------------------------------+--------+---------+