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

使用Trident Protect 恢复应用程序

贡献者 netapp-aruldeepa

您可以使用Trident Protect 从快照或备份中恢复您的应用程序。将应用程序恢复到同一集群时,从现有快照恢复速度会更快。

备注
  • 恢复应用程序时,为该应用程序配置的所有执行钩子都会随应用程序一起恢复。如果存在恢复后执行钩子,它将作为恢复操作的一部分自动运行。

  • 支持从备份恢复到不同的命名空间或恢复到原始命名空间(适用于 qtree 卷)。但是,对于 qtree 卷,不支持从快照恢复到不同的命名空间或恢复到原始命名空间。

  • 您可以使用高级设置来自定义恢复操作。欲了解更多信息,请参阅 "使用高级Trident保护恢复设置"

从备份还原到不同的命名空间

当您使用 BackupRestore CR 将备份还原到不同的命名空间时, Trident Protect 会在新的命名空间中还原应用程序,并为还原的应用程序创建一个应用程序 CR。为了保护已恢复的应用程序,可以创建按需备份或快照,或者制定保护计划。

备注 将备份还原到具有现有资源的不同命名空间不会更改与备份中资源同名的任何资源。要恢复备份中的所有资源,要么删除并重新创建目标命名空间,要么将备份恢复到新的命名空间。
开始之前

确保 AWS 会话令牌的过期时间足以满足任何长时间运行的 S3 恢复操作。如果在恢复操作期间令牌过期,则操作可能会失败。

备注 当您使用 Kopia 作为数据移动器恢复备份时,您可以选择在 CR 中指定注释或使用 CLI 来控制 Kopia 使用的临时存储的行为。请参阅 "科皮亚文件"有关您可以配置的选项的更多信息。使用 `tridentctl-protect create --help`有关使用Trident Protect CLI 指定注释的更多信息,请参阅命令。
使用 CR
步骤
  1. 创建自定义资源 (CR) 文件并将其命名为 trident-protect-backup-restore-cr.yaml

  2. 在您创建的文件中,配置以下属性:

    • metadata.name: (必填) 此自定义资源的名称;请为您的环境选择一个唯一且有意义的名称。

    • spec.appArchivePath: AppVault 内存储备份内容的路径。您可以使用以下命令查找此路径:

      kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
    • spec.appVaultRef: (必需) 存储备份内容的 AppVault 的名称。

    • spec.namespaceMapping:恢复操作的源命名空间到目标命名空间的映射。代替 `my-source-namespace`和 `my-destination-namespace`利用来自周围环境的信息。

      ---
      apiVersion: protect.trident.netapp.io/v1
      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"}]
  3. (可选)如果您只需要选择应用程序中的某些资源进行恢复,请添加筛选条件,以包含或排除带有特定标签的资源:

    备注 Trident Protect 会自动选择一些资源,因为它们与您选择的资源存在关联。例如,如果您选择持久卷声明资源并且它有一个关联的 pod, Trident Protect 还会恢复关联的 pod。
    • resourceFilter.resourceSelectionCriteria:(筛选时必需)使用 `Include`或者 `Exclude`包含或排除 resourceMatchers 中定义的资源。添加以下 resourceMatchers 参数以定义要包含或排除的资源:

      • resourceFilter.resourceMatchers:resourceMatcher 对象数组。如果在该数组中定义多个元素,则它们之间按 OR 运算匹配,每个元素内的字段(组、种类、版本)之间按 AND 运算匹配。

        • resourceMatchers[].group: (可选) 要筛选的资源组。

        • resourceMatchers[].kind: (可选) 要筛选的资源类型。

        • resourceMatchers[].version: (可选) 要筛选的资源版本。

        • resourceMatchers[].names: (可选) 要过滤的资源的 Kubernetes 元数据.name 字段中的名称。

        • resourceMatchers[].namespaces: (可选) 要过滤的资源的 Kubernetes 元数据.name 字段中的命名空间。

        • resourceMatchers[].labelSelectors: (可选) 资源的 Kubernetes 元数据.name 字段中的标签选择器字符串,如在以下位置定义: "Kubernetes 文档" 。例如: "trident.netapp.io/os=linux"

          例如:

    spec:
      resourceFilter:
        resourceSelectionCriteria: "Include"
        resourceMatchers:
          - group: my-resource-group-1
            kind: my-resource-kind-1
            version: my-resource-version-1
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
          - group: my-resource-group-2
            kind: my-resource-kind-2
            version: my-resource-version-2
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
  4. 填写完之后 `trident-protect-backup-restore-cr.yaml`将文件的值正确后,应用 CR:

    kubectl apply -f trident-protect-backup-restore-cr.yaml
