規劃一組還原作業

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

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

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

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

代管命名空間

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
    • 值:Reconcile 或 EnsureExists

事前準備

規劃一組備份。

必要的角色

如要取得建立及管理還原方案所需的權限,請要求管理員在專案中授予您 GKE 備份還原管理員 (roles/gkebackup.restoreAdmin) IAM 角色,這是 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:如果還原的資源已存在於目標叢集,GKE 備份會保留現有資源。

    • use-backup-version:如果還原的資源已存在於目標叢集,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. 在導覽選單中,點選「GKE 備份」。

  3. 按一下「Create a restore plan」(建立還原方案)。

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

    1. 輸入還原方案名稱和選填說明。
    2. 為現有叢集選擇備份方案,該方案應對應至您要還原的備份。
    3. 選擇要將備份還原至哪個目標叢集。
  5. 在「選擇命名空間資源」部分,完成下列步驟並點選「下一步」:

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

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

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

      • 按一下「佈建新磁碟區並從備份還原磁碟區資料」,從新永久磁碟上的備份還原磁碟區資料。
      • 按一下「不還原磁碟區資料」,佈建新的永久磁碟區。如果目標叢集內的永久磁碟區並未建立繫結,同時也能滿足 PersistentVolumeClaim 的要求,系統就會在叢集與磁碟區之間建立繫結。
      • 按一下「重複使用含有您資料的現有磁碟區」,即可不還原磁碟區備份資料。所有 PersistentVolumeClaims 都會繫結至參照現有永久磁碟的磁碟區。
  6. (選用) 在「選擇叢集範圍內的資源」部分,完成下列步驟並按一下「下一步」:

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

      • 按一下「所有叢集範圍內資源」,即可還原備份中的所有叢集範圍內資源。
        1. 按一下「Exceptions」部分下方的「Add groupkinds」,即可排除備份中的任何叢集範圍資源。
      • 按一下「Selected cluster-scoped resources」(所選叢集範圍內的資源),指定要還原的備份中叢集範圍內的資源。系統預設會選取 apiextensions.k8s.io/CustomResourceDefinition 和 storage.k8s.io/StorageClass。按一下「新增 groupkind」,即可新增更多叢集範圍資源。
      • 按一下「沒有叢集範圍內的資源」,選擇不還原任何叢集資源。
    2. 如果選取任何叢集範圍內的資源,請選擇如何處理衝突:

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

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

    1. 按一下「新增規則」,然後輸入說明 (選填)。
    2. 如要將轉換規則限制為符合特定條件的資源,請在「指定資源條件和動作」部分執行下列操作:
      1. 按一下「命名空間條件」,然後輸入命名空間清單,以比對這些命名空間中的資源。
      2. 按一下「Groupkind condition」(群組種類條件),然後輸入 API 群組種類,接著輸入物件種類。這會將 API 群組與這些類型中的資源相符。
      3. 按一下「JSON path condition」(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. 在導覽選單中,按一下「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. 在導覽選單中,點選「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. 在導覽選單中,點選「GKE 備份」。

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

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

  5. 按一下「刪除企劃書」。

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

後續步驟