本页面介绍了如何为 Google Distributed Cloud (GDC) 气隙式双区域存储分区配置备份代码库。这样一来,您就可以在可用区发生故障时最大限度地减少停机时间,同时保持关键数据和应用的高可用性。本页介绍了创建双可用区存储桶、复制存储桶密钥以及在多个可用区中设置备份代码库的步骤。
本页面适用于平台管理员群组中的 IT 管理员(负责管理组织内的资源)和应用运维人员群组中的应用开发者(负责在 GDC 世界中开发和维护应用)。
如需了解详情,请参阅 GDC 气隙环境受众群体文档。
准备工作
在使用 GDC 双区域存储分区的备份和恢复服务之前,您必须具备以下条件:
- 预配了至少两个可用区的环境。
- 访问全局组织客户端或全局根客户端。
- 如果您的工作负载是在项目内预配的,请使用全局组织客户端。
- 如果工作负载是在根级预配的,请使用全局根客户端。
- 创建双区域存储分区所需的
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
创建备份代码库
配置好存储桶和密钥后,在可用区 1 和可用区 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:可用区 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在管理集群的可用区 2 中创建只读代码库。在此命令中使用可用区 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
将工作负载备份到备份代码库
配置备份存储库后,请按照步骤备份和恢复工作负载。