一連の復元を計画する


このページでは、Google Kubernetes Engine(GKE)でバックアップを復元するために使用される Backup for GKE 復元プランの作成方法について説明します。

復元プランは、対応するバックアップ行に事前に構成された復元シナリオです。復元プランでは、管理者がこれらの構成を使用する権限を割り当てることができます。これらのユーザーは、インシデントが発生したときにバックアップを迅速かつ個別に復元できます。たとえば、デプロイされたアプリケーションのソフトウェア アップデートによって永続データが破損し、アプリケーションの名前空間が無効な状態になる場合があります。その場合、復元が必要です。

Backup for GKE は、プロジェクト間でのバックアップの復元をサポートしていません。バックアップを復元できるのは、バックアップの元のプロジェクト内のクラスタに限られます。復元プランで別のプロジェクトのバックアップ プランを参照することはできません。

復元中に、必要に応じて変換ルールを適用できます。これらのルールが一連のリソースに一致すると、これらのリソースの属性の現在の値が新しい値に置き換えられます。

始める前に

一連のバックアップを計画します。

必要なロール

復元プランの作成と管理に必要な権限を取得するには、プロジェクトに対する Backup for GKE 管理者(roles/gkebackup.admin)IAM ロールのサブセットである Backup for GKE 復元管理者(roles/gkebackup.restoreAdmin)を付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

復元プランを作成

バックアップの復元プランを作成するには、Google Cloud CLI または Google Cloud コンソールを使用します。

gcloud

復元プランを作成するには、次のコマンドを実行します。

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION \
    --backup-plan=BACKUP_PLAN \
    --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: Google Cloud プロジェクトの ID。
  • 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: バックアップ内のすべての名前空間付きリソースを復元します。または、次のように指定します。

    • リスト内を除くすべての名前空間を復元する名前空間のリストを NAMESPACE1,NAMESPACE2,... として持つ --excluded-namespaces
    • 復元する ProtectedApplications のリストを NAMESPACE1/APP1,NAMESPACE2/APP2,... として持つ --selected-applications
    • 復元する名前空間のリストを NAMESPACE1,NAMESPACE2,... として持つ --selected-namespaces
    • --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 のドキュメントをご覧ください。

すべての Namespace に RestorePlan を作成する

次のコマンドで、すべての Namespace とクラスタ リソースを復元するための RestorePlan を作成します。

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=BACKUP_PLAN \
    --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

Namespace をロールバックするための RestorePlan を作成する

次のコマンドで、バックアップから Namespace my-ns をロールバックする RestorePlan を作成します。

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=BACKUP_PLAN \
    --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 をロールバックし、元のボリュームを再接続するための RestorePlan を作成する

次のコマンドで、ProtectedApplication my-ns/my-app をロールバックして元のボリュームに再接続する RestorePlan を作成します。

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=BACKUP_PLAN \
    --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

クラスタ リソースのみを復元する RestorePlan を作成する

次のコマンドで、すべてのクラスタ リソースを復元する RestorePlan を作成します。

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=BACKUP_PLAN \
    --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. 名前空間付きリソースが選択されている場合の、競合の処理方法を選択します。

      • 特定のリソースがすでに存在する場合は、[統合をスキップ(非破壊的)] をクリックして、バックアップからのリソースの復元をスキップします。
      • 特定のリソースがすでに存在する場合は、[統合してボリュームを置換(破壊的)] をクリックして、そのリソースの復元をスキップし、ボリューム データ復元ポリシーを使用して基盤となる永続ボリュームを置き換えます。統合してボリュームを置換することにより、データのみの復元が可能になります。
      • 特定のリソースがすでに存在する場合は、[統合して置換(破壊的)] をクリックし、ボリューム データ復元ポリシーに従って、そのリソースをバックアップから復元し、関連するボリューム データを置換します。
      • バックアップからの復元対象の名前空間がターゲット クラスタにすでに存在する場合、[競合があった場合は失敗(破壊的でない)] をクリックして復元に失敗します。
      • バックアップの復元対象となる名前空間がターゲット クラスタにすでに存在する場合、[ロールバック(破壊的)] をクリックして、新しい名前空間を復元する前に既存の名前空間を削除します。
    3. ボリューム データの復元方法を選択し、[次へ] をクリックします。

      • [新しいボリュームをプロビジョニングし、バックアップからボリューム データを復元する] をクリックして、バックアップから新しい永続ディスクにボリューム データを復元します。
      • [ボリューム データを復元しない] をクリックして、新しい永続ボリュームをプロビジョニングします。ターゲット クラスタに、PersistentVolumeClaim 要件を満たすバインドされていない永続ボリュームが含まれている場合、クラスタはボリュームにバインドされます。
      • ボリュームのバックアップ データを復元しない場合は、[データを含む既存のボリュームを再利用する] をクリックします。PersistentVolumeClaims は、既存の永続ディスクを参照するボリュームにバインドされます。
  6. (省略可)[クラスタ スコープのリソースを選択する] セクションで、次の操作を行い、[次へ] をクリックします。

    1. 復元するグループの種類を選択します。

      • [すべてのクラスタ スコープのリソース] をクリックして、バックアップ内のすべてのクラスタ スコープのリソースを復元します。
        1. 例外セクションの [GROUPKINDS を追加] をクリックして、バックアップ内のクラスタ スコープのリソースを除外します。
      • [選択したクラスタ スコープのリソース] をクリックして、復元するバックアップ内のクラスタ スコープのリソースを指定します。apiextensions.k8s.io/CustomResourceDefinitionstorage.k8s.io/StorageClass がデフォルトで選択されています。[GROUPKINDS を追加] をクリックして、クラスタ スコープのリソースを追加します。
      • クラスタ リソースを復元しない場合は、[クラスタ スコープのリソースなし] をクリックします。
    2. クラスタ スコープのリソースが選択されている場合の、競合の処理方法を選択します。

      • [ターゲット クラスタのリソースを保持する] をクリックして、ターゲット クラスタにリソースがすでに存在する場合は、そのリソースをスキップします。
      • [ターゲット クラスタ内のリソースを置き換える] をクリックして、リソースがすでにターゲット クラスタに存在する場合削除し、バックアップからコピーを復元します。

  7. (省略可)[変換ルールの追加] セクションで、次の手順に沿って操作し、[次へ] をクリックします。

    1. [ルールを追加] をクリックして、必要に応じて説明を入力します。
    2. 変換ルールを特定の条件と一致するリソースに制限する場合は、[Specify resource conditions and actions] セクションで次の操作を行います。
      1. [Namespace の条件] をクリックし、それらの Namespace 内のリソースと一致する Namespace のリストを入力します。
      2. [GroupKind の条件] をクリックして「API group kind」と入力し、オブジェクトの種類を入力します。これにより、API グループとそれらのタイプのリソースが照合されます。
      3. [JSON path condition] をクリックし、変換が適用される一致リソース内のフィールドを表す 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. [詳細] タブをクリックします。

  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. 復元プラン名を入力し、確認ダイアログで [復元プランを削除] をクリックします。

次のステップ