一連の復元を計画する

このページでは、Google Distributed Cloud(GDC)エアギャップで復元プランを作成、編集、削除する方法について説明します。

復元プランは、対応するバックアップ行に事前に構成された復元シナリオです。復元プランでは、これらの構成を使用する権限をバックアップ作成者のロールを持つユーザーに割り当てることができます。

バックアップ作成者は、インシデントの発生時にバックアップを迅速かつ個別に復元できます。たとえば、デプロイされたアプリケーションのソフトウェア アップデートによって永続データが破損し、アプリケーションの名前空間が無効な状態になる場合があります。この場合、復元が必要です。

復元中に、必要に応じて一連の置換ルールを適用できます。これらのルールが一連のリソースに一致すると、これらのリソースの属性の現在の値が新しい値に置き換えられます。たとえば、置換ルールを使用すると、復元中にバックアップされたリソースの Namespace を変更して、ワークロードをある Namespace から別の Namespace に移行できます。

始める前に

復元プランを作成するには、次のものが必要です。

  • 必要な ID とアクセスロール:

    • ユーザー クラスタ バックアップ管理者: ユーザー クラスタのバックアップ プランや復元プランなどのバックアップ リソースを管理します。組織の IAM 管理者に、ユーザー クラスタ バックアップ管理者(user-cluster-backup-admin)ロールを付与するよう依頼します。詳細については、ロールの定義をご覧ください。
    • アプリケーション オペレーターの場合は、ユーザー クラスタ バックアップ管理者の権限を持つ管理者に復元プランの作成を依頼してください。

復元プランの作成

GDC コンソールまたは API を使用して復元プランを作成します。

コンソール

  1. GDC コンソールにログインします。
  2. ナビゲーション メニューで [Backup for Clusters] をクリックします。
  3. [復元プランを作成] をクリックします。
  4. [復元プランの基本] セクションで、次の操作を行い、[次へ] をクリックします。
    1. [復元プラン名] に、復元プランの名前を入力します。
    2. (省略可)[復元プランの説明] に、復元プランの説明を入力します。
    3. [ソースクラスタ] リストで、復元プランのソースクラスタを選択します。
    4. [プロジェクト] リストで、復元プランのプロジェクトを選択します。
    5. ソースクラスタに接続されているプロジェクトを選択します。
    6. [バックアップ プラン] フィールドで、復元するバックアップに対応する既存クラスタのバックアップ プランを選択します。
    7. [ターゲット クラスタ] フィールドで、バックアップを復元するターゲット クラスタを選択します。
  5. [名前空間付きリソースの選択] セクションで、次の操作を行い、[次へ] をクリックします。
    1. 復元する名前空間を選択します。
      1. バックアップ内のすべての名前空間付きリソースを復元するには、[すべての名前空間付きリソース] をクリックします。
      2. [選択した名前空間付きリソース] をクリックして、バックアップの復元に使用する名前空間を指定します。
        1. [クラスタの名前空間を編集]、[クラスタの名前空間を追加] の順にクリックして、名前空間を入力します。
      3. 名前空間とアプリケーション名を指定してリソースを追加するには、[選択した保護対象アプリケーション] をクリックします。
    2. 競合の処理方法を選択します。
      1. バックアップからの復元対象の名前空間がターゲット クラスタにすでに存在する場合、[競合があった場合は失敗(破壊的でない)] をクリックして復元に失敗します。
      2. バックアップの復元対象となる名前空間がターゲット クラスタにすでに存在する場合、[ロールバック(破壊的)] をクリックして、新しい名前空間を復元する前に既存の名前空間を削除します。
    3. ボリューム データの復元方法を選択します。
      1. [新しいボリュームをプロビジョニングし、バックアップからボリューム データを復元する] をクリックして、バックアップから新しい永続ディスクにボリューム データを復元します。
      2. [ボリューム データを復元しない] をクリックして、新しい永続ボリュームをプロビジョニングします。ターゲット クラスタに、PersistentVolumeClaim 要件を満たすバインドされていない永続ボリュームが含まれている場合、クラスタはボリュームにバインドされます。
      3. ボリュームのバックアップ データを復元しない場合は、[データを含む既存のボリュームを再利用する] をクリックします。PersistentVolumeClaims は、既存の永続ディスクを参照するボリュームにバインドされます。
  6. 省略可: [クラスタ スコープのリソースを選択する] セクションで、次の操作を行い、[次へ] をクリックします。
    1. [クラスタ スコープのリソースを復元しない] をクリックして、リソースの既存のバージョンを変更しないままにします。
    2. [GroupKind でクラスタ スコープのリソースを復元] をクリックして、これらのリソースを復元します。
      1. [GroupKinds を編集] をクリックして、クラスタ スコープのリソースを追加します。これらのタイプのリソースに一致する API グループオブジェクトの種類を入力します。
    3. [既存のリソースを保持する] をクリックして、ターゲット クラスタにリソースが存在しない場合はリソースを作成します。
    4. [ターゲット クラスタ内のリソースを上書きする] をクリックして、リソースがすでにターゲット クラスタに存在する場合削除し、バックアップからコピーを復元します。
  7. 省略可: [置換ルールを追加する] セクションで、次の手順に沿って操作し、[次へ] をクリックします。
    1. [新しいルールを追加] をクリックします。
    2. [クラスタの Namespace] ボックスに、それらの Namespace 内のリソースと一致する Namespace のリストを入力します。
    3. GroupKind を追加するには、[GroupKind を追加] をクリックし、API グループオブジェクトの種類を入力して、これらのタイプのリソースを照合します。
    4. [JSON path] フィールドに、置換が適用される照合対象リソース内のフィールドを識別する JSON パスを入力します。
    5. [元の値のパターン] フィールドに、新しい値と比較する元のパターンを入力します。
    6. [新しい値] フィールドに、一致した属性の現在の値を置き換える新しい値を入力します。
    7. [保存] をクリックします。
  8. [作成] をクリックします。

