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

使用 Trident Protect 還原應用程式

貢獻者

您可以使用 Trident Protect 從快照或備份還原應用程式。將應用程式還原至同一個叢集時、從現有的快照還原速度會更快。

註 當您還原應用程式時,為應用程式設定的所有執行掛鉤都會隨應用程式一起還原。如果存在還原後執行掛鉤,則會在還原作業中自動執行。

還原和容錯移轉作業期間的命名空間註釋和標籤

在還原和容錯移轉作業期間,目的地命名空間中的標籤和註釋會與來源命名空間中的標籤和註釋相符。會新增來源命名空間中不存在的標籤或註釋,並覆寫已存在的任何標籤或註釋,以符合來源命名空間的值。只存在於目的地命名空間上的標籤或註釋會保持不變。

註 如果您使用 RedHat OpenShift ,請務必注意 OpenShift 環境中命名空間註釋的關鍵作用。命名空間註釋可確保還原的 Pod 符合 OpenShift 安全性內容限制( SCC )所定義的適當權限和安全性組態,而且無需權限問題即可存取磁碟區。如需詳細資訊,請 "OpenShift 安全性內容限制文件"參閱。

您可以在執行還原或容錯移轉作業之前,先設定 Kubernetes 環境變數,以避免覆寫目的地命名空間中的特定註釋 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 (來源)

  • annotation.one / 機碼:「 updatedvalue 」

  • annotation.b2/key :「 true 」

  • 環境 = 正式作業

  • Compliance = HIPAA

  • NAME=ns-1

命名空間 nS-2 (目的地)

  • annotation.one / 機碼:「 true 」

  • annotation.the/key :「 FALSE 」

  • role = 資料庫

還原作業之後

下表說明還原或容錯移轉作業之後範例目的地命名空間的狀態。某些金鑰已新增,部分已覆寫, `name`標籤已更新以符合目的地命名空間:

命名空間 註釋 標籤

命名空間 nS-2 (目的地)

  • annotation.one / 機碼:「 updatedvalue 」

  • annotation.b2/key :「 true 」

  • annotation.the/key :「 FALSE 」

  • NAME=nS-2

  • Compliance = HIPAA

  • 環境 = 正式作業

  • role = 資料庫

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

當您使用 BackupRestore CR 將備份還原至不同的命名空間時, Trident Protect 會將應用程式還原至新命名空間,並為還原的應用程式建立應用程式 CR 。若要保護還原的應用程式,請建立隨需備份或快照,或建立保護排程。

註 將備份還原至具有現有資源的不同命名空間,並不會改變任何與備份中共用名稱的資源。若要還原備份中的所有資源,請刪除並重新建立目標命名空間,或將備份還原至新的命名空間。
使用 CR
步驟
  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 :( _required _ )儲存備份內容的 AppVault 名稱。

    • spec.namespaceMapping: 將還原作業的來源命名空間對應至目的地命名空間。以環境中的資訊取代 my-source-namespace`和 `my-destination-namespace

    • spec.storageClassMapping :將還原作業的來源儲存類別對應至目的地儲存類別。以環境中的資訊取代 destinationStorageClass`和 `sourceStorageClass

      ---
      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"}]
        storageClassMapping:
          destination: "${destinationStorageClass}"
          source: "${sourceStorageClass}"
  3. Optional )如果您只需要選取應用程式的某些資源來還原,請新增篩選功能,以包含或排除標記有特定標籤的資源:

    • resourceFilter.resourceSelectionCriteria :(篩選所需)使用 `Include`或包含或 `Exclude`排除在 resourceMatchers 中定義的資源。新增下列資源配置工具參數、以定義要納入或排除的資源:

      • resourceFilter.resourceMatchers :一組 resourceMatcher 物件。如果您在此陣列中定義多個元素,它們會比對為 OR 作業,而每個元素(群組,種類,版本)內的欄位會比對為 AND 作業。

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

        • resourceMatchers[].cher :( Optional )要篩選的資源種類。

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

        • 要篩選之資源的 Kubernetes metadata.name 欄位中的 * resourceMatchers[].names* :( Optional )名稱。

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

        • 資源的 Kubernetes metadata.name 欄位中的 *resourceMatchers[].labelSelectors * :( Optional ) Label 選取器字串,如中所定義 "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>

從備份還原至原始命名空間

您可以隨時將備份還原至原始命名空間。

