添加备份代码库

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

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

准备工作

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

  • 有兼容的端点可用。
  • 之前创建的存储桶,用作备份代码库。
  • 您已为对象存储桶授予访问权限
  • 必要的身份和访问权限角色:

    • 组织集群备份管理员:管理用户集群中的备份资源,例如备份和恢复计划。请让您的组织 IAM 管理员向您授予组织集群备份管理员 (organization-cluster-backup-admin) 角色。如需了解详情,请参阅角色定义

创建代码库

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

控制台

  1. 登录 GDC 控制台。
  2. 在导航菜单中,点击 Backup for Clusters。确保在项目选择器中未选择任何项目。
  3. 点击创建代码库
  4. 输入代码库名称。说明是可选的。
  5. 主集群(读/写)列表中,选择一个集群。
  6. 关联的集群(只读)列表中,选择关联的集群。
  7. S3 URI 端点字段中,输入包含对象存储网站的完全限定域名 (FQDN) 的端点。
  8. 存储桶名称字段中,输入存储桶的完全限定名称,该名称可从 GDC 存储桶自定义资源的状态中找到。
  9. 存储桶区域字段中,输入存储桶的创建区域。
  10. 访问密钥 ID 列表中,输入访问密钥 ID。
  11. 访问密钥字段中,输入访问密钥。
  12. 点击创建

API

如需使用备份和恢复 API,您必须配置有效的ClusterBackupRepository自定义资源作为备份位置,并提供所需的凭据。

  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。不过,这些资源不会从存储端点中移除。

后续步骤