添加备份代码库

本页面介绍了如何在 Google Distributed Cloud (GDC) 网闸隔离配置中为集群工作负载创建备份仓库。

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

准备工作

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

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

申请 IAM 角色

请与您的 IAM 组织管理员联系,请求在您的项目中授予以下角色:

  • Organization Cluster Backup Admin (organization-cluster-backup-admin):在用户集群中创建、获取、列出、监视和删除备份资源(例如备份和恢复方案)。

创建代码库

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

控制台

  1. 登录 GDC 控制台。
  2. 在导航菜单中,点击集群备份。确保在项目选择器中未选择任何项目。
  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 和端点等存储桶详细信息,请从输出中提取 fullyQualifiedName 和 zonalEndpoints 值:

    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 字段强制为对象使用路径样式网址。此字段的值必须为 true 或 false。
    • IMPORT_POLICY:设置为以下某一项:
      • ReadWrite:此代码库可用于安排或创建备份、备份方案和恢复。
      • ReadOnly:此代码库只能用于导入和查看备份。您无法在此代码库中创建新的备份或资源,但恢复操作可以使用和引用只读备份进行恢复。您可以随时将备份仓库用作 ReadOnly,没有频率限制。

备份仓库导入政策

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

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

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

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

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

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

后续步骤