啟用精細還原功能

本頁說明如何以更精細的粒度選取要還原的資源。

總覽

精細還原功能可讓您從備份還原部分資源。精細還原功能可讓您彈性調整父項還原方案中定義的還原範圍。如果細部還原範圍與父項還原計畫中定義的原始範圍沒有重疊,系統就不會還原任何資源。

您可以為還原方案啟用精細還原功能,並在個別資源層級設定衝突處理模式:

  • 合併/略過
  • 合併/替換
  • 合併/替換磁碟區

如果還原方案使用命名空間或 ProtectedApplication 層級的衝突處理模式,例如「發生衝突時失敗」或「回溯」,且您想啟用精細還原功能,則必須更新還原方案以使用支援的模式,或是建立新的還原方案。如要進一步瞭解還原模式,請參閱「在還原期間處理資源衝突」。

如要使用精細還原功能,請在納入和排除篩選器下方定義一或多個篩選條件。您可以從備份中選取特定資源子集進行還原,也可以還原所有資源,但排除特定子集。您可以同時定義納入和排除篩選器。如果使用納入篩選器,系統只會還原符合這些篩選器的資源。如果使用排除篩選器,系統會從還原程序中排除相符的資源。如果同時指定納入和排除篩選器,系統會先套用納入篩選器,再套用排除篩選器。也就是說,排除篩選條件的優先順序高於納入篩選條件。如未指定篩選條件,系統會針對父項還原計畫中定義的整個範圍執行還原作業。

建構篩選條件時,有四個選用屬性:

  • GroupKind:資源的 Kubernetes API 群組和種類
  • 命名空間:命名空間範圍內資源的命名空間
  • 資源名稱:資源的名稱
  • 標籤:根據 Kubernetes 標籤選取資源的鍵/值組合

您可以組合使用上述四個屬性來定義篩選條件。如果指定多個屬性,系統會將屬性之間的關係視為 AND。如果資源符合篩選條件中定義的所有屬性,就會選取該資源。您也可以同時提供多個篩選條件,不同篩選條件之間的關係為 OR。如果資源符合所有提供的篩選條件,就會選取該資源。

事前準備

規劃一組還原作業

使用精細還原篩選器建立還原作業

gcloud

  1. 建立 YAML 或 JSON 檔案,並設定精細的還原篩選條件。您可以參考下列 YAML 範例。

    exclusionFilters:
    - groupKind:
        resourceGroup: foo.io
        resourceKind: Bar
      name: name1
      namespace: ns1
    inclusionFilters:
    - labels:
        key1: value1
        key2: value2
    
  2. 使用您建立的精細還原篩選器檔案,執行還原作業。

    gcloud beta container backup-restore restores create RESTORE \
        --project=PROJECT_ID \
        --location=LOCATION \
        --restore-plan=RESTORE_PLAN \
        --backup=BACKUP \
        --filter-file=FILTER_FILE
    

    更改下列內容:

    • RESTORE:要建立的還原作業名稱。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • LOCATION:父項還原計畫的運算區域
    • RESTORE_PLAN:這個還原作業所依據的父項還原計畫名稱。
    • BACKUP:要還原的備份。這必須位於父項還原方案參照的備份方案中,如 projects/PROJECT_ID/locations/LOCATION/backupPlans/BACKUP_PLAN/backups/BACKUP

    • FILTER_FILE:細部還原篩選條件的路徑。

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

控制台

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

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

    前往「Google Kubernetes Engine」

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

  3. 按一下 [備份] 分頁標籤。

  4. 在備份清單中,選取要還原的備份檔案,然後按一下「設定還原」

  5. 從適用於這項備份的方案清單中,選擇還原方案。

  6. 輸入還原作業的「名稱」和「說明」 (選填)。

  7. 勾選「啟用精細還原功能」核取方塊。

  8. 在「納入篩選器」或「排除篩選器」部分,按一下「新增篩選條件」

  9. 在「還原篩選器條件」中定義條件,然後按一下「儲存變更」

  10. 如要新增更多條件,請再次點選「新增篩選條件」

  11. 按一下「還原」

