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

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

Перед включением модуля необходимо разрешить использование экспериментальных модулей в ModuleConfig deckhouse. Для этого установите параметр allowExperimentalModules в true.

Deckhouse Platform устанавливает CRD, но не удаляет их при отключении модуля. Если вам больше не нужны созданные CRD, удалите их.

SystemBucket

Короткие имена: sb

Область: Namespaced
Версия: v1alpha1

Запрашивает бакет в системном объектном хранилище платформы. Контроллер создаёт бакет в системном бэкенде и кладёт в тот же namespace ConfigMap (см. status.connectionRef) с параметрами подключения к S3.

Ресурс предназначен только для компонентов Deckhouse. Он принимается исключительно в namespace с лейблом heritage: deckhouse, пользовательских прав на него не выдаётся.

Политики хранения данных нет: удаление SystemBucket удаляет бакет и все объекты в нём.

Учётные данные не выдаются и нигде не хранятся. Потребитель меняет токен своего ServiceAccount на эндпоинте выдачи (S3_STS_ENDPOINT из ConfigMap) на пару ключей, которую бэкенд перестаёт принимать не позднее чем через 30 минут. Кому и к какому бакету это разрешено — обычное право Kubernetes RBAC на виртуальные субресурсы systembuckets/read и systembuckets/write: доступ выдаётся и отзывается как любое другое право, и отзыв ничего не требует ротировать.

Ключ нужно продлевать. Просить новый ближе к концу срока, а не на каждый запрос: каждый запрос выпускает ключ, а живых ключей на бакет разрешено не больше 50.

  • spec
    объект
    Желаемое состояние бакета.
    • spec.bucketName
      строка

      Имя бакета в S3. По умолчанию <metadata.namespace>-<metadata.name>: пространство имён бакетов в бэкенде плоское, а SystemBucket — namespaced, поэтому такое значение по умолчанию не даёт двум компонентам занять одно и то же имя. Неизменяемо после создания.

      Схема ограничивает поле так же, как S3: от 3 до 63 символов, строчные латинские буквы, цифры и дефисы, начинается и заканчивается буквой или цифрой. Выведенное имя ограничено тем же, но не схемой — она его не видит: namespace и имя ресурса дают в сумме до 127 символов, поэтому имя, которое S3 не примет, отклоняет контроллер: ресурс создаётся, но получает BucketReady=False.

      Длина: 3..63

      Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$

    • spec.size
      строка

      Сколько бакет просит, в формате Kubernetes quantity.

      Значение становится квотой бакета в бэкенде — запись сверх неё отклоняется — и из него же data plane считает размер своих томов: хранилище выделяет сумму размеров всех SystemBucket, поэтому увеличение здесь и есть то, от чего растут тома.

      Значение по умолчанию намеренно небольшое: системный бакет — это рабочий набор компонента платформы, а не озеро данных.

      Увеличивать можно в любой момент; когда новое значение вступило в силу как квота бакета, показывает условие SizeUpToDate. Общая ёмкость PVC отражается в Module/system-s3.CapacityReady. Уменьшать нельзя: выделенные под значение тома не сжимаются (PersistentVolumeClaim уменьшать нельзя), а квота ниже того, что уже лежит в бакете, только сломала бы запись в него.

      По умолчанию: 1Gi

      Шаблон: ^[0-9]+(\.[0-9]+)?(E|P|T|G|M|k|Ei|Pi|Ti|Gi|Mi|Ki)?$

  • status
    объект
    Наблюдаемое состояние бакета.
    • status.bucketName
      строка
      Фактическое имя бакета, созданного в бэкенде.
    • status.conditions
      массив объектов
      Состояния по стадиям: BucketReady, ConnectionReady и агрегатное Ready. Кроме них, SizeUpToDate показывает, вступил ли в силу spec.size: Applied либо QuotaPending. Общие состояния хранилища, включая рост PVC и миграции Garage, публикуются в Module/system-s3.
      • status.conditions.lastTransitionTime
        строка
        Время последнего изменения статуса состояния.
      • status.conditions.message
        строка
        Человекочитаемое пояснение текущего статуса.

        Максимальная длина: 32768

      • status.conditions.observedGeneration
        целое число
        Значение metadata.generation, для которого состояние было выставлено в последний раз.

        Допустимые значения: 0 <= X

      • status.conditions.reason
        строка
        Машиночитаемая причина текущего статуса, пригодная для фильтрации в логах.

        Длина: 1..1024

        Шаблон: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$

      • status.conditions.status
        строка
        Текущий статус состояния.

        Допустимые значения: True, False, Unknown

      • status.conditions.type
        строка
        Тип состояния, например Ready, BucketReady, ConnectionReady или SizeUpToDate.

        Максимальная длина: 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.connectionRef
      объект

      Ссылка на ConfigMap (в namespace бакета) с параметрами подключения: S3_ENDPOINT (https), S3_REGION, S3_BUCKET, S3_CA_CERT (CA, которым проверяется эндпоинт), а для получения учётных данных — S3_STS_ENDPOINT, S3_STS_AUDIENCE, S3_STS_CA_CERT.

      Именно ConfigMap, а не Secret: секретного в нём ничего нет, потому что долгоживущих ключей модуль не выпускает.

      • status.connectionRef.name
        строка

        Обязательный параметр

        Имя ConfigMap.
    • status.endpoint
      строка
      Внутрикластерный URL S3-эндпойнта системного хранилища.
    • status.objects
      целое число
      Число объектов в бакете по данным бэкенда.
    • status.observedGeneration
      целое число
      Последнее значение metadata.generation, обработанное контроллером.
    • status.phase
      строка
      Агрегатная фаза: Pending, InProgress, Ready, Error.

      Допустимые значения: Pending, InProgress, Ready, Error

    • status.quotaBytes
      целое число
      Квота, которую бэкенд применяет к этому бакету, полученная из spec.size. Публикуется как наблюдаемое значение, а не копируется из spec: запись останавливает то, что держит бэкенд.
    • status.quotaObjects
      целое число
      Сколько объектов бэкенд разрешает хранить в этом бакете: spec.size, делённый на 64 КиБ. Каждый объект занимает на диске больше своих байт (метаданные, округление до блока файловой системы), и тома хранилища рассчитаны на этот перерасход только до такого числа объектов. Бакет, который его достиг, получает отказ в записи с 403 AccessDenied («Object quota is reached») даже ниже quotaBytes; увеличение spec.size поднимает обе квоты.
    • status.usedBytes
      целое число
      Сколько байт сейчас занято в бакете по данным бэкенда.