このページでは、Google Distributed Cloud(GDC)エアギャップ デュアルゾーン バケットのバックアップ リポジトリを構成する方法について説明します。これにより、ゾーンで障害が発生した場合のダウンタイムを最小限に抑えながら、重要なデータとアプリケーションの高可用性を維持できます。このページでは、デュアルゾーン バケットの作成、バケット シークレットのコピー、複数のゾーンでのバックアップ リポジトリの設定の手順について説明します。
このページは、組織内のリソースの管理を担当するプラットフォーム管理者グループの IT 管理者と、GDC ユニバースでのアプリケーションの開発とメンテナンスを担当するアプリケーション オペレーター グループのアプリケーション デベロッパーを対象としています。
詳細については、GDC エアギャップの対象ユーザーに関するドキュメントをご覧ください。
始める前に
GDC デュアルゾーン バケットのバックアップと復元サービスを使用する前に、次のものが必要です。
- 少なくとも 2 つのゾーンでプロビジョニングされた環境。
- グローバル組織クライアントまたはグローバル ルートクライアントへのアクセス権。
- ワークロードがプロジェクト内にプロビジョニングされている場合は、グローバル組織クライアントを使用します。
- ワークロードがルートでプロビジョニングされている場合は、グローバル ルート クライアントを使用します。
- デュアルゾーン バケットの作成に必要な
global-project-bucket-adminロール。
デュアルゾーン バケットを作成する
デュアルゾーン バケットを作成するには、まずバケットが存在するプロジェクト リソースを作成する必要があります。プロジェクトを作成する手順は次のとおりです。
グローバル組織クラスタにプロジェクト リソースを作成します。
apiVersion: resourcemanager.global.gdc.goog/v1 kind: Project metadata: namespace: platform name: PROJECT_NAME labels: object.gdc.goog/tenant-category: user次のように置き換えます。
PROJECT_NAME: プロジェクトの名前。
デュアルゾーン バケットを作成します。
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: バケットのテキスト説明。
サービス アカウントと 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バケットのステータスが
readyになるまで待ちます。
バケット シークレットを両方のゾーンにコピーする
バケットと必要な権限が構成されると、グローバル組織クラスタに Secret が生成されます。この Secret はアノテーションで識別できます。
バケットのアノテーションでシークレットが生成されていることを確認します。
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 :)シークレットのコンテンツを取得します。
kubectl get secret -n PROJECT_NAME BUCKET_SECRET -o yaml > bucket_secret.yamlゾーン 1 とゾーン 2 の組織の管理クラスタに同じ Secret を作成します。作成エラーを防ぐため、YAML ファイルから
resourceVersion、uid、creationTimeStampを削除してください。# zone-1 kubectl apply -f bucket_secret.yaml # zone-2 kubectl apply -f bucket_secret.yaml
バックアップ リポジトリを作成する
バケットとシークレットを構成したら、zone-1 と zone-2 にバックアップ リポジトリを作成します。
FQDN やエンドポイントなどのバケットの詳細を取得するには、グローバル組織クラスタで次のコマンドを使用します。出力から
fullyQualifiedNameとzonalEndpointsを抽出します。kubectl get buckets.object.global.gdc.goog -n PROJECT_NAME BUCKET_NAME -o yaml管理クラスタの 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: バケットのシークレット。
バックアップ リポジトリで作成が成功したことを確認します。
kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAMEデュアルゾーン バケット アノテーションを使用してバックアップ リポジトリにアノテーションを付けます。
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管理クラスタの 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バックアップ リポジトリで作成が成功したことを確認します。
kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME次のアノテーションを使用して、基盤となるバックアップ リポジトリ リソースにアノテーションを付けます。
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
ワークロードをバックアップ リポジトリにバックアップする
バックアップ リポジトリを構成したら、手順に沿ってワークロードをバックアップして復元します。