使用Trident Protect还原应用程序
您可以使用Trident Protect从快照或备份还原应用程序。将应用程序还原到同一集群时,从现有快照进行还原的速度会更快。
还原应用程序时、为该应用程序配置的所有执行挂钩都会随该应用程序还原。如果存在还原后执行挂钩、则它会在还原操作中自动运行。 |
还原和故障转移操作期间的命名空间标注和标签
在还原和故障转移操作期间、目标命名空间中的标签和标注会与源命名空间中的标签和标注相匹配。此时将添加源命名空间中目标命名空间中不存在的标签或标注、并覆盖已存在的任何标签或标注、以便与源命名空间中的值匹配。仅存在于目标命名空间上的标签或标注保持不变。
如果您使用RedHat OpenShift、请务必注意命名空间标注在OpenShift环境中的关键作用。命名空间标注可确保还原的Pod遵循OpenShift安全上下文约束(SCC)定义的适当权限和安全配置、并可在没有权限问题的情况下访问卷。有关详细信息,请参阅 "OpenShift安全上下文约束文档"。 |
在执行还原或故障转移操作之前、您可以通过设置Kubornetes环境变量来防止目标命名空间中的特定标注被覆盖 RESTORE_SKIP_NAMESPACE_ANNOTATIONS
。例如:
kubectl set env -n trident-protect deploy/trident-protect-controller-manager RESTORE_SKIP_NAMESPACE_ANNOTATIONS=<annotation_key_to_skip_1>,<annotation_key_to_skip_2>
如果您使用带有标志的Helm安装源应用程序,则会对标签键进行 --create-namespace`特殊处理 `name
。在还原或故障转移过程中、Trident Protect会将此标签复制到目标命名空间、但如果源命名空间中的值与源命名空间匹配、则会将此值更新为目标命名空间值。如果此值与源命名空间不匹配、则会将其复制到目标命名空间、而不会发生任何更改。
示例
以下示例显示了一个源和目标命名空间、每个命名空间都具有不同的标注和标签。您可以查看目标命名空间在操作前后的状态、以及标注和标签在目标命名空间中的组合或覆盖方式。
在执行还原或故障转移操作之前
下表说明了执行还原或故障转移操作之前示例源和目标名称卷的状态:
命名空间 | 标注 | 标签 |
---|---|---|
命名空间ns-1 (源) |
|
|
命名空间ns-2 (目标) |
|
|
还原操作之后
下表显示了还原或故障转移操作后示例目标命名空间的状态。已添加某些密钥、某些密钥已被覆盖、并且 `name`标签已更新以与目标命名空间匹配:
命名空间 | 标注 | 标签 |
---|---|---|
命名空间ns-2 (目标) |
|
|
从备份还原到其他命名空间
使用BackupRestore CR将备份还原到其他命名空间时、Trident Protect会将应用程序还原到新命名空间中、但还原后的应用程序不会自动受Trident Protect保护。要保护已还原的应用程序、您需要为已还原的应用程序创建应用程序CR、以使其受到Trident Protect的保护。
将备份还原到具有现有资源的其他命名空间不会更改与备份中的资源共享名称的任何资源。要还原备份中的所有资源、请删除并重新创建目标命名空间、或者将备份还原到新命名空间。 |
-
创建自定义资源(CR)文件并将其命名为
trident-protect-backup-restore-cr.yaml
。 -
在创建的文件中、配置以下属性:
-
。metadata.name:(required_)此自定义资源的名称;请为您的环境选择一个唯一且合理的名称。
-
spec.appArchivePath:AppVault中存储备份内容的路径。您可以使用以下命令查找此路径:
kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
-
spec.appVaultRef:(required)存储备份内容的AppVault的名称。
-
。spec.namespaceMapping:还原操作的源命名空间到目标命名空间的映射。将和 `my-destination-namespace`替换 `my-source-namespace`为您环境中的信息。
-
spec.storageClassMapping:还原操作的源存储类到目标存储类的映射。将和 `sourceStorageClass`替换 `destinationStorageClass`为您环境中的信息。
apiVersion: protect.trident.netapp.io/v1o kind: BackupRestore metadata: name: my-cr-name namespace: my-destination-namespace spec: appArchivePath: my-backup-path appVaultRef: appvault-name namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}] storageClassMapping: destination: "${destinationStorageClass}" source: "${sourceStorageClass}"
-
-
(可 选)如果只需要选择要还原的应用程序的某些资源、请添加包含或排除带有特定标签的资源的筛选:
-
resourceFilter.resourceSourcesionCriteri:(筛选时需要) `include or exclude`用于包含或排除在resourceMatchers中定义的资源。添加以下resourceMatchers参数以定义要包括或排除的资源:
-
resourceFilter.resourceMatcher:resourceMatcher对象数组。
-
resourceMatcher[].group:(可 选)要筛选的资源的组。
-
resourceMatcher[].KIND:(可 选)要筛选的资源种类。
-
resourceMatcher[].version:(可 选)要筛选的资源版本。
-
resourceMatcher[].names:(可 选)要筛选的资源的Kubernetes metadata.name字段中的名称。
-
resourceMatcher[].namespies:(可 选)要筛选的资源的Kubernetes metadata.name字段中的命名空间。
-
*resourceMatcher[].labelSelectors *:(可 选)资源的Kubernetes metadata.name字段中的标签选择器字符串,如中所定义 "Kubernetes 文档"。例如:
"trident.netapp.io/os=linux"
。例如:
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
使用正确的值填充文件后
trident-protect-backup-restore-cr.yaml
、应用CR:kubectl apply -f trident-protect-backup-restore-cr.yaml
-
将备份还原到其他命名空间、将括号中的值替换为环境中的信息。此 `namespace-mapping`参数使用冒号分隔的卷来将源卷的源卷映射到格式为的正确目标卷的 `source1:dest1,source2:dest2`卷。例如:
tridentctl protect create backuprestore <my_restore_name> --backup <backup_namespace>/<backup_to_restore> --namespace-mapping <source_to_destination_namespace_mapping>
从备份还原到原始命名空间
您可以随时将备份还原到原始命名空间。
-
创建自定义资源(CR)文件并将其命名为
trident-protect-backup-ipr-cr.yaml
。 -
在创建的文件中、配置以下属性:
-
。metadata.name:(required_)此自定义资源的名称;请为您的环境选择一个唯一且合理的名称。
-
spec.appArchivePath:AppVault中存储备份内容的路径。您可以使用以下命令查找此路径:
kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
-
spec.appVaultRef:(required)存储备份内容的AppVault的名称。
例如:
apiVersion: protect.trident.netapp.io/v1 kind: BackupInplaceRestore metadata: name: my-cr-name namespace: my-app-namespace spec: appArchivePath: my-backup-path appVaultRef: appvault-name
-
-
(可 选)如果只需要选择要还原的应用程序的某些资源、请添加包含或排除带有特定标签的资源的筛选:
-
resourceFilter.resourceSourcesionCriteri:(筛选时需要) `include or exclude`用于包含或排除在resourceMatchers中定义的资源。添加以下resourceMatchers参数以定义要包括或排除的资源:
-
resourceFilter.resourceMatcher:resourceMatcher对象数组。
-
resourceMatcher[].group:(可 选)要筛选的资源的组。
-
resourceMatcher[].KIND:(可 选)要筛选的资源种类。
-
resourceMatcher[].version:(可 选)要筛选的资源版本。
-
resourceMatcher[].names:(可 选)要筛选的资源的Kubernetes metadata.name字段中的名称。
-
resourceMatcher[].namespies:(可 选)要筛选的资源的Kubernetes metadata.name字段中的命名空间。
-
*resourceMatcher[].labelSelectors *:(可 选)资源的Kubernetes metadata.name字段中的标签选择器字符串,如中所定义 "Kubernetes 文档"。例如:
"trident.netapp.io/os=linux"
。例如:
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
使用正确的值填充文件后
trident-protect-backup-ipr-cr.yaml
、应用CR:kubectl apply -f trident-protect-backup-ipr-cr.yaml
-
将备份还原到原始命名空间、将括号中的值替换为环境中的信息。
backup`参数使用格式为的命名空间和备份名称 `<namespace>/<name>
。例如:tridentctl protect create backupinplacerestore <my_restore_name> --backup <namespace/backup_to_restore>
从快照还原到其他命名空间
您可以使用自定义资源(CR)文件从快照将数据还原到其他命名空间或原始源命名空间。使用SnapshotRestore CR将快照还原到其他命名空间时、Trident Protect会将应用程序还原到新命名空间中、但还原后的应用程序不会自动受Trident Protect保护。要保护已还原的应用程序、您需要为已还原的应用程序创建应用程序CR、以使其受到Trident Protect的保护。
-
创建自定义资源(CR)文件并将其命名为
trident-protect-snapshot-restore-cr.yaml
。 -
在创建的文件中、配置以下属性:
-
。metadata.name:(required_)此自定义资源的名称;请为您的环境选择一个唯一且合理的名称。
-
spec.appVaultRef:(required)存储快照内容的AppVault的名称。
-
spec.appArchivePath:AppVault中存储快照内容的路径。您可以使用以下命令查找此路径:
kubectl get snapshots <SNAPHOT_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
-
。spec.namespaceMapping:还原操作的源命名空间到目标命名空间的映射。将和 `my-destination-namespace`替换 `my-source-namespace`为您环境中的信息。
-
spec.storageClassMapping:还原操作的源存储类到目标存储类的映射。将和 `sourceStorageClass`替换 `destinationStorageClass`为您环境中的信息。
apiVersion: protect.trident.netapp.io/v1 kind: SnapshotRestore metadata: name: my-cr-name namespace: my-app-namespace spec: appVaultRef: appvault-name appArchivePath: my-snapshot-path namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}] storageClassMapping: destination: "${destinationStorageClass}" source: "${sourceStorageClass}"
-
-
(可 选)如果只需要选择要还原的应用程序的某些资源、请添加包含或排除带有特定标签的资源的筛选:
-
resourceFilter.resourceSourcesionCriteri:(筛选时需要) `include or exclude`用于包含或排除在resourceMatchers中定义的资源。添加以下resourceMatchers参数以定义要包括或排除的资源:
-
resourceFilter.resourceMatcher:resourceMatcher对象数组。
-
resourceMatcher[].group:(可 选)要筛选的资源的组。
-
resourceMatcher[].KIND:(可 选)要筛选的资源种类。
-
resourceMatcher[].version:(可 选)要筛选的资源版本。
-
resourceMatcher[].names:(可 选)要筛选的资源的Kubernetes metadata.name字段中的名称。
-
resourceMatcher[].namespies:(可 选)要筛选的资源的Kubernetes metadata.name字段中的命名空间。
-
*resourceMatcher[].labelSelectors *:(可 选)资源的Kubernetes metadata.name字段中的标签选择器字符串,如中所定义 "Kubernetes 文档"。例如:
"trident.netapp.io/os=linux"
。例如:
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
使用正确的值填充文件后
trident-protect-snapshot-restore-cr.yaml
、应用CR:kubectl apply -f trident-protect-snapshot-restore-cr.yaml
-
将快照还原到其他命名空间、将括号中的值替换为环境中的信息。
-
snapshot`参数使用格式为的命名空间和快照名称 `<namespace>/<name>
。 -
此 `namespace-mapping`参数使用冒号分隔的卷来将源卷的源卷映射到格式为的正确目标卷的 `source1:dest1,source2:dest2`卷。
例如:
tridentctl protect create snapshotrestore <my_restore_name> --snapshot <namespace/snapshot_to_restore> --namespace-mapping <source_to_destination_namespace_mapping>
-
从快照还原到原始命名空间
您可以随时将快照还原到原始命名空间。
-
创建自定义资源(CR)文件并将其命名为
trident-protect-snapshot-ipr-cr.yaml
。 -
在创建的文件中、配置以下属性:
-
。metadata.name:(required_)此自定义资源的名称;请为您的环境选择一个唯一且合理的名称。
-
spec.appVaultRef:(required)存储快照内容的AppVault的名称。
-
spec.appArchivePath:AppVault中存储快照内容的路径。您可以使用以下命令查找此路径:
kubectl get snapshots <SNAPSHOT_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
apiVersion: protect.trident.netapp.io/v1 kind: SnapshotInplaceRestore metadata: name: my-cr-name namespace: my-app-namespace spec: appVaultRef: appvault-name appArchivePath: my-snapshot-path
-
-
(可 选)如果只需要选择要还原的应用程序的某些资源、请添加包含或排除带有特定标签的资源的筛选:
-
resourceFilter.resourceSourcesionCriteri:(筛选时需要) `include or exclude`用于包含或排除在resourceMatchers中定义的资源。添加以下resourceMatchers参数以定义要包括或排除的资源:
-
resourceFilter.resourceMatcher:resourceMatcher对象数组。
-
resourceMatcher[].group:(可 选)要筛选的资源的组。
-
resourceMatcher[].KIND:(可 选)要筛选的资源种类。
-
resourceMatcher[].version:(可 选)要筛选的资源版本。
-
resourceMatcher[].names:(可 选)要筛选的资源的Kubernetes metadata.name字段中的名称。
-
resourceMatcher[].namespies:(可 选)要筛选的资源的Kubernetes metadata.name字段中的命名空间。
-
*resourceMatcher[].labelSelectors *:(可 选)资源的Kubernetes metadata.name字段中的标签选择器字符串,如中所定义 "Kubernetes 文档"。例如:
"trident.netapp.io/os=linux"
。例如:
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
使用正确的值填充文件后
trident-protect-snapshot-ipr-cr.yaml
、应用CR:kubectl apply -f trident-protect-snapshot-ipr-cr.yaml
-
将快照还原到原始命名空间、将括号中的值替换为环境中的信息。例如:
tridentctl protect create snapshotinplacerestore <my_restore_name> --snapshot <snapshot_to_restore>
检查还原操作的状态
您可以使用命令行检查正在进行、已完成或失败的还原操作的状态。
-
使用以下命令检索还原操作的状态、将括号中的值替换为环境中的信息:
kubectl get backuprestore -n <namespace_name> <my_restore_cr_name> -o jsonpath='{.status}'