API

既存の ClusterBackupPlan からの復元を計画する ClusterRestorePlan カスタム リソースを作成します。ClusterRestorePlan は、バックアップ作成者が復元を許可されているリソースと Namespace の正確なセットを割り当てます。ClusterRestorePlan の例を次に示します。

apiVersion: backup.gdc.goog/v1
kind: ClusterRestorePlan
metadata:
  name: restoreplan-sample
  namespace:  PROJECT_NAME
spec:
  targetCluster:
    targetClusterType: UserCluster
    targetClusterName:
      kind: "Cluster"
      name: "user-vm-1"
  description: "restores test clusters"
  clusterBackupPlanName: "backupplan-sample"
  clusterRestoreConfig:
    volumeDataRestorePolicy: RestoreVolumeDataFromBackup
    clusterResourceConflictPolicy: UseBackupVersion
    namespacedResourceRestoreMode: DeleteAndRestore
    namespacedResourceRestoreScope:
      selectedNamespaces:
        namespaces: ["nginx-2"]
    clusterBackupRepositoryRef: "backup-repository"
    substitutionRules:
      - newValue: "newhippo"
        originValuePattern: game-config-2
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - nginx-2
      - newValue: "hippo"
        originValuePattern: game-config
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - nginx-2

PROJECT_NAME は、GDC プロジェクトの名前に置き換えます。

この例では次の値を使用します。



属性

説明
clusterBackupPlanName 復元する ClusterBackupPlan の名前。ClusterBackupPlanClusterRestorePlan と同じ Namespace に存在している必要があります。
targetClusterName このプランが関連付けられているプロジェクト内のソースクラスタの名前。
description ClusterRestorePlan の目的に関するユーザー指定の説明。
clusterRestoreConfig 復元プロセスの構成。
clusterBackupRepositoryRef Restore リソースを保存するリポジトリを指定します。このリポジトリは、バックアップの元となるリポジトリとは異なる場合があります。リポジトリは、クラスタ内の ReadWrite リポジトリである必要があります。
clusterResourceConflictPolicy クラスタ リソースの競合(リソースがクラスタにすでに存在する場合など)を処理する動作を指定します。次のいずれかを指定します。
  • UseExistingVersion: 競合時に既存のリソースを上書きしない
  • UseBackupVersion: 競合中に既存のクラスタ リソースを削除して再作成します。これは、不適切に使用すると意図しないデータ損失につながる恐れがある危険なオプションです。たとえば、カスタム リソース定義を削除すると、Kubernetes はそのタイプのすべてのカスタム リソースを削除します。
volumeDataRestorePolicy 次のいずれかを指定します。
  • NoVolumeDataRestoration: PV/PVC は復元されません。
  • RestoreVolumeDataFromBackup: バックアップから新しい PV と PVC が作成されます。
  • ReuseVolumeHandleFromBackup: 新しい PV を作成しますが、元の PV を使用して PVC の復元を試みます。バックアップを取得したクラスタと同じクラスタに復元する場合に使用します。
