規劃一組還原作業

本頁說明如何建立 Backup for GKE 還原方案,用於在 Google Kubernetes Engine (GKE) 中還原備份。

還原方案是預先設定的還原情境,適用於相應的備份系列。 還原方案可指派管理員使用這些設定的權限。發生事件時,這些使用者可以快速且獨立地還原備份。舉例來說,已部署應用程式中的軟體更新可能會導致永久性資料損毀,使應用程式命名空間處於無效狀態,因此需要還原。

GKE 備份功能不支援將備份從一個專案還原至另一個專案。備份只能還原至備份來源專案中的叢集。還原方案無法參照其他專案中的備份方案。

還原期間,您可以選擇套用轉換規則,這類規則可用於比對一組資源,並將這些資源的屬性目前值替換為新值。

受管理的命名空間

Backup for GKE 不會還原至受管理命名空間。還原時,系統會自動略過這些命名空間。受管理命名空間清單包括:

  • cnrm-system
  • configconnector-operator-system
  • gatekeeper-system
  • gke-connect
  • gke-gmp-system
  • gmp-public
  • kube-node-lease
  • kube-public
  • kube-system
  • 具有下列標籤的命名空間:
    • 鍵:addonmanager.kubernetes.io/mode
    • 值:ReconcileEnsureExists

事前準備

規劃一組備份

必要的角色

如要取得建立及管理還原方案所需的權限,請要求管理員在專案中授予您 Backup for GKE 還原管理員 (roles/gkebackup.restoreAdmin) IAM 角色。這個角色是 Backup for GKE 管理員 (roles/gkebackup.admin) IAM 角色的子集。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

建立還原方案

您可以使用 Google Cloud CLI 或 Google Cloud 控制台,為備份建立還原方案。

gcloud

如要建立還原計畫,請執行下列指令:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --project=PROJECT_ID \
    --location=RESTORE_LOCATION \
    --backup-plan=projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME \
    --cluster=CLUSTER \
    --namespaced-resource-restore-mode=NAMESPACED_RESOURCE_RESTORE_MODE \
    --all-namespaces \
    --cluster-resource-conflict-policy=CLUSTER_RESOURCE_CONFLICT_POLICY \
    --cluster-resource-scope-selected-group-kinds=CLUSTER_RESOURCE_SCOPE \
    --volume-data-restore-policy=VOLUME_DATA_RESTORE_POLICY