使用 CLI
步骤
  1. 将备份还原到不同的命名空间,并将括号中的值替换为您环境中的信息。这 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> \
    -n <application_namespace>

从备份恢复到原始命名空间

您可以随时将备份恢复到原始命名空间。

开始之前

确保 AWS 会话令牌的过期时间足以满足任何长时间运行的 S3 恢复操作。如果在恢复操作期间令牌过期,则操作可能会失败。

备注 当您使用 Kopia 作为数据移动器恢复备份时,您可以选择在 CR 中指定注释或使用 CLI 来控制 Kopia 使用的临时存储的行为。请参阅 "科皮亚文件"有关您可以配置的选项的更多信息。使用 `tridentctl-protect create --help`有关使用Trident Protect CLI 指定注释的更多信息,请参阅命令。
使用 CR
步骤
  1. 创建自定义资源 (CR) 文件并将其命名为 trident-protect-backup-ipr-cr.yaml

  2. 在您创建的文件中,配置以下属性:

    • metadata.name: (必填) 此自定义资源的名称;请为您的环境选择一个唯一且有意义的名称。

    • spec.appArchivePath: AppVault 内存储备份内容的路径。您可以使用以下命令查找此路径:

      kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
    • spec.appVaultRef: (必需) 存储备份内容的 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
  3. (可选)如果您只需要选择应用程序中的某些资源进行恢复,请添加筛选条件,以包含或排除带有特定标签的资源:

    备注 Trident Protect 会自动选择一些资源,因为它们与您选择的资源存在关联。例如,如果您选择持久卷声明资源并且它有一个关联的 pod, Trident Protect 还会恢复关联的 pod。
    • resourceFilter.resourceSelectionCriteria:(筛选时必需)使用 `Include`或者 `Exclude`包含或排除 resourceMatchers 中定义的资源。添加以下 resourceMatchers 参数以定义要包含或排除的资源:

      • resourceFilter.resourceMatchers:resourceMatcher 对象数组。如果在该数组中定义多个元素,则它们之间按 OR 运算匹配,每个元素内的字段(组、种类、版本)之间按 AND 运算匹配。

        • resourceMatchers[].group: (可选) 要筛选的资源组。

        • resourceMatchers[].kind: (可选) 要筛选的资源类型。

        • resourceMatchers[].version: (可选) 要筛选的资源版本。

        • resourceMatchers[].names: (可选) 要过滤的资源的 Kubernetes 元数据.name 字段中的名称。

        • resourceMatchers[].namespaces: (可选) 要过滤的资源的 Kubernetes 元数据.name 字段中的命名空间。

        • resourceMatchers[].labelSelectors: (可选) 资源的 Kubernetes 元数据.name 字段中的标签选择器字符串,如在以下位置定义: "Kubernetes 文档" 。例如: "trident.netapp.io/os=linux"

          例如:

    spec:
      resourceFilter:
        resourceSelectionCriteria: "Include"
        resourceMatchers:
          - group: my-resource-group-1
            kind: my-resource-kind-1
            version: my-resource-version-1
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
          - group: my-resource-group-2
            kind: my-resource-kind-2
            version: my-resource-version-2
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
  4. 填写完之后 `trident-protect-backup-ipr-cr.yaml`将文件的值正确后,应用 CR:

    kubectl apply -f trident-protect-backup-ipr-cr.yaml
