規劃一組還原作業

本文說明如何在 Google Distributed Cloud (GDC) 實體隔離環境中,建立、編輯及刪除還原方案。

還原方案是預先設定的還原情境,適用於對應的一系列備份。還原方案可指派權限,讓具備備份建立者角色的使用者使用這些設定。

發生事件時,備份建立者可以快速獨立還原備份。舉例來說,已部署應用程式中的軟體更新可能會損毀永久資料,導致應用程式命名空間處於無效狀態,需要還原。

還原期間,您可以選擇套用一組替換規則,用於比對一組資源,並將這些資源的屬性目前值替換為新值。舉例來說,替代規則可以在還原期間變更備份資源的命名空間,將工作負載從一個命名空間遷移至另一個命名空間。

事前準備

要求 IAM 角色

如要建立還原方案,請要求 IAM 機構組織管理員授予使用者叢集備份管理員 (user-cluster-backup-admin) 角色。這個角色可建立、取得、列出、監控、更新、修補及刪除使用者叢集中的備份資源,例如備份方案和還原方案。

如果您是應用程式操作員,請要求具備使用者叢集備份管理員權限的管理員,為您建立還原方案。

建立還原方案

使用 GDC 控制台或 API 建立還原方案。

控制台

  1. 登入 GDC 控制台。
  2. 在導覽選單中,按一下「Backup for Clusters」。
  3. 按一下「Create Restore Plan」(建立還原方案)。
  4. 在「Restore plan basics」(還原方案基本資訊) 專區中,完成下列步驟,然後按一下「Next」(下一步):
    1. 在「Restore plan name」(還原方案名稱) 中,輸入還原方案的名稱。
    2. (選用) 在「Restore plan description」(還原方案說明) 中,輸入還原方案的說明。
    3. 在「Source cluster」(來源叢集) 清單中,選擇還原方案的來源叢集。
    4. 在「Project」(專案) 清單中,選擇還原方案的專案。
    5. 選取附加至來源叢集的專案。
    6. 在「Backup plan」(備份方案) 欄位中,選擇現有叢集的備份方案,該方案應對應至要還原的備份。
    7. 在「Target cluster」(目標叢集) 欄位中,選擇要還原備份的目標叢集。
  5. 在「Choose namespaced resources」(選擇命名空間資源) 專區中,完成下列步驟,然後按一下「Next」(下一步):
    1. 選擇要還原的命名空間:
      1. 按一下「Selected namespaced resources」(所選命名空間資源),指定要還原的備份命名空間。
        1. 依序點選「Edit cluster namespaces」(編輯叢集命名空間) 和「Add cluster namespace」(新增叢集命名空間),輸入命名空間。
      2. 按一下「Selected protected applications」(所選受保護的應用程式),指定命名空間和應用程式名稱來新增資源。
    2. 選擇如何處理衝突:
      1. 如果從備份還原的目標命名空間已存在於目標叢集,請按一下「Fail on conflict (non-destructive)」(發生衝突時失敗 (非破壞性)),讓還原作業失敗。
      2. 如果目標叢集內已有要從備份還原的命名空間,請按一下「Rollback (destructive)」(復原 (破壞性)),先刪除現有命名空間,再還原新的命名空間。
    3. 選擇還原磁碟區資料的方式:
      1. 按一下「Provision new volumes and restore volume data from backup」(佈建新的磁碟區,並從備份還原磁碟區資料),即可將備份中的磁碟區資料還原至新的永久磁碟。
      2. 按一下「Don't restore volume data」(不還原磁碟區資料),佈建新的永久磁碟區。如果目標叢集含有符合 PersistentVolumeClaim 要求的未繫結永久磁碟區,叢集就會繫結至該磁碟區。
      3. 按一下「Reuse existing volumes containing your data」(重複使用含有貴機構資料的現有磁碟區),不還原磁碟區備份資料。所有 PersistentVolumeClaims 都會繫結至參照現有永久磁碟的磁碟區。
  6. 選用:在「Choose cluster-scoped resources」(選取叢集範圍內的資源) 區段中,完成下列步驟,然後按一下「Next」(下一步):
    1. 按一下「Don't restore cluster-scoped resources」(不還原叢集範圍內的資源),保留現有版本的資源。
    2. 按一下「Restore cluster-scoped resources」(還原叢集範圍內的資源),依 GroupKind 還原這些資源。
      1. 按一下「Edit GroupKinds」(編輯 GroupKind),新增更多叢集範圍內的資源。輸入「API group」(API 群組) 和「Object kind」(物件種類),比對這些類型的資源。
    3. 按一下「Preserve existing resources」(保留現有資源),在目標叢集沒有資源時建立資源。
    4. 按一下「Overwrite resources in target cluster」(覆寫目標叢集中的資源),即可刪除目標叢集中已有的資源,並從備份還原副本。
  7. 選用:在「Add substitution rules」(新增替代規則) 專區中,完成下列步驟,然後按一下「Next」(下一步):
    1. 按一下「新增規則」。
    2. 在「Cluster namespaces」(叢集命名空間) 方塊中,輸入命名空間清單,比對這些命名空間中的資源。
    3. 如要新增 GroupKind,請按一下「Add GroupKind」(新增 GroupKind),然後輸入「API group」(API 群組) 和「Object kind」(物件種類),比對這些類型的資源。
    4. 在「JSON path」(JSON 路徑) 欄位中,輸入 JSON 路徑,用於識別相符資源中要套用替換作業的欄位。
    5. 在「Original value pattern」(原始值模式) 欄位中,輸入要與新值比較的原始模式。
    6. 在「新值」欄位中輸入新值,取代相符屬性的目前值。
    7. 按一下 [儲存]。
  8. 點選「建立」。

