Skip to main content
NetApp Backup and Recovery
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

使用自訂資源還原 Kubernetes 應用程式

貢獻者 netapp-mwallis

您可以使用自訂資源從快照或備份還原應用程式。如果要將應用程式還原到同一個叢集,從現有快照還原速度會更快。

註
  • 還原應用程式時,所有為該應用程式配置的執行鉤子都會隨應用程式一起還原。如果存在還原後執行鉤子,它會在還原操作過程中自動執行。

  • qtree 磁碟區支援從備份還原到不同的命名空間或原始命名空間。但是,qtree 磁碟區不支援從快照還原到不同的命名空間或原始命名空間。

  • 您可以使用進階設定來自訂還原操作。如需深入瞭解、請參閱 "使用進階自訂資源還原設定"

將備份還原至不同的命名空間

當您使用 BackupRestore CR 將備份還原到不同的命名空間時,NetApp Backup and Recovery 會將應用程式還原到新的命名空間,並為還原的應用程式建立一個應用程式 CR。為了保護還原的應用程式,您可以建立隨需備份或快照,或製定保護排程。

註
  • 將備份還原到具有現有資源的不同命名空間不會變更與備份中資源同名的任何資源。若要還原備份中的所有資源,請刪除並重新建立目標命名空間,或將備份還原到新的命名空間。

  • 使用 CR 還原到新命名空間時,必須先手動建立目標命名空間,然後再套用 CR。NetApp Backup and Recovery 僅在使用 CLI 時才會自動建立命名空間。

開始之前

請確保 AWS 工作階段權杖的有效期限足以應付任何長時間執行的 s3 還原作業。如果權杖在還原作業期間過期,則作業可能會失敗。

  • 有關檢查當前會話令牌過期時間的更多資訊,請參閱 "AWS API 文件"

  • 如需 AWS 資源憑證的詳細資訊,請參閱 "AWS IAM 文件"

註 當您使用 Kopia 作為資料移動工具還原備份時,您可以選擇在 CR 中指定註釋,以控制 Kopia 使用的暫存的行為。有關可配置選項的更多資訊,請參閱 "Kopia 說明文件"
步驟
  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 運算匹配,每個元素內的欄位(group、kind、version)之間按 AND 運算匹配。

        • resourceMatchers[].group:(可選)要篩選的資源群組。

        • resourceMatchers[].kind:(可選)要篩選的資源類型。

        • resourceMatchers[].version:(可選)要篩選的資源版本。

        • resourceMatchers[].names:(可選)要過濾的資源的 Kubernetes metadata.name 欄位中的名稱。

        • resourceMatchers[].namespaces:(可選)要篩選的資源的 Kubernetes metadata.name 欄位中的命名空間。

        • resourceMatchers[].labelSelectors:(可選)資源在 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 還原作業。如果權杖在還原作業期間過期,則作業可能會失敗。

  • 有關檢查當前會話令牌過期時間的更多資訊,請參閱 "AWS API 文件"

  • 如需 AWS 資源憑證的詳細資訊,請參閱 "AWS IAM 文件"

註 當您使用 Kopia 作為資料移動工具還原備份時,您可以選擇在 CR 中指定註釋,以控制 Kopia 使用的暫存的行為。有關可配置選項的更多資訊,請參閱 "Kopia 說明文件"
步驟
  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 運算匹配,每個元素內的欄位(group、kind、version)之間按 AND 運算匹配。

        • resourceMatchers[].group:(可選)要篩選的資源群組。

        • resourceMatchers[].kind:(可選)要篩選的資源類型。

        • resourceMatchers[].version:(可選)要篩選的資源版本。

        • resourceMatchers[].names:(可選)要過濾的資源的 Kubernetes metadata.name 欄位中的名稱。

        • resourceMatchers[].namespaces:(可選)要篩選的資源的 Kubernetes metadata.name 欄位中的命名空間。

        • resourceMatchers[].labelSelectors:(可選)資源在 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:(必填)此自訂資源的名稱;請為您的環境選擇一個唯一且有意義的名稱。

    • 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 將快照還原到不同的命名空間時,NetApp Backup and Recovery 會將應用程式還原到新的命名空間,並為還原的應用程式建立一個應用程式 CR。為了保護還原的應用程式,您可以建立隨需備份或快照,或製定保護排程。

註
  • SnapshotRestore 支援 spec.storageClassMapping 屬性,但僅當來源儲存類別和目標儲存類別使用相同的儲存後端時才支援。如果嘗試還原到使用不同儲存後端的 StorageClass,則還原操作將會失敗。

  • 使用 CR 還原到新命名空間時,必須先手動建立目的地命名空間,然後再套用 CR。

開始之前

請確保 AWS 工作階段權杖的有效期限足以應付任何長時間執行的 s3 還原作業。如果權杖在還原作業期間過期,則作業可能會失敗。

  • 有關檢查當前會話令牌過期時間的更多資訊,請參閱 "AWS API 文件"

  • 如需 AWS 資源憑證的詳細資訊,請參閱 "AWS IAM 文件"

步驟
  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 運算匹配,每個元素內的欄位(group、kind、version)之間按 AND 運算匹配。

        • resourceMatchers[].group:(可選)要篩選的資源群組。

        • resourceMatchers[].kind:(可選)要篩選的資源類型。

        • resourceMatchers[].version:(可選)要篩選的資源版本。

        • resourceMatchers[].names:(可選)要過濾的資源的 Kubernetes metadata.name 欄位中的名稱。

        • resourceMatchers[].namespaces:(可選)要篩選的資源的 Kubernetes metadata.name 欄位中的命名空間。

        • resourceMatchers[].labelSelectors:(可選)資源在 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 還原作業。如果權杖在還原作業期間過期,則作業可能會失敗。

  • 有關檢查當前會話令牌過期時間的更多資訊,請參閱 "AWS API 文件"

  • 如需 AWS 資源憑證的詳細資訊,請參閱 "AWS IAM 文件"

步驟
  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 運算匹配,每個元素內的欄位(group、kind、version)之間按 AND 運算匹配。

        • resourceMatchers[].group:(可選)要篩選的資源群組。

        • resourceMatchers[].kind:(可選)要篩選的資源類型。

        • resourceMatchers[].version:(可選)要篩選的資源版本。

        • resourceMatchers[].names:(可選)要過濾的資源的 Kubernetes metadata.name 欄位中的名稱。

        • resourceMatchers[].namespaces:(可選)要篩選的資源的 Kubernetes metadata.name 欄位中的命名空間。

        • resourceMatchers[].labelSelectors:(可選)資源在 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