規劃一組還原作業


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

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

Backup for 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) 身分與存取權管理角色。這個角色是 Backup for GKE 管理員 (roles/gkebackup.admin) 的子集。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

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

建立還原方案

您可以使用 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 定義要還原的叢集資源 GroupKind。例如: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. 在「選擇命名空間資源」部分中,完成下列步驟,然後按一下「下一步」

    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 console 刪除還原計畫。刪除還原計畫也會一併刪除所有子項還原計畫。

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. 輸入還原計畫名稱,然後在確認對話方塊中按一下「刪除還原計畫」

後續步驟