使用 CR
步驟
  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 :( _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
  3. Optional )如果您只需要選取應用程式的某些資源來還原,請新增篩選功能,以包含或排除標記有特定標籤的資源:

    • resourceFilter.resourceSelectionCriteria :(篩選所需)使用 `Include`或包含或 `Exclude`排除在 resourceMatchers 中定義的資源。新增下列資源配置工具參數、以定義要納入或排除的資源:

      • resourceFilter.resourceMatchers :一組 resourceMatcher 物件。如果您在此陣列中定義多個元素,它們會比對為 OR 作業,而每個元素(群組,種類,版本)內的欄位會比對為 AND 作業。

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

        • resourceMatchers[].cher :( Optional )要篩選的資源種類。

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

        • 要篩選之資源的 Kubernetes metadata.name 欄位中的 * resourceMatchers[].names* :( Optional )名稱。

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

        • 資源的 Kubernetes metadata.name 欄位中的 *resourceMatchers[].labelSelectors * :( Optional ) Label 選取器字串,如中所定義 "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>

從備份還原至不同的叢集

如果原始叢集發生問題,您可以將備份還原至不同的叢集。

開始之前

確保符合下列先決條件:

  • 目的地叢集已安裝 Trident Protect 。

  • 目的地叢集可存取與儲存備份的來源叢集相同 AppVault 的儲存區路徑。

步驟
  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*: ( _required )此自訂資源的名稱;為您的環境選擇唯一且合理的名稱。

    • spec.appVaultRef :( _required _ )儲存備份內容的 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> -n <application_namespace> --context <destination_cluster_name>

從快照還原至不同的命名空間

您可以使用自訂資源( CR )檔案、將資料從快照還原至不同的命名空間或原始來源命名空間。當您使用 SnapshotRestore CR 將快照還原至不同的命名空間時, Trident Protect 會在新命名空間中還原應用程式,並為還原的應用程式建立應用程式 CR 。若要保護還原的應用程式,請建立隨需備份或快照,或建立保護排程。

使用 CR
步驟
  1. 建立自訂資源( CR )檔案並命名為 trident-protect-snapshot-restore-cr.yaml

  2. 在您建立的檔案中,設定下列屬性:

    • * 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-source-namespace`和 `my-destination-namespace

    • spec.storageClassMapping :將還原作業的來源儲存類別對應至目的地儲存類別。以環境中的資訊取代 destinationStorageClass`和 `sourceStorageClass

      ---
      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}"
  3. Optional )如果您只需要選取應用程式的某些資源來還原,請新增篩選功能,以包含或排除標記有特定標籤的資源:

    • resourceFilter.resourceSelectionCriteria :(篩選所需)使用 `Include`或包含或 `Exclude`排除在 resourceMatchers 中定義的資源。新增下列資源配置工具參數、以定義要納入或排除的資源:

      • resourceFilter.resourceMatchers :一組 resourceMatcher 物件。如果您在此陣列中定義多個元素,它們會比對為 OR 作業,而每個元素(群組,種類,版本)內的欄位會比對為 AND 作業。

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

        • resourceMatchers[].cher :( Optional )要篩選的資源種類。

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

        • 要篩選之資源的 Kubernetes metadata.name 欄位中的 * resourceMatchers[].names* :( Optional )名稱。

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

        • 資源的 Kubernetes metadata.name 欄位中的 *resourceMatchers[].labelSelectors * :( Optional ) Label 選取器字串,如中所定義 "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>

從快照還原至原始命名空間

您可以隨時將快照還原至原始命名空間。

使用 CR
步驟
  1. 建立自訂資源( CR )檔案並命名為 trident-protect-snapshot-ipr-cr.yaml

  2. 在您建立的檔案中,設定下列屬性:

    • * 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
  3. Optional )如果您只需要選取應用程式的某些資源來還原,請新增篩選功能,以包含或排除標記有特定標籤的資源:

    • resourceFilter.resourceSelectionCriteria :(篩選所需)使用 `Include`或包含或 `Exclude`排除在 resourceMatchers 中定義的資源。新增下列資源配置工具參數、以定義要納入或排除的資源:

      • resourceFilter.resourceMatchers :一組 resourceMatcher 物件。如果您在此陣列中定義多個元素,它們會比對為 OR 作業,而每個元素(群組,種類,版本)內的欄位會比對為 AND 作業。

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

        • resourceMatchers[].cher :( Optional )要篩選的資源種類。

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

        • 要篩選之資源的 Kubernetes metadata.name 欄位中的 * resourceMatchers[].names* :( Optional )名稱。

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

        • 資源的 Kubernetes metadata.name 欄位中的 *resourceMatchers[].labelSelectors * :( Optional ) Label 選取器字串,如中所定義 "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}'