API

建立 ClusterRestorePlan 自訂資源,規劃從現有 ClusterBackupPlan 還原。ClusterRestorePlan 會指派備份建立者可還原的確切資源和命名空間組合。以下是 ClusterRestorePlan 的範例:

apiVersion: backup.gdc.goog/v1
kind: ClusterRestorePlan
metadata:
  name: RESTORE_PLAN_NAME
  namespace:  PROJECT_NAME
spec:
  targetCluster:
    targetClusterType: UserCluster
    targetClusterName:
      kind: "Cluster"
      name: CLUSTER_NAME
  description: RESTORE_PLAN_DESCRIPTION
  clusterBackupPlanName: CLUSTER_BACKUP_PLAN_NAME
  clusterRestoreConfig:
    volumeDataRestorePolicy: RestoreVolumeDataFromBackup
    clusterResourceConflictPolicy: UseBackupVersion
    namespacedResourceRestoreMode: DeleteAndRestore
    namespacedResourceRestoreScope:
      selectedNamespaces:
        namespaces: [NAME_SPACE]
    clusterBackupRepositoryRef: CLUSTER_BACKUP_REPOSITORY
    substitutionRules:
      - newValue: NEW_CONFIG_VALUE
        originValuePattern: VALUE_PATTERN
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - NAME_SPACE
      - newValue: NEW_CONFIG_VALUE
        originValuePattern: VALUE_PATTERN
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - NAME_SPACE

更改下列內容:

  • 將 RESTORE_PLAN_NAME 替換為還原方案名稱。
  • 將 PROJECT_NAME 替換為 GDC 專案名稱。
  • 將 CLUSTER_NAME 替換為叢集名稱。

本範例使用下列值:


值

屬性

說明
targetClusterName 與這項方案相關聯的專案中,來源叢集的名稱。
description 使用者提供的ClusterRestorePlan用途說明。
clusterBackupPlanName 要還原的 ClusterBackupPlan 名稱。ClusterBackupPlan 必須與 ClusterRestorePlan 位於相同的命名空間。
clusterRestoreConfig 還原程序的設定。
volumeDataRestorePolicy 指定下列其中一項:
  • NoVolumeDataRestoration:不會還原 PV/PVC。
  • RestoreVolumeDataFromBackup:系統會根據備份建立新的 PV 和 PVC。
  • ReuseVolumeHandleFromBackup:建立新的 PV,但嘗試使用原始 PV 還原 PVC。適用於還原至備份來源叢集。
clusterResourceConflictPolicy 指定處理叢集資源衝突的行為,例如資源已存在於叢集。指定下列其中一項:
  • UseExistingVersion:發生衝突時,不會覆寫現有資源
  • UseBackupVersion:發生衝突時,刪除並重新建立現有叢集資源。目標叢集中現有的叢集範圍資源,會由備份中的版本覆寫。這個選項有危險性,如果使用不當,可能會導致非預期的資料遺失。舉例來說,刪除自訂資源定義會導致 Kubernetes 刪除該類型的所有自訂資源。