精細還原篩選器檔案範例

下列範例採用 Google Cloud CLI 使用的 YAML 格式,或 Google Cloud 控制台的逐步操作說明。

還原單一命名空間範圍資源

這個範例會使用精細還原 InclusionFilters 選取資源,在命名空間 webserver 中還原名稱為 nginx-vars 的資源種類 ConfigMap。如要選擇 core 群組下的資源,請使用 resourceGroup 的空字串。

gcloud

  inclusionFilters:
  - groupKind:
      resourceKind: ConfigMap
    name: nginx-vars
    namespace: webserver

控制台

  1. 建立精細還原篩選器程序所述,啟用精細還原功能。
  2. 在「排除篩選器」部分,按一下「新增篩選器條件」
  3. 在「Resource name」(資源名稱) 欄位中,輸入 nginx-vars
  4. 在「Namespace」(命名空間) 欄位中輸入 webserver
  5. 在「Object kind」(物件種類) 欄位中,輸入 ConfigMap
  6. 按一下 [儲存變更]。

排除單一叢集範圍內的資源

這個範例會還原所有可用資源,但排除名稱為 sc1 的資源 GroupKind storage.k8s.io/StorageClass,並使用精細還原 ExclusionFilters 排除該資源。

gcloud

exclusionFilters:
- groupKind:
    resourceGroup: storage.k8s.io
    resourceKind: StorageClass
  name: sc1

控制台

  1. 建立精細還原篩選器程序所述,啟用精細還原功能。
  2. 在「排除篩選器」部分,按一下「新增篩選條件」
  3. 在「Resource name」(資源名稱) 欄位中,輸入 sc1
  4. 在「API group」(API 群組) 欄位中,輸入 storage.k8s.io
  5. 在「Object kind」(物件種類) 欄位中,輸入 StorageClass
  6. 按一下 [儲存變更]。

還原具有兩個標籤的資源

這個範例會使用精細復原 InclusionFilters 選取同時具有 key1:value1key2:value2 標籤的資源,然後復原這些資源。

gcloud

inclusionFilters:
- labels:
    key1: value1
    key2: value2

控制台

  1. 建立精細還原篩選器程序所述,啟用精細還原功能。
  2. 在「排除篩選器」部分,按一下「新增篩選器條件」
  3. 在「標籤」部分:

    1. 按一下 [Add label] (新增標籤)
    2. 在「Key 1」(金鑰 1) 欄位中,輸入 key1
    3. 在「Value 1」(值 1) 欄位中輸入 value1
    4. 按一下「新增標籤」
    5. 在「Key 2」(金鑰 2) 欄位中,輸入 key2
    6. 在「Value 2」(值 2) 欄位中輸入 value2
  4. 按一下 [儲存變更]。

排除某些 GroupKind 的所有資源

這個範例會還原所有可用資源,但 GroupKind ConfigMapstorage.k8s.io/StorageClass 除外,並使用精細還原 ExclusionFilters 排除這兩個 GroupKind。

gcloud

exclusionFilters:
- groupKind:
    resourceKind: ConfigMap
- groupKind:
    resourceGroup: storage.k8s.io
    resourceKind: StorageClass

控制台

  1. 建立精細還原篩選器程序所述,啟用精細還原功能。
  2. 在「排除篩選器」部分,按一下「新增篩選器條件」
    1. 在「Object kind」(物件種類) 欄位中,輸入 ConfigMap
    2. 按一下 [儲存變更]。
  3. 在「排除篩選器」部分,按一下「新增篩選器條件」
    1. 在「API group」(API 群組) 欄位中,輸入 storage.k8s.io
    2. 在「Object kind」(物件種類) 欄位中,輸入 StorageClass
    3. 按一下 [儲存變更]。