デュアルゾーン バケットのバックアップ リポジトリを設定する

このページでは、Google Distributed Cloud(GDC)エアギャップ デュアルゾーン バケットのバックアップ リポジトリを構成する方法について説明します。これにより、ゾーンで障害が発生した場合のダウンタイムを最小限に抑えながら、重要なデータとアプリケーションの高可用性を維持できます。このページでは、デュアルゾーン バケットの作成、バケット シークレットのコピー、複数のゾーンでのバックアップ リポジトリの設定の手順について説明します。

このページは、組織内のリソースの管理を担当するプラットフォーム管理者グループの IT 管理者と、GDC ユニバースでのアプリケーションの開発とメンテナンスを担当するアプリケーション オペレーター グループのアプリケーション デベロッパーを対象としています。

詳細については、GDC エアギャップの対象ユーザーに関するドキュメントをご覧ください。

始める前に

GDC デュアルゾーン バケットのバックアップと復元サービスを使用する前に、次のものが必要です。

  • 少なくとも 2 つのゾーンでプロビジョニングされた環境。
  • グローバル組織クライアントまたはグローバル ルートクライアントへのアクセス権。
    • ワークロードがプロジェクト内にプロビジョニングされている場合は、グローバル組織クライアントを使用します。
    • ワークロードがルートでプロビジョニングされている場合は、グローバル ルート クライアントを使用します。
  • デュアルゾーン バケットの作成に必要な global-project-bucket-admin ロール。

デュアルゾーン バケットを作成する

デュアルゾーン バケットを作成するには、まずバケットが存在するプロジェクト リソースを作成する必要があります。プロジェクトを作成する手順は次のとおりです。

  1. グローバル組織クラスタにプロジェクト リソースを作成します。

    apiVersion: resourcemanager.global.gdc.goog/v1
    kind: Project
    metadata:
      namespace: platform
      name: PROJECT_NAME
      labels:
        object.gdc.goog/tenant-category: user
    

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

    • PROJECT_NAME: プロジェクトの名前。
  2. デュアルゾーン バケットを作成します。

    apiVersion: object.global.gdc.goog/v1
    kind: Bucket
    metadata:
      name: BUCKET_NAME
      namespace: PROJECT_NAME
    spec:
      location: LOCATION_TYPE
      description: DESCRIPTION
      storageClass: Standard
    

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

    • BUCKET_NAME: バケットの名前。
    • LOCATION_TYPE: レプリケーションのタイプ。同期レプリケーションの場合、値は syncz1z2 です。非同期レプリケーションの場合、値は asyncz1z2 です。
    • DESCRIPTION: バケットのテキスト説明。
  3. サービス アカウントと Identity and Access Management(IAM)ロール バインディングを作成して、バケットに必要な権限を付与します。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: BUCKET_NAME-sa
      namespace: PROJECT_NAME
    ---
    apiVersion: iam.global.gdc.goog/v1
    kind: IAMRoleBinding
    metadata:
      namespace: PROJECT_NAME
      name: BUCKET_NAME-admin-binding
    spec:
      roleRef:
        apiGroup: iam.global.gdc.goog
        kind: IAMRole
        name: project-bucket-object-admin
      subjects:
        - kind: ServiceAccount
          name: BUCKET_NAME-sa
          namespace: PROJECT_NAME
    
  4. バケットのステータスが ready になるまで待ちます。

バケット シークレットを両方のゾーンにコピーする