namespacedResourceRestoreMode 處理要還原的命名空間資源集已存在於目標叢集的情況。指定下列其中一項:
  • DeleteAndRestore:如果遇到衝突的頂層資源 (例如 Namespaces 或 ProtectedApplications),系統會先觸發刪除衝突資源及其所有參照資源,然後再從 Backup 還原資源。只有在您打算將叢集的某些部分還原至先前的狀態時,才應使用這個模式。
  • FailOnConflict:如果在還原程序開始時或還原程序期間,遇到衝突的頂層資源 (例如 Namespace 或 ProtectedApplication 資源),Restore 就會失敗。
  • MergeSkipOnConflict:如果在還原過程中遇到衝突資源,這個模式會略過從備份還原衝突資源,並繼續還原不在叢集中的其他資源。
  • MergeReplaceOnConflict:如果在還原過程中遇到衝突資源,這個模式會從備份中取代衝突資源,並繼續還原叢集中沒有的其他資源。
namespacedResourceRestoreScope 指定可還原哪些 Namespaces 或 ProtectedApplications。
  • selectedApplications會將受保護的應用程式與這項還原作業建立關聯。
  • selectedNamespaces 包含 NAME_SPACE,用於指定要從備份還原的命名空間。
clusterBackupRepositoryRef 指定要儲存 Restore 資源的存放區。這個存放區可以與備份來源存放區不同。存放區必須是叢集中的 ReadWrite 存放區。
substitutionRules 在還原期間替換已備份 Kubernetes 資源中值的規則。如果清單空白,則不會進行替換。 系統會依定義的順序套用替代規則。 這個順序很重要,因為規則所做的變更可能會影響後續規則的比對邏輯。每項規則都會指定 target、要比對的 originValuePattern (VALUE_PATTERN),以及要替換的 newValue (NEW_CONFIG_VALUE)。target 可包含 namespaces,用於設定規則範圍 (NAME_SPACE)。

建立 ClusterRestorePlan 後,具備備份建立者角色的使用者可以手動還原備份。

查看還原方案

使用 GDC 控制台查看還原方案:

  1. 登入 GDC 控制台。
  2. 在導覽選單中,按一下「Backup for Clusters」。
  3. 按一下「Select project」(選取專案),根據您的角色選取組織或專案:
    1. 使用者叢集備份管理員:選取組織即可查看組織中的所有還原方案,選取專案則可查看專案中的所有還原方案。
    2. 備份建立者:選取專案,即可查看專案中的所有還原方案。
  4. 按一下「還原方案」分頁標籤。
  5. 在清單中點選還原方案,即可查看詳細資料。

編輯還原方案

如果與要編輯的還原方案相關聯的備份存放區,在建立還原方案時,Linked Cluster(read-only) 欄位有值,則會建立兩次。還原方案會傳播至讀寫和唯讀叢集。

如果備份存放區同時設有讀寫和唯讀叢集,您在編輯該存放區擁有的還原方案時,必須將 TARGET CLUSTER 設為讀寫叢集。

