• Русский
  • Создание BucketClass для Ceph RGW

    Ceph Object Storage может быть предоставлено рабочим нагрузкам Kubernetes через Container Object Storage Interface (COSI), обеспечивая высокомасштабируемое и эластичное хранилище для сценариев анализа больших данных, резервного копирования и восстановления, а также машинного обучения. Перед тем как пользователи смогут создавать bucket, необходимо создать BucketClass.

    BucketClass — это шаблонный ресурс, который задаёт драйвер хранения, секрет аутентификации и политику удаления, применяемые ко всем bucket, созданным на его основе.

    Предварительные требования

    ТребованиеПримечания
    Запущенный кластер Ceph с включённым RGW (S3)Подходит как внутренний (управляемый Rook), так и внешний кластер.
    Плагины Alauda Container Platform COSIДолжны быть установлены Alauda Container Platform COSI и Alauda Container Platform COSI for Ceph.
    Kubernetes Secret с учётными данными Ceph RGWПодготавливается на Шаге 3 ниже.

    Шаг 1 – Подготовка кластера Ceph

    Выберите один из вариантов:

    ВариантОписание
    Внутренний CephКластер Ceph, развернутый и управляемый внутри платформы оператором Rook. Подробности см. в create a storage service.
    Внешний CephОтдельный кластер Ceph, доступный из сети платформы.

    Шаг 2 – Установка плагина COSI

    Установите следующие плагины кластера:

    1. Alauda Container Platform COSI
    2. Alauda Container Platform COSI for Ceph

    См. Installing для точных команд.

    Шаг 3 – Подготовка секрета с учётными данными

    COSI получает учётные данные RGW из Kubernetes Secret. Выберите один метод в зависимости от вашего развертывания Ceph.

    Метод A – Автогенерация (Ceph под управлением Rook)

    1. Создайте ресурс CephObjectStoreUser в пространстве имён rook-ceph:

      # ceph-object-store-user.yaml
      apiVersion: ceph.rook.io/v1
      kind: CephObjectStoreUser
      metadata:
        name: user-for-cosi
        namespace: rook-ceph
      spec:
        store: object-store               # имя вашего CephObjectStore
        capabilities:
          bucket: ["read", "write"]
          user:   ["read", "write"]
    2. Примените манифест:

      kubectl apply -f ceph-object-store-user.yaml
    3. Получите имя автоматически созданного секрета (будет использоваться далее):

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

    Метод B – Вручную (Внешний Ceph)

    1. Получите AccessKey, SecretKey и RGW Endpoint.

    2. Создайте Secret в нужном проекте/пространстве имён и добавьте метку, чтобы UI мог его обнаружить:

      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 платформы.

    Шаг 4 – Создание BucketClass

    Вариант 1 – Через UI

    1. Перейдите в Storage → Object StorageClass и нажмите Create Object StorageClass.

    2. Выберите драйвер Ceph Object Storage.

    3. Заполните следующие поля:

      • Deletion Policy – как обрабатывается базовый bucket при удалении его BucketClaim (по умолчанию: Delete).
      • Secret – выберите секрет, подготовленный на Шаге 3 (отображаются только секреты с меткой app=rook-ceph-rgw).
      • Allocate Projects(необязательно) ограничение использования конкретными проектами.
    4. Нажмите Create.

    Вариант 2 – YAML (подходит для GitOps)

    Создайте файл 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 вы можете создавать ресурсы Bucket или BucketClaim, ссылающиеся на него, тем самым предоставляя S3-совместимое объектное хранилище для ваших приложений.