バケットと必要な権限が構成されると、グローバル組織クラスタに Secret が生成されます。この Secret はアノテーションで識別できます。

  1. バケットのアノテーションでシークレットが生成されていることを確認します。

    export BUCKET_SECRET=$(kubectl get secret -n PROJECT_NAME -o jsonpath="{range .items[*]}{.metadata.name}{':'}{.metadata.annotations['object\.gdc\.goog/subject']}{'\n'}{end}" | grep :BUCKET_NAME | cut -f1 -d :)
    
  2. シークレットのコンテンツを取得します。

    kubectl get secret -n PROJECT_NAME BUCKET_SECRET -o yaml > bucket_secret.yaml
    
  3. ゾーン 1 とゾーン 2 の組織の管理クラスタに同じ Secret を作成します。作成エラーを防ぐため、YAML ファイルから resourceVersionuidcreationTimeStamp を削除してください。

    # zone-1
    kubectl apply -f bucket_secret.yaml
    
    # zone-2
    kubectl apply -f bucket_secret.yaml
    

バックアップ リポジトリを作成する

バケットとシークレットを構成したら、zone-1 と zone-2 にバックアップ リポジトリを作成します。

  1. FQDN やエンドポイントなどのバケットの詳細を取得するには、グローバル組織クラスタで次のコマンドを使用します。出力から fullyQualifiedNamezonalEndpoints を抽出します。

    kubectl get buckets.object.global.gdc.goog -n PROJECT_NAME BUCKET_NAME -o yaml
    
  2. 管理クラスタの zone-1 に読み取り / 書き込みバックアップ リポジトリを作成するには、次のコマンドを使用します。ゾーン 1 のゾーン エンドポイントを使用してください。

    apiVersion: backup.gdc.goog/v1
    kind: BackupRepository
    metadata:
      annotations:
        backup.gdc.goog/dz-bucket: "true"
        backup.gdc.goog/dz-bucket-info-namespace: PROJECT_NAME
      finalizers:
      - backup.gdc.goog/sentinel-finalizer
      generation: 1
      name: BACKUP_REPOSITORY_NAME
    spec:
      endpoint: ENDPOINT
      force: false
      importPolicy: ReadWrite
      s3Options:
        bucket: BUCKET_FULL_NAME
        forcePathStyle: true
        region: zone2
      secretReference:
        name: BUCKET_SECRET
        namespace: PROJECT_NAME
      type: S3
    

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

    • BACKUP_REPOSITORY_NAME: バックアップ リポジトリの名前。
    • ENDPOINT: zone-1 のゾーン エンドポイント。
    • BUCKET_FULL_NAME: 完全修飾バケットの名前。
    • BUCKET_SECRET: バケットのシークレット。
  3. バックアップ リポジトリで作成が成功したことを確認します。

    kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME
    
  4. デュアルゾーン バケット アノテーションを使用してバックアップ リポジトリにアノテーションを付けます。

    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket="true"
    
    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket-info-namespace=PROJECT_NAME
    
  5. 管理クラスタの zone-2 に読み取り専用リポジトリを作成します。このコマンドには、zone-2 のゾーン エンドポイントを使用します。

    apiVersion: backup.gdc.goog/v1
    kind: ClusterBackupRepository
    metadata:
      annotations:
        backup.gdc.goog/dz-bucket: "true"
        backup.gdc.goog/dz-bucket-info-namespace: PROJECT_NAME
      finalizers:
      - backup.gdc.goog/sentinel-finalizer
      generation: 1
      name: BACKUP_REPOSITORY_NAME
    spec:
      endpoint: ENDPOINT
      force: false
      importPolicy: ReadOnly
      s3Options:
        bucket: BUCKET_FULL_NAME
        forcePathStyle: true
        region: zone2
      secretReference:
        name: BUCKET_SECRET
        namespace: PROJECT_NAME
      type: S3
    
  6. バックアップ リポジトリで作成が成功したことを確認します。

    kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME
    
  7. 次のアノテーションを使用して、基盤となるバックアップ リポジトリ リソースにアノテーションを付けます。

    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket="true"
    
    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket-info-namespace=PROJECT_NAME
    

ワークロードをバックアップ リポジトリにバックアップする

バックアップ リポジトリを構成したら、手順に沿ってワークロードをバックアップして復元します。

次のステップ