更改下列內容:

  • RESTORE_PLAN:要建立的還原計畫名稱。
  • PROJECT_ID:專案 ID。 Google Cloud
  • RESTORE_LOCATION:資源的運算區域,例如 us-central1。請參閱「關於資源位置」。位置必須與目標叢集位於相同區域。
  • BACKUP_PLAN:可透過這個還原方案還原的備份來源:
    • projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME 確認備份方案與新的還原方案位於同一專案。
  • CLUSTER:要還原備份的目標叢集名稱:

    • 地區叢集:projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME
    • 區域叢集:projects/PROJECT_ID/locations/ZONE/clusters/CLUSTER_NAME
  • NAMESPACED_RESOURCE_RESTORE_MODE:定義如何處理命名空間資源的還原時間衝突。系統一律會依命名空間或ProtectedApplication,以群組形式還原命名空間資源。使用以下其中一種方法:

    • merge-skip-on-conflict:略過個別衝突資源。
    • merge-replace-volume-on-conflict:略過個別衝突資源,但要替換基礎永久磁碟區資料。
    • merge-replace-on-conflict:取代個別衝突的資源和基礎永久磁碟區資料。
    • delete-and-restore:如果目標叢集包含要還原至叢集的同一組資源,系統會先刪除現有資源組,再還原新資源。
    • fail-on-conflict:如果目標叢集中已有要從備份還原的任何資源群組,還原作業就會失敗。
  • --all-namespaces:還原備份中的所有命名空間資源。 或者,請指定:

    • --excluded-namespaces,並以命名空間清單做為 NAMESPACE1,NAMESPACE2,...,即可還原清單中的命名空間以外的所有命名空間。
    • --selected-applications,並提供要還原的 ProtectedApplications 清單。NAMESPACE1/APP1,NAMESPACE2/APP2,...
    • --selected-namespaces,其中包含要還原的命名空間清單,格式為 NAMESPACE1,NAMESPACE2,...
    • --no-namespaces 不會還原備份中的任何命名空間資源。這個選項無法與 --cluster-resource-scope-no-group-kinds 一併指定。

    建立還原方案時,必須指定其中一個選項。

  • CLUSTER_RESOURCE_CONFLICT_POLICY:定義如何處理所選叢集資源的還原時間衝突。請使用下列其中一種方式:

    • use-existing-version:如果還原的資源已存在於目標叢集中,Backup for GKE 會保留現有資源。

    • use-backup-version:如果還原的資源已存在於目標叢集中,Backup for GKE 會將現有資源替換為備份中的新資源。

  • --cluster-resource-scope-selected-group-kinds:(選用) 以 Group/Kind 格式還原所選群組種類的叢集資源。CLUSTER_RESOURCE_SCOPE 定義要還原的叢集資源 GroupKinds。例如 apiextension.k8s.io/CustomResourceDefinition,storage.k8s.io/StorageClass

    或者,請指定:

    • cluster-resource-scope-all-group-kinds 選取要還原的所有叢集資源群組類型。
    • cluster-resource-scope-excluded-group-kinds,並列出要還原的叢集資源群組種類,即可還原清單以外的所有叢集資源群組種類。
    • cluster-resource-scope-no-group-kinds。這個選項無法與 --no-namespaces 一併指定。

    如未指定任何選項,系統不會還原任何叢集資源。

  • VOLUME_DATA_RESTORE_POLICY:定義如何為還原的磁碟區填入資料。使用以下其中一種方法:

    • restore-volume-data-from-backup:系統會使用備份中的對應磁碟區備份資料,還原新的 PV。

    • reuse-volume-handle-from-backup:系統會使用備份中原始 PV 的磁碟區控制代碼,預先佈建 PV。

    • no-volume-data-restoration:不會還原 PV。還原作業只會還原所選 PVC,並預期對應的儲存空間驅動程式會動態佈建空白 PV,或將其繫結至帶外建立的預先佈建 PV。

如需完整的選項清單,請參閱 gcloud beta container backup-restore restore-plans create 說明文件。

為所有命名空間建立還原方案

下列指令會建立還原方案,還原所有命名空間和叢集資源:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME \
    --cluster=CLUSTER \
    --namespaced-resource-restore-mode=fail-on-conflict \
    --all-namespaces \
    --cluster-resource-conflict-policy=use-existing-version \
    --cluster-resource-scope-all-group-kinds \
    --volume-data-restore-policy=restore-volume-data-from-backup

建立還原方案,將命名空間回復至先前的狀態

下列指令會建立還原方案,將命名空間 my-ns 從備份還原:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME \
    --cluster=CLUSTER \
    --namespaced-resource-restore-mode=delete-and-restore \
    --selected-namespaces=my-ns \
    --cluster-resource-conflict-policy=use-existing-version \
    --cluster-resource-scope-selected-group-kinds=apiextension.k8s.io/CustomResourceDefinition,storage.k8s.io/StorageClass \
    --volume-data-restore-policy=restore-volume-data-from-backup

建立還原方案,將 ProtectedApplication 回復至連線原始磁碟區的狀態

下列指令會建立還原方案,將受保護的應用程式 my-ns/my-app 回復原狀,重新連線至原始磁碟區:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME \
    --cluster=CLUSTER \
    --namespaced-resource-restore-mode=delete-and-restore \
    --selected-applications=my-ns/my-app \
    --cluster-resource-conflict-policy=use-existing-version \
    --cluster-resource-scope-no-group-kinds \
    --volume-data-restore-policy=reuse-volume-handle-from-backup

建立還原方案,只還原叢集資源