namespacedResourceRestoreMode 復元する Namespace 付きリソースのセットがターゲット クラスタにすでに存在する場合の処理を行います。次のいずれかを指定します。
  • DeleteAndRestore: NamespacesProtectedApplications などの競合する最上位リソースが検出されると、まず競合するリソースとその参照先リソースがすべて削除され、その後 Backup からリソースが復元されます。このモードは、クラスタの一部を以前の状態に戻す場合にのみ使用してください。
  • FailOnConflict: 復元プロセスの開始時または復元プロセス中に、Namespace リソースや ProtectedApplication リソースなどの競合するトップレベル リソースが見つかった場合、Restore は失敗します。
  • MergeSkipOnConflict: 復元プロセス中に競合するリソースが検出された場合、このモードでは、バックアップからの競合するリソースの復元をスキップし、クラスタにない他のリソースの復元を続行します。
  • MergeReplaceOnConflict: 復元プロセス中に競合するリソースが検出された場合、このモードはバックアップから競合するリソースを置き換え、クラスタにない他のリソースの復元を続行します。
namespacedResourceRestoreScope 復元が許可される Namespaces または ProtectedApplications を指定します。
  • selectedApplications は、保護されたアプリケーションをこの復元に関連付けます。
  • selectedNamespaces は、この復元に Namespace を関連付けます。
substitutionRules 復元中にバックアップされた Kubernetes リソースの値を置き換えるルール。リストが空の場合、置換は行われません。置換ルールは、定義された順序で順番に適用されます。ルールによる変更が後続のルールの照合ロジックに影響する可能性があるため、この順序は重要です。

ClusterRestorePlan が作成されると、バックアップ作成者のロールを持つユーザーはバックアップを手動で復元できます。

復元プランを表示する

GDC コンソールを使用して復元プランを表示します。

  1. GDC コンソールにログインします。
  2. ナビゲーション メニューで [Backup for Clusters] をクリックします。
  3. [プロジェクトを選択] をクリックして、ロールに応じて組織またはプロジェクトを選択します。
    1. ユーザー クラスタ バックアップ管理者: 組織を選択して組織内のすべての復元プランを表示するか、プロジェクトを選択してプロジェクト内のすべての復元プランを表示します。
    2. バックアップ作成者: プロジェクトを選択して、プロジェクト内のすべての復元プランを表示します。
  4. [復元プラン] タブをクリックします。
  5. リストで復元プランをクリックして、その詳細を表示します。

復元プランを編集する

編集する復元プランに関連付けられているバックアップ リポジトリの [リンクされたクラスタ(読み取り専用)] フィールドに値が設定されている場合、復元プランは 2 回作成されます。復元プランは、読み取り / 書き込みクラスタと読み取り専用クラスタの両方に伝播されます。

読み取り / 書き込みクラスタと読み取り専用クラスタの両方が設定されているバックアップ リポジトリが所有する復元プランを編集する場合は、TARGET CLUSTER が読み取り / 書き込みクラスタに設定されている復元プランを編集する必要があります。

