创建用于 Ceph RGW 的 BucketClass

通过 Container Object Storage Interface (COSI),可以向 Kubernetes 工作负载提供 Ceph Object Storage,为大数据分析、备份与恢复以及机器学习场景提供高扩展性和弹性存储。用户必须先创建 BucketClass,才能配置存储桶。

BucketClass 是一种模板资源,用于指定存储驱动程序、身份验证 Secret,以及从该模板创建的每个存储桶将应用的删除策略。

先决条件

要求说明
正在运行且已启用 RGW (S3) 的 Ceph 集群可以是内部集群(由 Rook 管理),也可以是外部集群。
Alauda Container Platform COSI 插件必须安装 Alauda Container Platform COSI 和 Alauda Container Platform COSI Driver(之前称为 Alauda Container Platform COSI for Ceph)。
包含 Ceph RGW 凭证的 Kubernetes Secret在下文的 步骤 3 中准备。

步骤 1 – 准备 Ceph 集群

选择以下其中一项:

选项说明
内部 Ceph由 Rook Operator 在平台内部部署和管理的 Ceph 集群。有关详情,请参阅 创建存储服务。
外部 Ceph可通过平台网络访问的独立 Ceph 集群。

步骤 2 – 安装 COSI 插件

安装以下集群插件:

  1. Alauda Container Platform COSI
  2. Alauda Container Platform COSI Driver(之前称为 Alauda Container Platform COSI for Ceph)

有关准确命令,请参阅 安装。

步骤 3 – 准备凭证 Secret

COSI 从 Kubernetes Secret 中获取 RGW 凭证。请根据 Ceph 的部署方式选择其中一种方法。

方法 A – 自动生成(Rook 管理的 Ceph)

  1. 在 rook-ceph 命名空间中创建 CephObjectStoreUser:

    # ceph-object-store-user.yaml
    apiVersion: ceph.rook.io/v1
    kind: CephObjectStoreUser
    metadata:
      name: user-for-cosi
      namespace: rook-ceph
    spec:
      store: object-store               # name of your CephObjectStore
      capabilities:
        bucket: ["read", "write"]
        user:   ["read", "write"]
  2. 应用清单:

    kubectl apply -f ceph-object-store-user.yaml
  3. 获取自动生成的 Secret 名称(稍后使用):

    kubectl get cephobjectstoreuser user-for-cosi -n rook-ceph \
      -o jsonpath='{.status.info.secretName}'

方法 B – 手动(外部 Ceph)

  1. 获取 AccessKey、SecretKey 和 RGW Endpoint。

  2. 在目标项目/命名空间中创建 Secret,并添加标签,以便 UI 发现该 Secret:

    kubectl create secret generic ceph-external-creds -n <YOUR_NAMESPACE> \
      --from-literal=AccessKey=<YOUR_ACCESS_KEY> \
      --from-literal=SecretKey=<YOUR_SECRET_KEY> \
      --from-literal=Endpoint=http://<YOUR_RGW_ENDPOINT>
    
    kubectl label secret ceph-external-creds -n <YOUR_NAMESPACE> app=rook-ceph-rgw

    重要:标签 app=rook-ceph-rgw 是平台 UI 列出该 Secret 的必需标签。

步骤 4 – 创建 BucketClass

选项 1 – UI 工作流

  1. 导航到 存储 → Object StorageClass,然后点击 创建 Object StorageClass。

  2. 选择 Ceph Object Storage 作为驱动程序。

  3. 配置以下字段:

    • 删除策略 – 删除其 BucketClaim 时如何处理底层存储桶(默认值:Delete)。
    • Secret – 选择在步骤 3 中准备的 Secret(仅显示包含 app=rook-ceph-rgw 的 Secret)。
    • 分配项目 – (可选) 将使用范围限制为特定项目。
  4. 点击创建。

选项 2 – YAML(适用于 GitOps)

使用正确的 Secret 引用创建 ceph-bucketclass.yaml:

apiVersion: objectstorage.k8s.io/v1alpha1
kind: BucketClass
metadata:
  name: ceph-cosi-driver
  labels:
    project.cpaas.io/ALL_ALL: "true"
driverName: ceph.objectstorage.k8s.io
deletionPolicy: Delete
parameters:
  objectStoreUserSecretName: <your-secret-name>
  objectStoreUserSecretNamespace: <your-secret-namespace>

应用清单:

kubectl apply -f ceph-bucketclass.yaml

验证和后续步骤

验证 BucketClass:

kubectl get bucketclass

BucketClass 就绪后,您可以创建引用该 BucketClass 的 Bucket 或 BucketClaim 资源,从而为应用程序配置与 S3 兼容的对象存储。