下列指令會建立還原方案,還原所有叢集資源:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME \
    --cluster=CLUSTER \
    --namespaced-resource-restore-mode=fail-on-conflict \
    --no-namespaces \
    --cluster-resource-conflict-policy=use-existing-version \
    --cluster-resource-scope-all-group-kinds

控制台

請按照下列操作說明,在 Google Cloud 控制台中建立還原計畫:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在導覽選單中,按一下「Backup for GKE」

  3. 按一下「建立還原計畫」

  4. 在「為計畫命名並選擇叢集」部分,完成下列步驟,然後按一下「下一步」

    1. 輸入還原計畫名稱和說明 (選填)。
    2. 為現有叢集選擇備份方案,對應要還原的備份。
    3. 選擇要將備份還原至哪個目標叢集。
  5. 在「Choose namespaced resources」(選擇命名空間資源) 專區中,完成下列步驟並按一下「Next」(下一步)

    1. 選擇要還原哪些命名空間:

      • 按一下「所有命名空間資源」,還原備份中的所有命名空間資源。
        1. 按一下「例外狀況」部分下方的「新增命名空間」,即可排除備份中的任何命名空間。
      • 按一下「選取的命名空間資源」,指定要還原備份中的哪些命名空間。
      • 按一下「選取的受保護應用程式」,然後指定命名空間和應用程式名稱,即可新增資源。
      • 按一下「沒有任何命名空間資源」,即可不還原任何命名空間資源。
    2. 如果選取了任何命名空間資源,請選擇如何處理衝突:

      • 如果已有某項資源,請按一下「合併略過 (非破壞性)」,略過從備份還原該項資源。
      • 如果已有某項資源,請按一下「合併取代磁碟區 (破壞性)」,略過還原該項資源,但要按照磁碟區資料還原政策替換基礎永久磁碟區。合併/替換磁碟區可實現僅還原資料。
      • 如果已有某項資源,請按一下「合併取代 (破壞性)」,按照磁碟區資料還原政策,以備份中的相應資源和相關聯的磁碟區資料取代該項資源。
      • 按一下「Fail on conflict (non-destructive)」(發生衝突時失敗 (非破壞性)),如果目標叢集中已有要從備份還原的命名空間,還原作業就會失敗。
      • 如果備份中要還原的命名空間已存在於目標叢集中,請按一下「Rollback (destructive)」(回溯 (破壞性)),刪除現有命名空間,再還原新命名空間。
    3. 選擇如何還原磁碟區資料,然後點選「下一步」

      • 按一下「佈建新磁碟區並從備份還原磁碟區資料」,從新永久磁碟上的備份還原磁碟區資料。
      • 按一下「不還原磁碟區資料」,即可佈建新的永久磁碟區。如果目標叢集包含未繫結的永久磁碟區,且該磁碟區符合 PersistentVolumeClaim 的需求,叢集就會繫結至該磁碟區。
      • 按一下「重複使用含有您資料的現有磁碟區」,即可不還原磁碟區備份資料。所有 PersistentVolumeClaims 都會繫結至參照現有永久磁碟的磁碟區。
  6. (選用) 在「Choose cluster-scoped resources」(選擇叢集範圍內的資源) 專區中,完成下列步驟並按一下「Next」(下一步)

    1. 選擇要還原的群組類型:

      • 按一下「所有叢集範圍內資源」,還原備份中的所有叢集範圍內資源。
        1. 按一下「例外狀況」部分下方的「新增 groupkinds」,即可排除備份中的任何叢集範圍資源。
      • 按一下「選取的叢集範圍內資源」,指定要還原備份中的哪些叢集範圍內資源。apiextensions.k8s.io/CustomResourceDefinitionstorage.k8s.io/StorageClass 預設為選取狀態。按一下「新增 groupkind」,即可新增更多叢集範圍資源。
      • 按一下「No cluster-scoped resources」(沒有叢集範圍內的資源),選擇不還原任何叢集資源。
    2. 如果選取了任何叢集範圍內的資源,請選擇如何處理衝突:

      • 如果目標叢集中已有資源,請點選「將資源保留在目標叢集內」,略過該資源。
      • 按一下「取代目標叢集內的資源」,即可刪除目標叢集中已有的資源,並從備份還原副本。

  7. (選用) 在「新增轉換規則」部分,完成下列步驟並按一下「下一步」

    1. 按一下「新增規則」,然後視需要輸入說明。
    2. 如要將轉換規則限制為符合特定條件的資源,請在「指定資源條件和動作」部分執行下列操作:
      1. 按一下「命名空間條件」,然後輸入命名空間清單,以比對這些命名空間中的資源。
      2. 按一下「Groupkind condition」(群組種類條件),然後輸入 API 群組種類,再輸入物件種類。這會將 API 群組與這些類型中的資源相符。
      3. 按一下「JSON 路徑條件」,然後輸入 JSON 路徑,找出相符資源中要套用轉換的欄位。
      4. 輸入新值來取代相符屬性的目前值,或選取「使用規則運算式取代特定資料值」核取方塊。 然後輸入要與這些資源目前值比較的模式。
    3. 按一下 [儲存變更]。
  8. 查看還原方案詳細資料,然後按一下「建立方案」

