規劃一組還原作業

本頁說明如何在 Google Distributed Cloud (GDC) 氣隙環境中建立、編輯及刪除還原計畫。

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

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

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

事前準備

如要建立還原方案,您必須具備下列條件:

  • 必要的身分與存取權角色:

    • 使用者叢集備份管理員:管理使用者叢集中的備份資源,例如備份和還原計畫。請要求機構 IAM 管理員授予您「使用者叢集備份管理員」(user-cluster-backup-admin) 角色。詳情請參閱「角色定義」。
    • 如果您是應用程式運算子,請要求具備使用者叢集備份管理員權限的管理員為您建立還原方案。

建立還原方案

使用 GDC 控制台或 API 建立還原計畫。

控制台

  1. 登入 GDC 控制台。
  2. 在導覽選單中,按一下「Backup for Clusters」(叢集備份)
  3. 按一下「建立還原方案」
  4. 在「還原方案基本資訊」部分,完成下列步驟並按一下「下一步」
    1. 在「還原計畫名稱」中,輸入還原計畫的名稱。
    2. (選用) 在「還原計畫說明」中輸入還原計畫的說明。
    3. 在「來源叢集」清單中,選擇還原計畫的來源叢集。
    4. 在「專案」清單中,選擇還原計畫的專案。
    5. 選取附加至來源叢集的專案。
    6. 在「備份方案」欄位中,為現有叢集選擇備份方案,該方案應與您要還原的備份相符。
    7. 在「目標叢集」欄位中,選擇要還原備份的目標叢集。
  5. 在「選擇命名空間資源」部分,完成下列步驟,然後按一下「下一步」
    1. 選擇要還原的命名空間:
      1. 按一下「所有命名空間資源」,即可還原備份中的所有命名空間資源。
      2. 按一下「選取的命名空間資源」,指定要還原備份中的哪些命名空間。
        1. 按一下「編輯叢集命名空間」,然後按一下「新增叢集命名空間」,輸入命名空間。
      3. 按一下「選取的受保護應用程式」,指定命名空間和應用程式名稱,即可新增資源。
    2. 選擇如何處理衝突:
      1. 按一下「Fail on conflict (non-destructive)」(發生衝突時失敗 (非破壞性)),如果目標叢集中已有要從備份還原的命名空間,還原作業就會失敗。
      2. 如果備份中要還原的命名空間已存在於目標叢集中,請按一下「Rollback (destructive)」(回溯 (破壞性)),刪除現有的命名空間,再還原新的命名空間。
    3. 選擇還原磁碟區資料的方式:
      1. 按一下「佈建新的磁碟區,並從備份還原磁碟區資料」,從新永久磁碟上的備份還原磁碟區資料。
      2. 按一下「不還原磁碟區資料」,即可佈建新的永久磁碟區。如果目標叢集包含未繫結的永久磁碟區,且該磁碟區符合 PersistentVolumeClaim 的需求,叢集就會繫結至該磁碟區。
      3. 按一下「重複使用含有您資料的現有磁碟區」,即可不還原磁碟區備份資料。所有 PersistentVolumeClaims 都會繫結至參照現有永久磁碟的磁碟區。
  6. 選用:在「選擇叢集範圍內的資源」部分,完成下列步驟,然後按一下「下一步」
    1. 按一下「不還原叢集範圍內的資源」,讓資源維持現有版本。
    2. 按一下「依 GroupKind 還原叢集範圍內的資源」,即可還原這些資源。
      1. 按一下「編輯 GroupKinds」,即可新增更多叢集範圍資源。 輸入 API 群組物件種類,比對這些類型中的資源。
    3. 按一下「保留現有資源」,即可在目標叢集中建立資源 (如果沒有的話)。
    4. 按一下「覆寫目標叢集中的資源」,刪除目標叢集中已有的資源,然後從備份還原副本。
  7. 選用:在「新增替代規則」部分,完成下列步驟並按一下「下一步」
    1. 按一下「新增規則」
    2. 在「叢集命名空間」方塊中,輸入要比對這些命名空間內資源的命名空間清單。
    3. 如要新增 GroupKind,請按一下「新增 GroupKind」,然後輸入「API 群組」和「物件種類」,以比對這些類型中的資源。
    4. 在「JSON 路徑」欄位中,輸入 JSON 路徑,識別相符資源中要套用替代項的欄位。
    5. 在「Original value pattern」(原始值模式) 欄位中,輸入要與新值比較的原始模式。
    6. 在「新值」欄位中,輸入要取代相符屬性目前值的新值。
    7. 按一下 [儲存]
  8. 點選「建立」

