一連の復元を計画する

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

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

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

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

始める前に

IAM ロールをリクエストする

復元プランを作成するには、IAM 組織管理者にユーザー クラスタ バックアップ管理者(user-cluster-backup-admin)ロールを付与するよう依頼します。このロールは、ユーザー クラスタ内のバックアップ プランや復元プランなどのバックアップ リソースを作成、取得、一覧表示、監視、更新、パッチ適用、削除します。

アプリケーション オペレーターの場合は、ユーザー クラスタ バックアップ管理者の権限を持つ管理者に復元プランの作成を依頼してください。

復元プランの作成

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

コンソール

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

API

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

apiVersion: backup.gdc.goog/v1
kind: ClusterRestorePlan
metadata:
  name: RESTORE_PLAN_NAME
  namespace:  PROJECT_NAME
spec:
  targetCluster:
    targetClusterType: UserCluster
    targetClusterName:
      kind: "Cluster"
      name: CLUSTER_NAME
  description: RESTORE_PLAN_DESCRIPTION
  clusterBackupPlanName: CLUSTER_BACKUP_PLAN_NAME
  clusterRestoreConfig:
    volumeDataRestorePolicy: RestoreVolumeDataFromBackup
    clusterResourceConflictPolicy: UseBackupVersion
    namespacedResourceRestoreMode: DeleteAndRestore
    namespacedResourceRestoreScope:
      selectedNamespaces:
        namespaces: [NAME_SPACE]
    clusterBackupRepositoryRef: CLUSTER_BACKUP_REPOSITORY
    substitutionRules:
      - newValue: NEW_CONFIG_VALUE
        originValuePattern: VALUE_PATTERN
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - NAME_SPACE
      - newValue: NEW_CONFIG_VALUE
        originValuePattern: VALUE_PATTERN
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - NAME_SPACE

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

  • RESTORE_PLAN_NAME は、復元プランの名前に置き換えます。
  • PROJECT_NAME は、GDC プロジェクトの名前に置き換えます。
  • CLUSTER_NAME は、使用するクラスタの名前に置き換えます。

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


値

属性

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

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

復元プランを表示する

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

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

復元プランを編集する

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

復元プランを削除する

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

コンソール

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

API

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

kubectl delete clusterRestoreplan RESTORE_PLAN_NAME -n NAMESPACE

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

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

次のステップ