为项目创建存储分区

本页面介绍如何创建 Google Distributed Cloud (GDC) 气隙存储分区。

准备工作

存储分区是限定于特定项目的资源。该项目充当容器,用于对存储分区进行分组,并通过 Management API 服务器管理这些存储分区。如需执行本页面上的操作,您必须创建新项目或选择现有项目,并且在所选项目中拥有足够的权限。

所需 IAM 角色

请与您的 IAM 项目管理员联系,以请求在项目命名空间中使用以下角色:

  • 项目存储分区管理员 (project-bucket-admin):创建、更新和删除存储分区。
  • 项目存储分区对象查看者 (project-bucket-object-viewer):查看和检查存储分区和对象的详细信息。

如需了解详情,请参阅授予存储桶访问权限。

准备环境

如需针对管理 API 服务器或全局 API 服务器运行命令,请执行以下操作:

  1. 登录并生成可用区级管理 API 服务器的 kubeconfig 文件(如果您还没有该文件)。
  2. 对于双可用区存储分区,请执行以下操作:
    • 与您的基础架构运维人员 (IO) 确认已为配对的可用区创建 BucketLocationConfig 自定义资源。
    • 生成 kubeconfig 文件 为全局 API 服务器。

存储桶命名准则

存储分区名称必须遵循以下命名惯例:

  • 在项目中必须是唯一的。管理 API 服务器会在存储桶的完全限定名称前添加唯一的前缀,以确保组织内不会发生冲突。如果前缀和存储桶名称在不同组织之间发生冲突(这种情况不太可能发生),则存储桶创建会失败,并显示“存储桶名称已被使用”错误。
  • 请勿包含任何个人身份信息 (PII)。
  • 必须符合 DNS 规范。
  • 必须包含至少 1 个字符,且不超过 55 个字符。
  • 必须以字母开头,且只能使用字母、数字和连字符。

创建存储桶

默认情况下,存储分区使用 Standard 存储类别。如果您的基础架构运维人员 (IO) 已启用 Nearline Storage,您还可以为访问频率较低的数据选择 Nearline 存储类别。单可用区存储分区和双可用区存储分区均支持 Nearline Storage。

控制台

  1. 在导航菜单中,点击 Object Storage 。
  2. 在项目选择器中,选择您要在其中创建存储桶的项目。
  3. 点击创建存储分区 。
  4. 在存储桶创建流程中,为存储桶分配一个在项目的所有存储桶中唯一的名称。
  5. 请输入说明。
  6. 在存储类别 下,选择 Standard 或 Nearline 。只有在启用 Nearline Storage 后,系统才会显示 Nearline 选项。
  7. 可选:点击 toggle_off 开关以设置保留政策,然后输入您首选的天数。如果您需要超出保留政策限制,请与您的 IO 联系。
  8. 点击创建 。系统会显示一条成功消息,并且您会被重定向回存储分区 页面。

如需验证是否已成功创建新存储桶,请在几分钟后刷新存储桶 页面,并检查存储桶状态是否从 Not ready 更新为 Ready。

API

如需创建可用区级存储桶,请将存储桶规范应用于您的项目命名空间:

kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f bucket.yaml

以下示例展示了使用 Standard 存储类别的存储桶规范:

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: NAMESPACE_NAME
spec:
  description: DESCRIPTION
  storageClass: Standard
  bucketPolicy:
    lockingPolicy:
      defaultObjectRetentionDays: RETENTION_DAY_COUNT

以下示例展示了使用 Nearline 存储类别的存储桶规范:

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: NAMESPACE_NAME
spec:
  description: DESCRIPTION
  storageClass: Nearline
  bucketPolicy:
    lockingPolicy:
      defaultObjectRetentionDays: RETENTION_DAY_COUNT

以下示例展示了加密版本为 v1 的存储桶规范:

apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: NAMESPACE_NAME
  labels:
    object.gdc.goog/encryption-version: v1
spec:
  description: DESCRIPTION
  storageClass: Standard
  bucketPolicy:
    lockingPolicy:
      defaultObjectRetentionDays: RETENTION_DAY_COUNT

如需了解详情,请参阅存储分区 API 参考文档。

以下示例展示了全局 API 服务器的双可用区存储桶规范:

apiVersion: object.global.gdc.goog/v1
kind: Bucket
metadata:
  name: BUCKET_NAME
  namespace: PROJECT_NAME
spec:
  location: LOCATION_NAME
  description: Sample DZ Bucket
  storageClass: Standard

如需使用 Nearline Storage 创建双可用区存储桶,请设置 storageClass: Nearline。

请注意,双可用区存储桶仅支持 V2 加密,并且创建、更新或删除双可用区存储桶资源的所有操作都必须针对全局 API 服务器执行。

如需创建双可用区存储桶,请针对全局 API 服务器应用规范:

kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f bucket.yaml

gdcloud

如需使用 Nearline 存储类别通过 gdcloud 创建单可用区存储桶,请执行以下操作:

gdcloud storage buckets create BUCKET_NAME \
    --location=ZONE_NAME \
    --location-type=SingleZone \
    --storage-class=Nearline

如需使用全局位置通过 gdcloud 创建双可用区存储桶,请执行以下操作:

gdcloud storage buckets create BUCKET_NAME \
    --location=ZONE_1,ZONE_2 \
    --location-type=AsyncDualZone \
    --storage-class=Nearline

如果省略 --storage-class,则默认使用 Standard。

如需了解详情,请参阅 gdcloud storage buckets create。

创建存储桶后,运行以下命令以确认并检查存储桶的详细信息:

kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG describe buckets BUCKET_NAME -n PROJECT_NAMESPACE

状态 部分包含两个重要字段:加密 (用于加密详细信息)和完全限定名称 (其中包含 FULLY_QUALIFIED_BUCKET_NAME)。

加密 v1

此信息与名为 obj-FULLY_QUALIFIED_BUCKET_NAME 的 AEADKey 有关,该 AEADKey 用作对用于加密存储在存储桶中的对象的加密密钥的引用。示例如下:

Status:
  Encryption:
    Key Ref:
      Kind: AEADKey
      Name: obj-FULLY_QUALIFIED_BUCKET_NAME
      Namespace: PROJECT_NAMESPACE
    Type: CMEK

加密 v2

此信息与名为 kek-ref-FULLY_QUALIFIED_BUCKET_NAME 的 Secret 有关,该 Secret 用作对活跃默认 AEADKey 的引用。当未指定特定 AEADKey 时,系统会随机选择活跃默认 AEADKey 来加密上传到存储桶的对象。

示例如下:

Status:
  Encryption:
    Key Ref:
      Kind: Secret
      Name: kek-ref-FULLY_QUALIFIED_BUCKET_NAME
      Namespace: PROJECT_NAMESPACE
    Type: CMEK

您还可以运行以下命令来验证是否已创建所需的 AEADKey:

kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get aeadkeys -n PROJECT_NAMESPACE -l  cmek.security.gdc.goog/resource-name=FULLY_QUALIFIED_BUCKET_NAME