使用 CLI
步骤
  1. 将备份恢复到原始命名空间,并将括号中的值替换为您环境中的信息。这 backup`参数使用命名空间和备份名称,格式如下 `<namespace>/<name>。例如:

    tridentctl-protect create backupinplacerestore <my_restore_name> \
    --backup <namespace/backup_to_restore> \
    -n <application_namespace>

从备份恢复到不同的集群

如果原始集群出现问题,您可以将备份还原到其他集群。

备注 当您使用 Kopia 作为数据移动器恢复备份时,您可以选择在 CR 中指定注释或使用 CLI 来控制 Kopia 使用的临时存储的行为。请参阅 "科皮亚文件"有关您可以配置的选项的更多信息。使用 `tridentctl-protect create --help`有关使用Trident Protect CLI 指定注释的更多信息,请参阅命令。
开始之前

确保满足以下先决条件:

  • 目标集群已安装Trident Protect。

  • 目标集群可以访问与源集群相同的 AppVault 的存储桶路径,备份就存储在该存储桶中。

  • 确保在运行 AppVault CR 时,本地环境可以连接到 AppVault CR 中定义的对象存储桶。 `tridentctl-protect get appvaultcontent`命令。如果网络限制阻止访问,请从目标集群上的 pod 内运行Trident Protect CLI。

  • 确保 AWS 会话令牌的过期时间足以满足任何长时间运行的恢复操作。如果在恢复操作期间令牌过期,则操作可能会失败。

    • 请参阅 "AWS API 文档"有关检查当前会话令牌过期时间的更多信息。

    • 请参阅 "AWS 文档"有关 AWS 资源凭证的更多信息。

步骤
  1. 使用Trident Protect CLI 插件检查目标集群上 AppVault CR 的可用性:

    tridentctl-protect get appvault --context <destination_cluster_name>
    备注 确保用于应用程序还原的命名空间存在于目标集群上。
  2. 查看目标集群中可用 AppVault 的备份内容:

    tridentctl-protect get appvaultcontent <appvault_name> \
    --show-resources backup \
    --show-paths \
    --context <destination_cluster_name>

    运行此命令将显示 AppVault 中可用的备份,包括其来源集群、相应的应用程序名称、时间戳和归档路径。

    示例输出:

    +-------------+-----------+--------+-----------------+--------------------------+-------------+
    |   CLUSTER   |    APP    |  TYPE  |      NAME       |        TIMESTAMP         |    PATH     |
    +-------------+-----------+--------+-----------------+--------------------------+-------------+
    | production1 | wordpress | backup | wordpress-bkup-1| 2024-10-30 08:37:40 (UTC)| backuppath1 |
    | production1 | wordpress | backup | wordpress-bkup-2| 2024-10-30 08:37:40 (UTC)| backuppath2 |
    +-------------+-----------+--------+-----------------+--------------------------+-------------+
  3. 使用 AppVault 名称和归档路径将应用程序还原到目标集群:

使用 CR
  1. 创建自定义资源 (CR) 文件并将其命名为 trident-protect-backup-restore-cr.yaml

  2. 在您创建的文件中,配置以下属性:

    • metadata.name: (必填) 此自定义资源的名称;请为您的环境选择一个唯一且有意义的名称。

    • spec.appVaultRef: (必需) 存储备份内容的 AppVault 的名称。

    • spec.appArchivePath: AppVault 内存储备份内容的路径。您可以使用以下命令查找此路径:

      kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
      备注 如果 BackupRestore CR 不可用,您可以使用步骤 2 中提到的命令来查看备份内容。
    • spec.namespaceMapping:恢复操作的源命名空间到目标命名空间的映射。代替 `my-source-namespace`和 `my-destination-namespace`利用来自周围环境的信息。

      例如:

    apiVersion: protect.trident.netapp.io/v1
    kind: BackupRestore
    metadata:
      name: my-cr-name
      namespace: my-destination-namespace
    spec:
      appVaultRef: appvault-name
      appArchivePath: my-backup-path
      namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}]
  3. 填写完之后 `trident-protect-backup-restore-cr.yaml`将文件的值正确后,应用 CR:

    kubectl apply -f trident-protect-backup-restore-cr.yaml