API

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

apiVersion: backup.gdc.goog/v1
kind: ClusterRestorePlan
metadata:
  name: restoreplan-sample
  namespace:  PROJECT_NAME
spec:
  targetCluster:
    targetClusterType: UserCluster
    targetClusterName:
      kind: "Cluster"
      name: "user-vm-1"
  description: "restores test clusters"
  clusterBackupPlanName: "backupplan-sample"
  clusterRestoreConfig:
    volumeDataRestorePolicy: RestoreVolumeDataFromBackup
    clusterResourceConflictPolicy: UseBackupVersion
    namespacedResourceRestoreMode: DeleteAndRestore
    namespacedResourceRestoreScope:
      selectedNamespaces:
        namespaces: ["nginx-2"]
    clusterBackupRepositoryRef: "backup-repository"
    substitutionRules:
      - newValue: "newhippo"
        originValuePattern: game-config-2
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - nginx-2
      - newValue: "hippo"
        originValuePattern: game-config
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - nginx-2

PROJECT_NAME 替換為您的 GDC 專案名稱。

本範例使用下列值:



屬性

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

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

查看還原方案

使用 GDC 控制台查看還原計畫:

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

編輯還原方案

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

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

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

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

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

      1. 選取「所有命名空間資源」,即可還原備份中的所有命名空間資源。
      2. 選取「已選取的命名空間資源」,從備份中選取的命名空間還原資源:

        1. 選取「編輯叢集命名空間」,然後選取叢集命名空間。
        2. 在「Cluster namespace 1」(叢集命名空間 1) 欄位中,輸入命名空間的名稱。
        3. 按一下「儲存」按鈕。
      3. 選取「選定的受保護應用程式」,從備份中選定的受保護應用程式還原資源:

        1. 選取「編輯受保護的應用程式」,然後選取命名空間和受保護的應用程式。
        2. 在「Namespace 1」(命名空間 1) 欄位中,輸入命名空間的名稱。
        3. 在「受保護的應用程式 1」欄位中,輸入受保護的應用程式名稱。
        4. 按一下「儲存」按鈕。
  8. 按一下「叢集範圍內的資源」旁的「編輯」圖示 ,即可編輯該資源:

    1. 選用:在「選擇叢集範圍內的資源」專區中,指定 API 群組和 GroupKinds,選取要還原的叢集範圍內資源,然後決定如何解決衝突問題:

      1. 選取「不還原叢集範圍內的資源」,從還原程序中移除叢集範圍內的資源。
      2. 選取「按照 GroupKind 還原叢集範圍內的資源」,即可按照指定的 GroupKind 還原資源:

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

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

      5. 輸入 GroupKind 名稱。

      6. 按一下「儲存」按鈕。

    2. 在「衝突處理」部分,決定目標叢集中已有資源時要採取的行動:

      1. 選取「保留現有資源」,在叢集上建立資源 (如果叢集上沒有資源)。
      2. 選取「覆寫現有資源」,刪除找到的所有現有資源,並以還原的資源取代。
    3. 按一下「儲存」按鈕,確認變更。

  9. 在「替代規則」部分,按一下「新增規則」按鈕,新增替代規則:

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

  11. 在「替代規則」部分中,按一下「刪除」圖示 即可刪除現有替代規則。

刪除還原方案

RestorePlans 可以透過 GDC 控制台刪除,也可以直接從 Kubernetes API 伺服器刪除資源。這會清除物件儲存空間中的所有相關聯 RestorePlan 構件。

控制台

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

API

刪除還原計畫資源:

kubectl delete clusterRestoreplan RESTORE_PLAN_NAME -n NAMESPACE

更改下列內容:

  • RESTORE_PLAN_NAME:還原計畫的名稱。
  • NAMESPACE:包含還原計畫的命名空間。

後續步驟