Стадия жизненного цикла модуля: Experimental
У модуля есть требования для установки
Deckhouse Kubernetes Platform устанавливает CRD, но не удаляет их при отключении модуля. Если вам больше не нужны созданные CRD, удалите их.
Bucket
Short names: bkt
Scope: Cluster
Version: v1alpha1
-
объектspecЖелаемое состояние бакета.
-
строкаspec.accessPolicy
Политика доступа к бакету.
Private(по умолчанию) — доступ только с выданными учётными данными.PublicRead— объекты доступны на чтение анонимно; запись по-прежнему требует учётных данных.
По умолчанию:
PrivateДопустимые значения:
Private,PublicRead -
строкаspec.bucketNameИмя бакета в S3. Если не задано — используется
metadata.name. Должно соответствовать правилам именования бакетов S3. Неизменяемо после создания.Длина:
3..63Шаблон:
^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$ -
объектspec.claimRef
Ссылка на заявку BucketClaim, которая создала этот бакет и владеет им (greenfield). У общих бакетов, объявленных администратором, поле пустое.
Это авторитетная запись о владельце. Выставить поле может только service account модуля (проверяется вебхуком при создании), после создания оно неизменяемо — поэтому бакет нельзя переназначить другой заявке, а чужая заявка не может присвоить себе уже принадлежащий кому-то бакет. Лейблы
storage.deckhouse.io/owned-by-claim-*дублируют его для выборок по лейблам, но пользователь может их изменить, и для авторизации они не используются.Поле также ограничивает раздачу доступа: политики BucketClaimPolicy для этого бакета учитываются только в этом namespace (либо в namespace модуля, если поле пустое).
-
строкаspec.claimRef.name
Обязательный параметр
Имя заявки-владельца.Длина:
1..253 -
строкаspec.claimRef.namespace
Обязательный параметр
Namespace заявки-владельца.Длина:
1..253
-
-
строкаspec.objectStoreRef
Обязательный параметр
Имя ObjectStore, к которому относится бакет. ObjectStore должен существовать и быть в фазеReadyдо создания бакета. Неизменяемо после создания.Длина:
1..30Шаблон:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ -
объектspec.quotaНеобязательные лимиты использования бакета. Применение зависит от возможностей бэкенда.
-
целочисленныйspec.quota.maxObjectsМаксимальное число объектов.
0(по умолчанию) — без лимита.Допустимые значения:
0 <= X -
строкаspec.quota.maxSizeМаксимальный суммарный размер бакета в формате Kubernetes Quantity (BinarySI), например
10Gi. Без значения — без лимита.Шаблон:
^[0-9]+(\.[0-9]+)?(Ki|Mi|Gi|Ti|Pi|Ei|k|M|G|T|P|E)?$
-
-
строкаspec.reclaimPolicy
Что происходит с данными бакета при удалении Bucket.
Retain(по умолчанию) — бакет и его объекты сохраняются в бэкенде.Delete— бакет и все его объекты удаляются.
По умолчанию:
RetainДопустимые значения:
Retain,Delete
-
-
объектstatusНаблюдаемое состояние бакета.
-
строкаstatus.bucketNameФактическое имя бакета, созданного в бэкенде.
-
массив объектовstatus.conditionsПокомпонентные condition:
BucketReadyи агрегатноеReady.-
строкаstatus.conditions.lastTransitionTimeВремя последнего перехода condition.
-
строкаstatus.conditions.messageЧеловекочитаемое описание текущего статуса.
Максимальная длина:
32768 -
целочисленныйstatus.conditions.observedGenerationЗначение
metadata.generation, для которого выставлен condition.Допустимые значения:
0 <= X -
строкаstatus.conditions.reasonМашинно-читаемая причина текущего статуса.
Длина:
1..1024Шаблон:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
строкаstatus.conditions.statusТекущий статус condition.
Допустимые значения:
True,False,Unknown -
строкаstatus.conditions.typeТип condition.
Максимальная длина:
316Шаблон:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
строкаstatus.endpointВнутрикластерный URL S3-эндпойнта кластера-владельца.
-
целочисленныйstatus.observedGenerationПоследнее значение
metadata.generation, обработанное контроллером. -
строкаstatus.phaseАгрегатная фаза:
Pending,InProgress,Ready,Error.Допустимые значения:
Pending,InProgress,Ready,Error
-
BucketAccess
Short names: ba
Scope: Namespaced
Version: v1alpha1
Запрашивает доступ к cluster-scoped бакету Bucket из
потребляющего namespace. Контроллер генерирует отдельную пару
access key / secret key для этого доступа, кладёт в тот же namespace
Secret (см. status.secretRef) со стандартными переменными
подключения к S3 и отзывает ключ при удалении ресурса.
Разрешён ли доступ, определяется ресурсами BucketClaimPolicy
(deny-by-default): доступ, namespace которого не совпал ни с одной
политикой для указанного бакета, остаётся в фазе Pending.
Ротация ключей: установите или измените аннотацию
storage.deckhouse.io/rotate, чтобы выпустить новую пару ключей
(Secret обновляется, предыдущий ключ отзывается).
-
объектspecЖелаемое состояние доступа.
-
строкаspec.bucketClaimName
Обязательный параметр
Имя BucketClaim (в том же namespace), к привязанному бакету которого выдаются учётные данные. Claim должен быть в состоянии Bound. Неизменяемо после создания.Длина:
1..253Шаблон:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ -
строкаspec.credentialsSecretNameПереопределяет имя Secret с учётными данными в namespace доступа. По умолчанию
<metadata.name>-s3-credentials.Длина:
1..253 -
строкаspec.permission
Уровень доступа для выданных учётных данных.
ReadWrite(по умолчанию) — чтение и запись объектов.ReadOnly— только чтение объектов.
По умолчанию:
ReadWriteДопустимые значения:
ReadWrite,ReadOnly
-
-
объектstatusНаблюдаемое состояние доступа.
-
строкаstatus.accessKeyIDПубличный идентификатор ключа доступа, выданного для этого доступа (секретный ключ пишется только в Secret).
-
строкаstatus.bucketNameФактическое имя бакета, к которому предоставлен доступ.
-
массив объектовstatus.conditionsПокомпонентные condition:
AccessGranted,CredentialsReadyи агрегатноеReady.-
строкаstatus.conditions.lastTransitionTimeВремя последнего перехода condition.
-
строкаstatus.conditions.messageЧеловекочитаемое описание текущего статуса.
Максимальная длина:
32768 -
целочисленныйstatus.conditions.observedGenerationЗначение
metadata.generation, для которого выставлен condition.Допустимые значения:
0 <= X -
строкаstatus.conditions.reasonМашинно-читаемая причина текущего статуса.
Длина:
1..1024Шаблон:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
строкаstatus.conditions.statusТекущий статус condition.
Допустимые значения:
True,False,Unknown -
строкаstatus.conditions.typeТип condition.
Максимальная длина:
316Шаблон:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
строкаstatus.endpointВнутрикластерный URL S3-эндпойнта кластера-владельца.
-
строкаstatus.lastRotationTimeВремя последней выдачи ключа.
-
целочисленныйstatus.observedGenerationПоследнее значение
metadata.generation, обработанное контроллером. -
строкаstatus.observedRotationПоследнее обработанное контроллером значение аннотации
storage.deckhouse.io/rotate. -
строкаstatus.phaseАгрегатная фаза:
Pending,InProgress,Ready,Error.Допустимые значения:
Pending,InProgress,Ready,Error -
объектstatus.secretRefСсылка на Secret (в namespace этого доступа) с переменными подключения и учётными данными S3:
S3_ENDPOINT,S3_REGION,S3_BUCKET,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY.-
строкаstatus.secretRef.nameИмя Secret.
-
-
BucketClaim
Short names: bc
Scope: Namespaced
Version: v1alpha1
BucketClaim — namespaced-запрос («заявка») на бакет.
- Greenfield (
spec.existingBucketNameне задан): контроллер создаёт новый cluster-scoped Bucket, принадлежащий этой заявке и приватный для данного namespace, вspec.objectStoreRef. - Brownfield (
spec.existingBucketNameзадан): заявка привязывается к существующему Shared-бакету, что разрешено только при наличииBucketClaimPolicy, дающего доступ этому namespace (deny-by-default).
Учётные данные запрашиваются отдельно ресурсом BucketAccess,
ссылающимся на эту заявку по имени в том же namespace.
-
объектspecЖелаемое состояние заявки.
-
строкаspec.accessPolicy
Политика доступа для greenfield-бакета. Игнорируется для brownfield.
Private(по умолчанию) — доступ только с выданными учётными данными.PublicRead— объекты доступны на чтение анонимно; запись по-прежнему требует учётных данных.
По умолчанию:
PrivateДопустимые значения:
Private,PublicRead -
строкаspec.existingBucketNameИмя существующего Shared-бакета (объявленного администратором) для привязки (brownfield). Разрешено только при наличии
BucketClaimPolicy, дающего доступ этому namespace. Неизменяемо после создания.Длина:
3..63Шаблон:
^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$ -
строкаspec.objectStoreRefИмя ObjectStore, в котором создаётся greenfield-бакет. Обязательно для greenfield; игнорируется для brownfield. Неизменяемо после создания.
Длина:
1..30Шаблон:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ -
объектspec.quotaНеобязательные лимиты использования greenfield-бакета. Применение зависит от возможностей бэкенда.
-
целочисленныйspec.quota.maxObjectsМаксимальное число объектов.
0(по умолчанию) — без лимита.Допустимые значения:
0 <= X -
строкаspec.quota.maxSizeМаксимальный суммарный размер в формате Kubernetes Quantity (BinarySI), например
10Gi. Без значения — без лимита.Шаблон:
^[0-9]+(\.[0-9]+)?(Ki|Mi|Gi|Ti|Pi|Ei|k|M|G|T|P|E)?$
-
-
строкаspec.reclaimPolicy
Что происходит с данными greenfield-бакета при удалении заявки (и принадлежащего ей Bucket). Игнорируется для brownfield.
Retain(по умолчанию) — бакет и его объекты сохраняются.Delete— бакет и все его объекты удаляются.
По умолчанию:
RetainДопустимые значения:
Retain,Delete
-
-
объектstatusНаблюдаемое состояние заявки.
-
строкаstatus.boundBucketNameИмя cluster-scoped Bucket, к которому привязана заявка.
-
массив объектовstatus.conditionsПостадийные condition:
Bound,BucketReadyи агрегатноеReady.-
строкаstatus.conditions.lastTransitionTimeВремя последнего перехода condition.
-
строкаstatus.conditions.messageЧеловекочитаемое описание текущего статуса.
Максимальная длина:
32768 -
целочисленныйstatus.conditions.observedGenerationЗначение
metadata.generation, для которого выставлен condition.Допустимые значения:
0 <= X -
строкаstatus.conditions.reasonМашинно-читаемая причина текущего статуса.
Длина:
1..1024Шаблон:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
строкаstatus.conditions.statusТекущий статус condition.
Допустимые значения:
True,False,Unknown -
строкаstatus.conditions.typeТип condition.
Максимальная длина:
316Шаблон:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
строкаstatus.endpointВнутрикластерный URL S3-эндпойнта бэкенда ObjectStore.
-
целочисленныйstatus.observedGenerationПоследнее значение
metadata.generation, обработанное контроллером. -
строкаstatus.phaseАгрегатная фаза:
Pending,InProgress,Ready,Error.Допустимые значения:
Pending,InProgress,Ready,Error
-
BucketClaimPolicy
Short names: bcp
Scope: Namespaced
Version: v1alpha1
Определяет, из каких namespace разрешено привязывать общий cluster-scoped бакет Bucket (через brownfield-заявку BucketClaim) и, как следствие, получать к нему учётные данные через BucketAccess. Доступ работает по принципу deny-by-default: он выдаётся, только если хотя бы одна политика для этого бакета совпадает с namespace потребителя. Несколько политик для одного бакета складываются (их разрешённые множества объединяются).
Политика должна находиться в namespace-владельце бакета — это
namespace заявки BucketClaim, создавшей бакет
(Bucket.spec.claimRef.namespace), либо namespace модуля
(d8-sds-object) для общих бакетов, объявленных администратором.
Таким образом доступ раздаёт тот, кому принадлежит бакет. Политика,
созданная в любом другом namespace, не даёт ничего: контроллер
выставляет ей фазу Error с причиной NotOwnerNamespace, а не
применяет её молча.
-
объектspecЖелаемая политика.
-
объектspec.allowedNamespaces
Обязательный параметр
Namespace, которым разрешён запрос доступа к бакету. Namespace совпадает, если он присутствует вnamesили полностью соответствует любому RE2-регулярному выражению изpatterns.-
массив строкspec.allowedNamespaces.namesСписок точных имён namespace.
-
строкаspec.allowedNamespaces.names.Элемент массива
Максимальная длина:
253
-
-
массив строкspec.allowedNamespaces.patternsRE2-регулярные выражения, применяемые к имени namespace (полное совпадение), например
team-.*.-
строкаspec.allowedNamespaces.patterns.Элемент массива
Максимальная длина:
253
-
-
-
строкаspec.bucketRef
Обязательный параметр
Имя cluster-scoped бакета Bucket, к которому относится политика. Политика учитывается, только если она лежит в namespace-владельце этого бакета. Неизменяемо после создания.Длина:
1..63Шаблон:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
-
-
объектstatusНаблюдаемое состояние политики.
-
массив объектовstatus.conditionsСостояние. Известный тип:
Ready.-
строкаstatus.conditions.lastTransitionTimeВремя последнего перехода condition.
-
строкаstatus.conditions.messageЧеловекочитаемое описание текущего статуса.
Максимальная длина:
32768 -
целочисленныйstatus.conditions.observedGenerationЗначение
metadata.generation, для которого выставлен condition.Допустимые значения:
0 <= X -
строкаstatus.conditions.reasonМашинно-читаемая причина текущего статуса.
Длина:
1..1024Шаблон:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
строкаstatus.conditions.statusТекущий статус condition.
Допустимые значения:
True,False,Unknown -
строкаstatus.conditions.typeТип condition.
Максимальная длина:
316Шаблон:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
целочисленныйstatus.observedGenerationПоследнее значение
metadata.generation, обработанное контроллером. -
строкаstatus.phaseАгрегатная фаза:
Pending,Ready,Error.Error— если RE2-паттерн не компилируется либо политика лежит не в namespace-владельце бакета и потому ничего не разрешает.Допустимые значения:
Pending,Ready,Error
-
ObjectStore
Short names: ostore
Scope: Cluster
Version: v1alpha1
Описывает желаемое состояние S3-совместимого кластера объектного
хранилища, управляемого модулем sds-object. Поле spec.type выбирает
один из четырёх готовых профилей; бэкенд (Garage / SeaweedFS / Ceph RGW)
и его низкоуровневые настройки скрыты от пользователя (noops).
Бакеты описываются отдельно — в cluster-scoped ресурсах Bucket, ссылающихся на этот кластер по имени.
-
объектspecЖелаемое состояние кластера объектного хранилища.
-
строкаspec.elasticClusterRefИмя ElasticCluster (sds-elastic), на котором создаётся CephObjectStore. Обязательно и допустимо только при
spec.type: Heavy. Неизменяемо после создания.Максимальная длина:
30Шаблон:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ -
объектspec.placementРазмещение дата-плейна кластера. Для
type: Systemразмещение принудительно на control-plane узлах, эти поля игнорируются.-
объектspec.placement.nodeSelectorМетки узлов, которым должны соответствовать поды дата-плейна (как
spec.nodeSelectorу пода). -
массив объектовspec.placement.tolerationsTolerations для подов дата-плейна (как
spec.tolerationsу пода).-
строкаspec.placement.tolerations.effect
Допустимые значения:
‘’,NoSchedule,PreferNoSchedule,NoExecute -
строкаspec.placement.tolerations.key
-
строкаspec.placement.tolerations.operator
Допустимые значения:
Exists,Equal -
целочисленныйspec.placement.tolerations.tolerationSeconds
-
строкаspec.placement.tolerations.value
-
-
-
строкаspec.reclaimPolicy
Что происходит с дата-плейном бэкенда и его данными при удалении ObjectStore.
Retain(по умолчанию) — данные сохраняются. ДляHeavyпулы Ceph RGW сохраняются (preservePoolsOnDelete: true), поэтому сохранённые объекты не теряются; сам CephObjectStore при этом удаляется — если оставить его, кластер Ceph останется занятым иElasticClusterуже никогда не удалить. Для остальных профилей PVC/hostPath-данные остаются на месте.Delete— данные бэкенда (PVC, hostPath, пулы Ceph RGW) уничтожаются.
Неизменяемо после создания.
По умолчанию:
RetainДопустимые значения:
Retain,Delete -
строкаspec.redundancy
Высокоуровневый интент отказоустойчивости. Контроллер транслирует его в настройки бэкенда (фактор репликации / erasure coding). Если не задано, по умолчанию
Standard.None— без избыточности (одна копия). Минимальные накладные расходы. ДляHeavyне допускается: data-пул Ceph RGW меньшеsize 3не даёт полезной избыточности.Standard— реплицированные копии по узлам/зонам (типовое значение по умолчанию).High— максимальная надёжность (дополнительные реплики или erasure coding), требует больше узлов.
Неизменяемо после создания: смена фактора репликации на живом кластере не поддерживается.
Для
Systemдопустимо единственное значение —None: одна реплика Garage (фактор 1) вместо трёх по умолчанию. Это единственный случай, когда поле можно изменить после создания: модуль выставляет его из параметраsdsObject.systemBucket.singleReplica. Переключение ПЕРЕСОЗДАЁТ системный кластер — data plane сносится и поднимается пустым, все сохранённые объекты теряются (бакеты создаются заново, ключи доступа перевыпускаются автоматически).Допустимые значения:
None,Standard,High -
объектspec.storageЁмкость и нижележащее хранилище. Игнорируется для
type: Heavy(ёмкость берётся у Ceph-кластера).-
строкаspec.storage.classИмя Kubernetes StorageClass для создания PVC. Обязательно для
LightweightиFull; игнорируется дляSystem(управляемый local StorageClass) иHeavy(Ceph).Длина:
1..253 -
целочисленныйspec.storage.nodesЧисло узлов data plane (реплики StatefulSet для
Lightweight, volume-серверы SeaweedFS дляFull). Если не задано, выводится изredundancy. Игнорируется дляSystem(число реплик задаётся профилем: 3 или 1) иHeavy(топология берётся у Ceph-кластера).Допустимые значения:
1 <= X -
строкаspec.storage.sizePerNodeПолезная ёмкость, выделяемая на один узел data plane, в формате Kubernetes Quantity (BinarySI), например
50Giили2Ti. Суммарная ёмкость кластера — примерноsizePerNode, умноженная на число узлов. По умолчанию10Gi. Нельзя задавать дляSystem(local PV на control-plane узлах).Шаблон:
^[0-9]+(\.[0-9]+)?(Ki|Mi|Gi|Ti|Pi|Ei|k|M|G|T|P|E)?$
-
-
строкаspec.type
Обязательный параметр
Профиль кластера. Выбирает бэкенд и модель размещения:
System— Garage, разворачивается как StatefulSet на control-plane узлах с node-sticky local PV: по умолчанию 3 реплики, либо одна приredundancy: None. Число реплик не зависит от числа мастеров. Для системных нужд платформы (бэкапы, registry, логи).storage.classигнорируется.Lightweight— Garage, StatefulSet с PVC наstorage.class. Для небольших прикладных нагрузок.Full— SeaweedFS (master/volume/filer + S3-gateway) с PVC наstorage.class. Масштабируемое полнофункциональное хранилище.Heavy— Ceph RADOS Gateway (CephObjectStore) поверх существующего кластера sds-elastic, заданного черезelasticClusterRef. Переиспользует ёмкость и отказоустойчивость Ceph.
Неизменяемо после создания.
Допустимые значения:
System,Lightweight,Full,Heavy
-
-
объектstatusНаблюдаемое состояние кластера объектного хранилища.
-
объектstatus.adminSecretRef
Ссылка на Secret (в namespace модуля) с админ-учёткой бэкенда, которую контроллер использует для управления бакетами и ключами.
Не заполняется для
Heavy: его учётные данные RGW принадлежат Rook и лежат в namespace sds-elastic, а не модуля.-
строкаstatus.adminSecretRef.nameИмя Secret.
-
-
объектstatus.backendФактический бэкенд, реализующий выбранный профиль.
-
строкаstatus.backend.typeБэкенд, реализующий профиль.
Допустимые значения:
Garage,SeaweedFS,CephRGW -
строкаstatus.backend.versionЗапущенная версия бэкенда.
-
-
объектstatus.capacityИспользование хранилища по данным бэкенда.
-
строкаstatus.capacity.availableСвободная ёмкость, Kubernetes Quantity (BinarySI).
-
строкаstatus.capacity.lastUpdatedВремя последнего замера ёмкости.
-
строкаstatus.capacity.totalПолная ёмкость, Kubernetes Quantity (BinarySI).
-
строкаstatus.capacity.usedЗанятая ёмкость, Kubernetes Quantity (BinarySI).
-
строкаstatus.capacity.usedPercent
used / total * 100, с двумя знаками после запятой.
-
-
массив объектовstatus.conditionsПокомпонентные condition:
BackendReady,EndpointReadyи агрегатноеReady.-
строкаstatus.conditions.lastTransitionTimeВремя последнего перехода condition.
-
строкаstatus.conditions.messageЧеловекочитаемое описание текущего статуса.
Максимальная длина:
32768 -
целочисленныйstatus.conditions.observedGenerationЗначение
metadata.generation, для которого выставлен condition.Допустимые значения:
0 <= X -
строкаstatus.conditions.reasonМашинно-читаемая причина текущего статуса.
Длина:
1..1024Шаблон:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
строкаstatus.conditions.statusТекущий статус condition.
Допустимые значения:
True,False,Unknown -
строкаstatus.conditions.typeТип condition.
Максимальная длина:
316Шаблон:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
объектstatus.endpointS3-эндпойнт, через который клиенты обращаются к кластеру.
-
строкаstatus.endpoint.internalВнутрикластерный URL S3-эндпойнта (DNS Service).
-
строкаstatus.endpoint.regionРегион S3 по умолчанию.
-
-
целочисленныйstatus.observedGenerationПоследнее значение
metadata.generation, обработанное контроллером. -
строкаstatus.phaseАгрегатная фаза:
Pending,InProgress,Ready,Error.Допустимые значения:
Pending,InProgress,Ready,Error
-