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

使用自定义资源还原 Kubernetes 应用程序

贡献者 netapp-mwallis

您可以使用自定义资源从快照或备份还原应用程序。将应用程序还原到同一集群时,从现有快照还原将更快。

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

  • qtree 卷支持从备份还原到其他命名空间或原始命名空间。但是,qtree 卷不支持从快照还原到其他命名空间或原始命名空间。

  • 您可以使用高级设置自定义还原操作。要了解更多信息,请参阅 "使用高级自定义资源还原设置"

将备份还原到其他命名空间

使用 BackupRestore CR 将备份还原到其他命名空间时,Backup and Recovery 会在新命名空间中还原应用程序,并为还原的应用程序创建应用程序 CR。要保护还原的应用程序,请创建按需备份或快照,或建立保护计划。

备注
  • 使用现有资源将备份还原到其他命名空间不会更改与备份中的名称共享的任何资源。要还原备份中的所有资源,请删除并重新创建目标命名空间,或将备份还原到新命名空间。

  • 使用 CR 还原到新命名空间时,您必须在应用 CR 之前手动创建目标命名空间。Backup and Recovery 仅在使用 CLI 时自动创建命名空间。

开始之前

确保 AWS 会话令牌过期时间足以进行任何长期运行的 s3 还原操作。如果令牌在还原操作期间过期,则操作可能会失败。

备注 使用 Kopia 作为数据移动器还原备份时,可以选择在 CR 中指定注释,以控制 Kopia 使用的临时存储的行为。有关可以配置的选项的详细信息,请参见 "Kopia 文档"
步骤
  1. 创建自定义资源 (CR) 文件并将其命名为 trident-protect-backup-restore-cr.yaml

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

    • metadata.name:(Required)此自定义资源的名称;为您的环境选择一个唯一且合理的名称。

    • 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:(Optional)要筛选的资源的组。

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

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

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

        • resourceMatchers[].namespaces: (Optional) 要过滤的资源的 Kubernetes metadata.name 字段中的命名空间。

        • resourceMatchers[].labelSelectors: (Optional) 资源的 Kubernetes metadata.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

将备份还原到原始命名空间

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

开始之前

确保 AWS 会话令牌过期时间足以进行任何长期运行的 s3 还原操作。如果令牌在还原操作期间过期,则操作可能会失败。

备注 使用 Kopia 作为数据移动器还原备份时,可以选择在 CR 中指定注释,以控制 Kopia 使用的临时存储的行为。有关可以配置的选项的详细信息,请参见 "Kopia 文档"
步骤
  1. 创建自定义资源 (CR) 文件并将其命名为 trident-protect-backup-ipr-cr.yaml

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

    • metadata.name:(Required)此自定义资源的名称;为您的环境选择一个唯一且合理的名称。

    • 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:(Optional)要筛选的资源的组。

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

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

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

        • resourceMatchers[].namespaces: (Optional) 要过滤的资源的 Kubernetes metadata.name 字段中的命名空间。

        • resourceMatchers[].labelSelectors: (Optional) 资源的 Kubernetes metadata.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

将备份还原到其他集群

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

备注
  • 使用 Kopia 作为数据移动器还原备份时,可以选择在 CR 中指定注释,以控制 Kopia 使用的临时存储的行为。有关可以配置的选项的详细信息,请参见 "Kopia 文档"

  • 当使用 CR 还原到新的命名空间时,您必须在应用 CR 之前手动创建目标命名空间。

开始之前

确保满足以下先决条件:

  • 目标集群已安装 Trident Protect。

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

  • 确保 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 名称和存档路径将应用程序还原到目标集群:

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

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

    • metadata.name:(Required)此自定义资源的名称;为您的环境选择一个唯一且合理的名称。

    • 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"}]
  6. 使用正确的值填充 `trident-protect-backup-restore-cr.yaml`文件后,应用 CR:

    kubectl apply -f trident-protect-backup-restore-cr.yaml

将快照还原到其他命名空间

您可以使用自定义资源 (CR) 文件将数据从快照还原到不同的命名空间或原始源命名空间。使用 SnapshotRestore CR 将快照还原到其他命名空间时,Backup and Recovery 会在新的命名空间中还原应用程序,并为还原的应用程序创建应用程序 CR。要保护还原的应用程序,请创建按需备份或快照,或建立保护计划。

备注
  • SnapshotRestore 支持 spec.storageClassMapping`属性,但仅当源和目标存储类使用相同的存储后端时。如果尝试还原到使用不同存储后端的 `StorageClass,还原操作将失败。

  • 当使用 CR 还原到新的命名空间时,您必须在应用 CR 之前手动创建目标命名空间。

开始之前

确保 AWS 会话令牌过期时间足以进行任何长期运行的 s3 还原操作。如果令牌在还原操作期间过期,则操作可能会失败。

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

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

    • metadata.name:(Required)此自定义资源的名称;为您的环境选择一个唯一且合理的名称。

    • 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:(Optional)要筛选的资源的组。

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

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

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

        • resourceMatchers[].namespaces: (Optional) 要过滤的资源的 Kubernetes metadata.name 字段中的命名空间。

        • resourceMatchers[].labelSelectors: (Optional) 资源的 Kubernetes metadata.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

将快照还原到原始命名空间

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

开始之前

确保 AWS 会话令牌过期时间足以进行任何长期运行的 s3 还原操作。如果令牌在还原操作期间过期,则操作可能会失败。

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

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

    • metadata.name:(Required)此自定义资源的名称;为您的环境选择一个唯一且合理的名称。

    • 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:(Optional)要筛选的资源的组。

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

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

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

        • resourceMatchers[].namespaces: (Optional) 要过滤的资源的 Kubernetes metadata.name 字段中的命名空间。

        • resourceMatchers[].labelSelectors: (Optional) 资源的 Kubernetes metadata.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