使用 CLI
  1. 使用以下命令恢复应用程序,将括号中的值替换为您环境中的信息。命名空间映射参数使用冒号分隔的命名空间,将源命名空间映射到正确的目标命名空间,格式为 source1:dest1,source2:dest2。例如:

    tridentctl-protect create backuprestore <restore_name> \
    --namespace-mapping <source_to_destination_namespace_mapping> \
    --appvault <appvault_name> \
    --path <backup_path> \
    --context <destination_cluster_name> \
    -n <application_namespace>

从快照还原到不同的命名空间

您可以使用自定义资源 (CR) 文件从快照恢复数据,恢复到不同的命名空间或原始源命名空间。当您使用 SnapshotRestore CR 将快照还原到不同的命名空间时, Trident Protect 会在新的命名空间中还原应用程序,并为还原的应用程序创建一个应用程序 CR。为了保护已恢复的应用程序,可以创建按需备份或快照,或者制定保护计划。

备注 SnapshotRestore 支持 `spec.storageClassMapping`属性,但仅当源存储类和目标存储类使用相同的存储后端时才有效。如果您尝试恢复到 `StorageClass`如果使用不同的存储后端,则恢复操作将失败。
开始之前

确保 AWS 会话令牌的过期时间足以满足任何长时间运行的 S3 恢复操作。如果在恢复操作期间令牌过期,则操作可能会失败。

使用 CR
步骤
  1. 创建自定义资源 (CR) 文件并将其命名为 trident-protect-snapshot-restore-cr.yaml

  2. 在您创建的文件中,配置以下属性:

    • metadata.name: (必填) 此自定义资源的名称;请为您的环境选择一个唯一且有意义的名称。

    • spec.appVaultRef: (必需) 存储快照内容的 AppVault 的名称。

    • spec.appArchivePath: AppVault 内存储快照内容的路径。您可以使用以下命令查找此路径:

      kubectl get snapshots <SNAPHOT_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
    • spec.namespaceMapping:恢复操作的源命名空间到目标命名空间的映射。代替 `my-source-namespace`和 `my-destination-namespace`利用来自周围环境的信息。

      ---
      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"}]
  3. (可选)如果您只需要选择应用程序中的某些资源进行恢复,请添加筛选条件,以包含或排除带有特定标签的资源:

    备注 Trident Protect 会自动选择一些资源,因为它们与您选择的资源存在关联。例如,如果您选择持久卷声明资源并且它有一个关联的 pod, Trident Protect 还会恢复关联的 pod。
    • resourceFilter.resourceSelectionCriteria:(筛选时必需)使用 `Include`或者 `Exclude`包含或排除 resourceMatchers 中定义的资源。添加以下 resourceMatchers 参数以定义要包含或排除的资源:

      • resourceFilter.resourceMatchers:resourceMatcher 对象数组。如果在该数组中定义多个元素,则它们之间按 OR 运算匹配,每个元素内的字段(组、种类、版本)之间按 AND 运算匹配。

        • resourceMatchers[].group: (可选) 要筛选的资源组。

        • resourceMatchers[].kind: (可选) 要筛选的资源类型。

        • resourceMatchers[].version: (可选) 要筛选的资源版本。

        • resourceMatchers[].names: (可选) 要过滤的资源的 Kubernetes 元数据.name 字段中的名称。

        • resourceMatchers[].namespaces: (可选) 要过滤的资源的 Kubernetes 元数据.name 字段中的命名空间。

        • resourceMatchers[].labelSelectors: (可选) 资源的 Kubernetes 元数据.name 字段中的标签选择器字符串,如在以下位置定义: "Kubernetes 文档" 。例如: "trident.netapp.io/os=linux"

          例如:

    spec:
      resourceFilter:
        resourceSelectionCriteria: "Include"
        resourceMatchers:
          - group: my-resource-group-1
            kind: my-resource-kind-1
            version: my-resource-version-1
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
          - group: my-resource-group-2
            kind: my-resource-kind-2
            version: my-resource-version-2
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
  4. 填写完之后 `trident-protect-snapshot-restore-cr.yaml`将文件的值正确后,应用 CR:

    kubectl apply -f trident-protect-snapshot-restore-cr.yaml