使用 GDC 控制台編輯還原方案:

  1. 登入 GDC 控制台。
  2. 在導覽選單中,按一下「Backup for Clusters」。
  3. 按一下「Select project」(選取專案),根據您的角色選取組織或專案:
    1. 使用者叢集備份管理員:選取組織即可查看組織中的所有還原方案,選取專案則可查看專案中的所有還原方案。
    2. 備份建立者:選取專案,即可查看專案中的所有還原方案。
  4. 按一下「還原方案」分頁標籤。
  5. 按一下要編輯的還原方案名稱。
  6. 按一下「Plan Configuration」分頁標籤,查看可修改的欄位。
  7. 按一下「命名空間資源」旁的「編輯」圖示 ,即可編輯該資源:

    1. 在「Choose namespaced resources」(選擇命名空間資源) 專區,選取要還原備份中的哪些命名空間資源:

      1. 選取「Selected namespaced resources」(所選命名空間資源),從備份中的所選命名空間還原資源:

        1. 選取「Edit Cluster Namespaces」(編輯叢集命名空間),選取叢集命名空間。
        2. 在「叢集命名空間 1」欄位中,輸入命名空間的名稱。
        3. 按一下 [Save] 按鈕。
      2. 選取「Selected protected applications」(所選受保護的應用程式),從備份中選取的受保護應用程式還原資源:

        1. 選取「編輯受保護的應用程式」,選取命名空間和受保護的應用程式。
        2. 在「Namespace 1」(命名空間 1) 欄位中,輸入命名空間的名稱。
        3. 在「Protected application 1」欄位中,輸入受保護應用程式的名稱。
        4. 按一下 [Save] 按鈕。
  8. 按一下「Cluster-scoped resources」(叢集範圍資源) 旁的「Edit」(編輯) 圖示 ,即可編輯該資源:

    1. 選用:在「Choose cluster-scoped resources」(選取叢集範圍內的資源) 區段中,指定 API 群組和 GroupKinds,選取要還原的叢集範圍內資源,並決定如何解決衝突:

      1. 選取「Don't restore cluster-scoped resources」(不還原叢集範圍內的資源),即可從還原程序中移除叢集範圍內的資源。
      2. 選取「Restore cluster-scoped resources by GroupKind」(依 GroupKind 還原叢集範圍內的資源),依指定的 GroupKind 還原資源:

      3. 如要指定 GroupKind,請按一下「Edit GroupKind」(編輯 GroupKind) 按鈕。

      4. 按一下「Add GroupKind」按鈕。

      5. 輸入GroupKind名稱。

      6. 按一下 [Save] 按鈕。

    2. 在「Conflict handling」(衝突處理) 部分,決定目標叢集內已有相同資源時要採取的行動:

      1. 選取「保留現有資源」,即可在叢集內建立尚不存在的資源。
      2. 選取「覆寫現有資源」,即可刪除找到的任何現有資源,並以還原的資源取代。
    3. 點選「儲存」按鈕確認變更。

  9. 在「Substitution rules」(替代規則) 區段中,按一下「Add New Rule」(新增規則) 按鈕,新增替代規則:

    1. 在「Cluster namespaces」(叢集命名空間) 欄位中,輸入要套用這項替代規則的叢集命名空間名稱。
    2. 點選「Add GroupKind」按鈕,將這項規則套用至特定 GroupKind 物件。
    3. 在「JSON path」(JSON 路徑) 欄位中,以 JSON 格式輸入要替換的資源屬性路徑。
    4. 在「原始值模式」欄位中,輸入與屬性原始值相符的規則運算式。
    5. 在「新值」欄位中,輸入要替換目標欄位的值。如果這個欄位留空,系統會從資源中移除目標欄位。
    6. 按一下「Save」(儲存) 按鈕,完成建立新的替代規則。
  10. 在「Substitution rules」(替代規則) 部分,按一下「編輯」圖示 ,即可編輯現有替代規則。

  11. 在「Substitution rules」(替代規則) 專區中,按一下「Delete」(刪除) 圖示 ,即可刪除現有的替代規則。

刪除還原方案

您可以透過 GDC 控制台刪除 RestorePlans,或直接從 Kubernetes API 伺服器刪除資源。這會從物件儲存庫中清除任何相關聯的 RestorePlan 構件。

控制台

  1. 登入 GDC 控制台。
  2. 在導覽選單中,按一下「Backup for Clusters」。
  3. 按一下「Select project」(選取專案),根據您的角色選取組織或專案:
    1. 使用者叢集備份管理員:選取組織即可查看組織中的所有還原方案,選取專案則可查看專案中的所有還原方案。
    2. 備份建立者:選取專案,即可查看專案中的所有還原方案。
  4. 按一下「還原方案」分頁標籤。
  5. 按一下要刪除的還原方案名稱。
  6. 按一下「 刪除」按鈕。
  7. 在欄位中輸入還原方案名稱。
  8. 點選「刪除」按鈕,確認刪除這個還原方案。

API

刪除還原方案資源:

kubectl delete clusterRestoreplan RESTORE_PLAN_NAME -n NAMESPACE

更改下列內容:

  • RESTORE_PLAN_NAME:還原方案的名稱。
  • NAMESPACE:還原方案所在的命名空間。

後續步驟