添加备份代码库

本页面介绍了如何在 Google Distributed Cloud (GDC) 气隙环境中为集群工作负载创建备份代码库。

备份代码库表示备份的兼容存储位置。备份代码库还用于存储备份、备份方案、恢复方案和恢复的记录。

准备工作

如需创建备份代码库,您必须具备以下条件:

  • 兼容的端点:对象存储站点的完全限定域名。
  • 存储桶名称:存储桶的名称, 可在 GDC 存储桶自定义资源的状态中找到。
  • 存储桶访问权限: 为对象存储存储桶配置的权限。
  • 服务身份:用于管理 API 交互的服务账号 。将这些说明中的变量 SA_NAME 替换为您用于访问对象存储的服务帐号的名称。

请求 IAM 角色

请与组织 IAM 管理员联系,以请求对您的项目使用以下角色:

  • 组织集群备份管理员 (organization-cluster-backup-admin):在用户集群中创建、获取、列出、监控和删除备份资源,例如备份和恢复方案。

创建代码库

使用 GDC 控制台或 API 创建代码库。

控制台

  1. 登录 GDC 控制台。
  2. 在导航菜单中,点击 Backup for Clusters 。确保在项目选择器中未选择任何项目。
  3. 依次点击代码库 > 创建代码库
  4. 输入代码库名称。说明是可选的。
  5. S3 URI 端点 字段中,输入包含对象存储站点的完全限定域名的端点。例如, https://storagegrid.zone.DOMAIN.SUFFIX:PORT
  6. 存储桶名称 字段中,输入存储桶的完全限定名称,可在 GDC 存储桶自定义资源的状态中找到。
  7. 存储桶区域 字段中,输入创建存储桶的区域。
  8. 访问密钥 ID 列表中,输入 存储桶 Secret 中的访问密钥 ID。
  9. 访问密钥 字段中,输入 存储桶 Secret中的访问密钥。
  10. 点击创建

API

如需使用备份和恢复 API,您必须配置有效的 ClusterBackupRepository 自定义资源并提供所需的凭据。 您还必须使用服务身份(通常称为“服务账号”)通过 API 创建代码库。

  1. 获取包含 S3 凭据的 Secret 的名称:

    export PROJECT_NAME=PROJECT_NAME
    export SA_NAME=SA_NAME
    kubectl get secrets --namespace $PROJECT_NAME -o json | jq -r --arg USER_NAME "${SA_NAME:?}" '.items[] | select( (.metadata.annotations."object.gdc.goog/subject"==$USER_NAME)) | .metadata.name'
    

    请务必记录该命令返回的 Secret 名称,并在创建 ClusterBackupRepository 自定义资源时将其用作 SECRET_NAME 值。

    替换以下内容:

    • PROJECT_NAME:您的项目的名称。
    • SA_NAME:用于访问对象存储的服务帐号的名称。
  2. 如需获取存储桶详细信息(例如 FQDN 和端点),请从输出中提取 fullyQualifiedNamezonalEndpoints 值:

    kubectl get buckets -n PROJECT_NAME BUCKET_NAME -o yaml
    
  3. 添加 ClusterBackupRepository 自定义资源以使用这些凭据,并将新资源应用于 Management API 服务器。 备份代码库是集群范围的:

    apiVersion: backup.gdc.goog/v1
    kind: ClusterBackupRepository
    metadata:
      name: CLUSTER_BACKUP_REPOSITORY
      namespace: PROJECT_NAME
    spec:
      secretReference:
        namespace: PROJECT_NAME
        name: SECRET_NAME
      endpoint: END_POINT
      type: "S3"
      s3Options:
        bucket: BUCKET_FQDN
        region: REGION
        forcePathStyle: FORCE_PATH_STYLE
      importPolicy: IMPORT_POLICY
    

    替换以下内容:

    • CLUSTER_BACKUP_REPOSITORY:集群备份代码库的名称。
    • PROJECT_NAME:您的项目的名称。
    • SA_NAME:用于访问对象存储的服务帐号的名称。
    • SECRET_NAME:从 kubectl get secrets 命令返回的 Secret 的名称。
    • ENDPOINT:存储系统的完全限定域名,例如 https://objectstorage.google.gdch.test。对于 type 字段,仅支持值 S3
    • BUCKET_FQDN:存储桶的完全限定名称。
    • REGION:创建存储桶的区域。
    • FORCE_PATH_STYLE:使用 forcePathStyle 字段强制使用对象的路径样式网址。此字段的值必须为 truefalse
    • IMPORT_POLICY:设置为以下值之一:
      • ReadWrite:此代码库可用于安排或创建备份、备份方案和恢复。
      • ReadOnly:此代码库只能用于导入和查看备份。您无法在此代码库中创建新备份或资源,但恢复可以使用和引用只读备份进行恢复。您可以将备份代码库用作 ReadOnly 的频率没有限制。

备份代码库导入政策

所有集群都必须至少有一个 ReadWrite 代码库,才能成功使用备份和恢复功能。ReadOnly 代码库是可选的,没有限制,用于了解其他集群备份,以便进行跨集群恢复。

ReadOnly 代码库不能用作其他备份的存储位置,也不能用作导入集群中的备份方案的存储位置。

将代码库作为 ReadWrite 导入会声明该集群的代码库,从而阻止其他集群将同一代码库作为 ReadWrite 导入。导入 ReadWrite 代码库后,该代码库中之前备份、备份方案和恢复的所有记录都会作为本地自定义资源导入到目标集群中。

将代码库作为 ReadOnly 导入不会声明该代码库,只会导入备份、备份方案、恢复和恢复方案。只读代码库中的备份方案不会安排备份,它们的存在是为了让您了解要从中导入的集群中存在哪些备份方案。移除 ReadOnly 代码库会清理集群中的所有导入资源,并且不会影响存储位置中的资源,因为只读代码库不会对对象存储执行任何写入操作。

从集群中移除 ReadWrite 代码库时:

  • 与该代码库关联的所有本地自定义资源(例如备份和恢复)都会从当前集群中移除。
  • 该集群对代码库的声明会被移除,从而允许其他集群将该代码库用作 ReadWrite。不过,这些资源不会从存储端点中移除。

后续步骤