Доступно в редакциях:  Ultimate/EE

Входит в расширения:  Продвинутое хранение данных

Стадия жизненного цикла модуля: Экспериментальная версия

У модуля есть требования для установки

Модуль sds-object предоставляет S3-совместимое объектное хранилище в кластере Deckhouse Kubernetes Platform (DKP). Пользователь создаёт ресурс Bucket и получает S3-бакет, не разворачивая и не обслуживая хранилище самостоятельно.

Администратор настраивает хранилище на базе SeaweedFS или Ceph RGW и создаёт для пользователей один или несколько классов ObjectStore. Пользователю достаточно выбрать подходящий класс — настраивать само хранилище ему не требуется.

Основные возможности

Модуль предоставляет следующие возможности:

  • Самостоятельное создание S3-бакетов с помощью ресурса Bucket.
  • Получение отдельных учётных данных с правами ReadOnly или ReadWrite с помощью BucketAccess. Для ротации учётных данных используется аннотация storage.deckhouse.io/rotate; пересоздавать BucketAccess не требуется.
  • Создание нескольких классов ObjectStore с разными хранилищами, параметрами и квотами. Ограничения можно задавать на уровне класса или отдельного бакета.
  • Сохранение данных после удаления Bucket при использовании reclaimPolicy: Retain и повторное подключение к ним при создании Bucket с тем же именем в том же неймспейсе.
  • Настройка публичного чтения через accessPolicy: PublicRead, версионирования, lifecycle, Object Lock и серверного шифрования объектов.
  • Доступ к бакетам извне кластера через опубликованный S3-эндпоинт.
  • Контроль состояния ресурсов. Текущее состояние и причины проблем доступны в поле status, включая conditions. Для хранилищ в status также доступны сведения об использовании ёмкости и результатах проверки целостности данных.

Как работает модуль

Создание бакета и получение доступа к нему происходит следующим образом:

  1. Администратор создаёт SeaweedFSStore или SDSElasticStore и настраивает хранилище.
  2. Администратор создаёт ObjectStore, связывает его с хранилищем через storeRef и задаёт параметры бакетов по умолчанию.
  3. Пользователь создаёт Bucket и указывает класс ObjectStore в spec.objectStoreRef.
  4. Модуль создаёт связанный ресурс BucketContents и S3-бакет в выбранном хранилище. BucketContents хранит сведения о созданном S3-бакете и хранилище, в котором находятся его данные.
  5. Пользователь создаёт BucketAccess. Модуль создаёт Secret с S3-эндпоинтом, именем бакета и учётными данными.

При удалении Bucket поведение данных определяется параметром reclaimPolicy. Значение Retain сохраняет данные и BucketContents, а Delete удаляет бакет вместе с данными.

Изменение или удаление класса ObjectStore не меняет хранилище уже созданного Bucket: ссылка на него сохраняется в BucketContents.

Пошаговый пример — в разделе «Использование».

Требования

Для работы модуля и выбранного хранилища должны выполняться следующие требования:

  • Deckhouse Kubernetes Platform версии 1.72 или новее.
  • Для хранилища на базе Ceph RGW требуется модуль sds-elastic и готовый ElasticCluster.
  • Для хранилища на базе SeaweedFS отдельный модуль хранения не требуется.
  • Для нескольких filer SeaweedFS требуется общее PostgreSQL-хранилище метаданных. Можно использовать PostgreSQL, управляемый модулем managed-postgres (metadataStore: Postgres), или внешний PostgreSQL (metadataStore: External). Значение metadataStore: LevelDB поддерживает только один filer.

Ограничения

У модуля есть следующие ограничения:

  • Подключение существующего S3-бакета не поддерживается: ресурс Bucket всегда создаёт новый бакет.
  • Совместный доступ к одному бакету из нескольких неймспейсов не поддерживается.
  • quota.maxObjects не применяется для SeaweedFS; quota.maxSize применяется для обоих бэкендов, а Ceph RGW также применяет ограничение по количеству объектов.
  • Object Lock можно настроить только при создании Bucket. Для него требуется включённое версионирование, а reclaimPolicy: Delete использовать нельзя.
  • К ключевым параметрам, которые нельзя изменить после создания, относятся:
  • SeaweedFSStore.spec.volumeServers можно только увеличивать: удаление volume-сервера удаляет его PersistentVolumeClaim (PVC) вместе с хранящимися на нём объектами; предварительное перемещение данных не выполняется.
  • SeaweedFSStore.spec.replication принимает только форму 00z: все volume-серверы работают в одном кластере Kubernetes с топологией SeaweedFS по умолчанию, поэтому копии нельзя разместить в другой стойке или дата-центре.
  • Пулы метаданных Ceph RGW (SDSElasticStore.spec.metadataPool) всегда реплицируются: erasure-coded-пулы не поддерживают операции omap, необходимые метаданным RGW.
  • Отключение модуля при наличии управляемых хранилищ и бакетов может привести к недоступности или потере данных.