使用 CLI
步骤
  1. 将快照还原到不同的命名空间,并将括号中的值替换为您环境中的信息。

    • 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> \
    -n <application_namespace>

从快照恢复到原始命名空间

您可以随时将快照恢复到原始命名空间。

开始之前

确保 AWS 会话令牌的过期时间足以满足任何长时间运行的 S3 恢复操作。如果在恢复操作期间令牌过期,则操作可能会失败。

使用 CR
步骤
  1. 创建自定义资源 (CR) 文件并将其命名为 trident-protect-snapshot-ipr-cr.yaml

  2. 在您创建的文件中,配置以下属性:

    • metadata.name: (必填) 此自定义资源的名称;请为您的环境选择一个唯一且有意义的名称。

    • spec.appVaultRef: (必需) 存储快照内容的 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
  3. (可选)如果您只需要选择应用程序中的某些资源进行恢复,请添加筛选条件,以包含或排除带有特定标签的资源:

    备注 Trident Protect 会自动选择一些资源,因为它们与您选择的资源存在关联。例如,如果您选择持久卷声明资源并且它有一个关联的 pod, Trident Protect 还会恢复关联的 pod。
    • resourceFilter.resourceSelectionCriteria:(筛选时必需)使用 `Include`或者 `Exclude`包含或排除 resourceMatchers 中定义的资源。添加以下 resourceMatchers 参数以定义要包含或排除的资源:

      • resourceFilter.resourceMatchers:resourceMatcher 对象数组。如果在该数组中定义多个元素,则它们之间按 OR 运算匹配,每个元素内的字段(组、种类、版本)之间按 AND 运算匹配。

        • resourceMatchers[].group: (可选) 要筛选的资源组。

        • resourceMatchers[].kind: (可选) 要筛选的资源类型。

        • resourceMatchers[].version: (可选) 要筛选的资源版本。

        • resourceMatchers[].names: (可选) 要过滤的资源的 Kubernetes 元数据.name 字段中的名称。

        • resourceMatchers[].namespaces: (可选) 要过滤的资源的 Kubernetes 元数据.name 字段中的命名空间。

        • resourceMatchers[].labelSelectors: (可选) 资源的 Kubernetes 元数据.name 字段中的标签选择器字符串,如在以下位置定义: "Kubernetes 文档" 。例如: "trident.netapp.io/os=linux"

          例如:

    spec:
      resourceFilter:
        resourceSelectionCriteria: "Include"
        resourceMatchers:
          - group: my-resource-group-1
            kind: my-resource-kind-1
            version: my-resource-version-1
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
          - group: my-resource-group-2
            kind: my-resource-kind-2
            version: my-resource-version-2
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
  4. 填写完之后 `trident-protect-snapshot-ipr-cr.yaml`将文件的值正确后,应用 CR:

    kubectl apply -f trident-protect-snapshot-ipr-cr.yaml
使用 CLI
步骤
  1. 将快照恢复到原始命名空间,并将括号中的值替换为您环境中的信息。例如:

    tridentctl-protect create snapshotinplacerestore <my_restore_name> \
    --snapshot <snapshot_to_restore> \
    -n <application_namespace>

检查还原操作的状态

您可以使用命令行来检查正在进行、已完成或已失败的还原操作的状态。

步骤
  1. 使用以下命令检索恢复操作的状态,将方括号中的值替换为您环境中的信息:

    kubectl get backuprestore -n <namespace_name> <my_restore_cr_name> -o jsonpath='{.status}'