GDC コンソールを使用して復元プランを編集します。

  1. GDC コンソールにログインします。
  2. ナビゲーション メニューで [Backup for Clusters] をクリックします。
  3. [プロジェクトを選択] をクリックして、ロールに応じて組織またはプロジェクトを選択します。
    1. ユーザー クラスタ バックアップ管理者: 組織を選択して組織内のすべての復元プランを表示するか、プロジェクトを選択してプロジェクト内のすべての復元プランを表示します。
    2. バックアップ作成者: プロジェクトを選択して、プロジェクト内のすべての復元プランを表示します。
  4. [復元プラン] タブをクリックします。
  5. 編集する復元プランの名前をクリックします。
  6. [プランの構成] タブをクリックして、変更可能なフィールドを表示します。
  7. [名前空間付きリソース] の横にある 編集アイコンをクリックして、そのリソースを編集します。

    1. [名前空間付きリソースの選択] セクションで、復元するバックアップの名前空間付きリソースを選択します。

      1. バックアップ内のすべての名前空間付きリソースを復元するには、[すべての名前空間付きリソース] を選択します。
      2. [選択した名前空間付きリソース] を選択して、バックアップ内の選択した名前空間からリソースを復元します。

        1. [クラスタ名前空間の編集] を選択して、クラスタ名前空間を選択します。
        2. [クラスタ Namespace 1] フィールドに、Namespace の名前を入力します。
        3. [保存] をクリックします。
      3. [選択した保護対象アプリケーション] を選択して、バックアップ内の選択した保護対象アプリケーションからリソースを復元します。

        1. [保護対象アプリケーションを編集] を選択して、Namespace と保護対象アプリケーションを選択します。
        2. [Namespace 1] フィールドに、Namespace の名前を入力します。
        3. [保護されたアプリケーション 1] フィールドに、保護されたアプリケーションの名前を入力します。
        4. [保存] をクリックします。
  8. [クラスタ スコープのリソース] の横にある 編集アイコンをクリックして、そのリソースを編集します。

    1. 省略可: [クラスタ スコープのリソースを選択する] セクションで、API グループと GroupKinds を指定して復元するクラスタ スコープのリソースを選択し、競合をどのように解決するかを決定します。

      1. [クラスタ スコープのリソースを復元しない] を選択して、復元プロセスからクラスタ スコープのリソースを削除します。
      2. [GroupKind でクラスタ スコープのリソースを復元する] を選択して、指定した GroupKind でリソースを復元します。

      3. GroupKind を指定するには、[GroupKind を編集] ボタンをクリックします。

      4. [GroupKind を追加] ボタンをクリックします。

      5. GroupKind の名前を入力します。

      6. [保存] をクリックします。

    2. [競合処理] セクションで、リソースがすでにターゲット クラスタに存在する場合の処理を決定します。

      1. クラスタにリソースがまだ存在しない場合にリソースを作成するには、[既存のリソースを保持する] を選択します。
      2. [既存のリソースを上書きする] を選択して、検出された既存のリソースを削除し、このリソースを復元されたリソースに置き換えます。
    3. [保存] ボタンをクリックして、変更を確定します。

  9. [置換ルール] セクションで、[新しいルールを追加] ボタンをクリックして、新しい置換ルールを追加します。

    1. [クラスタの Namespace] フィールドに、この置換ルールを適用するクラスタ Namespace の名前を入力します。
    2. [GroupKind を追加] ボタンをクリックして、このルールを特定の GroupKind オブジェクトに適用します。
    3. [JSON パス] フィールドに、置換するリソース属性へのパスを JSON 形式で入力します。
    4. [元の値のパターン] フィールドに、属性の元の値と一致する正規表現を入力します。
    5. [新しい値] フィールドに、ターゲット フィールドに置き換える値を入力します。このフィールドが空白の場合、ターゲット フィールドはリソースから削除されます。
    6. [保存] ボタンをクリックして、新しい置換ルールの作成を完了します。
  10. [置換ルール] セクションで、 編集アイコンをクリックして既存の置換ルールを編集します。

  11. [置換ルール] セクションで、 削除アイコンをクリックして既存の置換ルールを削除します。

復元プランを削除する

RestorePlans は、GDC コンソールから削除するか、Kubernetes API サーバーからリソースを直接削除することで削除できます。これにより、関連付けられた RestorePlan アーティファクトがオブジェクト ストレージからクリーンアップされます。

コンソール

  1. GDC コンソールにログインします。
  2. ナビゲーション メニューで [Backup for Clusters] をクリックします。
  3. [プロジェクトを選択] をクリックして、ロールに応じて組織またはプロジェクトを選択します。
    1. ユーザー クラスタ バックアップ管理者: 組織を選択して組織内のすべての復元プランを表示するか、プロジェクトを選択してプロジェクト内のすべての復元プランを表示します。
    2. バックアップ作成者: プロジェクトを選択して、プロジェクト内のすべての復元プランを表示します。
  4. [復元プラン] タブをクリックします。
  5. 削除する復元プランの名前をクリックします。
  6. [削除] ボタンをクリックします。
  7. フィールドに復元プランの名前を入力します。
  8. [削除] ボタンをクリックして、この復元プランの削除を確定します。

API

復元プランのリソースを削除します。

kubectl delete clusterRestoreplan RESTORE_PLAN_NAME -n NAMESPACE

次のように置き換えます。

  • RESTORE_PLAN_NAME: 復元プランの名前。
  • NAMESPACE: 復元プランを含む Namespace。

次のステップ