查看還原方案

您可以使用 gcloud CLI 或Google Cloud 控制台查看還原方案及其詳細資料。

gcloud

如要列出專案和位置中的所有還原計畫,請執行下列指令:

gcloud beta container backup-restore restore-plans list \
    --project=PROJECT_ID \
    --location=LOCATION

僅適用於 list 指令,您可以為 PROJECT_ID 以外的任何參數提供 - 值。- 值會做為萬用字元。如果您未指定指令列選項或設定屬性,任何參數的預設值都是 -

如需完整的選項清單,請參閱 gcloud beta container backup-restore restore-plans list 說明文件。

如要查看還原計畫的詳細資料,請執行下列指令:

gcloud beta container backup-restore restore-plans describe RESTORE_PLAN \
     --project=PROJECT_ID \
     --location=LOCATION

控制台

如要在 Google Cloud 控制台中查看還原計畫及其詳細資料,請按照下列操作說明執行:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在導覽選單中,按一下「Backup for GKE」

  3. 按一下「還原方案」分頁標籤。

  4. 展開備份計畫,然後按一下還原計畫名稱。

  5. 按一下「詳細資料」分頁標籤,即可查看詳細資料。

更新還原計畫

使用 gcloud CLI 更新還原方案及其詳細資料。

gcloud

如要更新還原計畫 (例如新增說明),請執行下列指令:

gcloud beta container backup-restore restore-plans update RESTORE_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION \
    --description=DESCRIPTION

如需完整的選項清單,請參閱 gcloud beta container backup-restore restore-plans update 說明文件。

控制台

如要在 Google Cloud 控制台中更新還原計畫,請按照下列操作說明執行:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在導覽選單中,按一下「Backup for GKE」

  3. 按一下「還原方案」分頁標籤。

  4. 按一下還原計畫名稱。

  5. 點按「Details」(詳細資料) 分頁標籤。

  6. 按一下「編輯」 編輯方案專區,然後按一下「儲存變更」

刪除還原方案

您可以使用 gcloud CLI 或Google Cloud 控制台刪除還原計畫。刪除還原計畫也會一併刪除所有子項還原計畫。

gcloud

如要刪除還原計畫,請執行下列指令:

gcloud beta container backup-restore restore-plans delete RESTORE_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION

如需完整的選項清單,請參閱 gcloud beta container backup-restore restore-plans delete 說明文件。

控制台

如要在 Google Cloud 控制台中刪除還原計畫,請按照下列說明操作:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在導覽選單中,按一下「Backup for GKE」

  3. 按一下「還原方案」分頁標籤。

  4. 展開叢集,然後按一下方案名稱。

  5. 按一下 「刪除方案」

  6. 輸入還原計畫名稱,然後在確認對話方塊中按一下「刪除還原計畫」

後續步驟