Доступно в редакциях:  Open/CE, BE, SE, SE+, Ultimate/EE, Core, Certified Core/CSE Lite (1.73), Certified Pro/CSE Pro (1.73)

Входит в расширения: Продвинутая защита инфраструктуры, Биллинг

В модуле реализовано 16 алертов.

Модуль включен по умолчанию в наборе модулей Default. Модуль выключен по умолчанию в наборах модулей: Managed, Minimal.

Как явно включить или отключить модуль...

Явно включить или выключить модуль можно одним из следующих способов:

  • С помощью веб-интерфейса Deckhouse. В разделе «Система» → «Управление системой» → «Deckhouse» → «Модули», откройте модуль registry, включите (или выключите) переключатель «Модуль включен». Сохраните изменения.

    Пример:

    Интерфейс включения и выключения модуля

  • С помощью Deckhouse CLI (d8).

    Используйте команду d8 system module enable для включения модуля, или d8 system module disable для выключения модуля (требуется Deckhouse CLI (d8), настроенный на работу с кластером).

    Пример включения модуля registry:

    d8 system module enable registry
    
  • С помощью ModuleConfig registry.

    Установите spec.enabled в true или false в ModuleConfig registry (создайте его, при необходимости).

    Пример манифеста для включения модуля registry:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: registry
    spec:
      enabled: true
    

Как настроить модуль...

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

  • С помощью веб-интерфейса Deckhouse.

    В разделе «Система» → «Управление системой» → «Deckhouse» → «Модули», откройте модуль registry, включите переключатель «Дополнительные настройки». Заполните необходимые поля формы на вкладке «Конфигурация», или укажите настройки модуля в формате YAML на вкладке «YAML», не включая секцию settings. Сохраните изменения.

    Пример:

    Интерфейс настройки модуля

    Вы также можете отредактировать объект ModuleConfig registry на вкладке «YAML» в окне настроек модуля («Система» → «Управление системой» → «Deckhouse» → «Модули», откройте модуль registry), указав версию схемы в параметре spec.version и необходимые параметры модуля в секции spec.settings.

  • С помощью Deckhouse CLI (d8) (требуется Deckhouse CLI (d8), настроенный на работу с кластером).

    Отредактируйте существующий ModuleConfig registry (подробнее о настройке Deckhouse читайте в документации), выполнив следующую команду:

    d8 k edit mc registry
    

    Внесите необходимые изменения в секцию spec.settings. При необходимости укажите версию схемы в параметре spec.version. Сохраните изменения.

    Вы также можете создать файл манифеста ModuleConfig registry, используя пример ниже. Заполните секцию spec.settings необходимыми параметрами модуля. При необходимости укажите версию схемы в параметре spec.version.

    Примените манифест с помощью следующей команды (укажите имя файла манифеста):

    d8 k apply -f <FILENAME>
    

    Пример файла манифеста ModuleConfig registry:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: registry
    spec:
      version: 1
      enabled: true
      settings: # Параметры модуля из раздела "Параметры" ниже.
    

Параметры

Версия схемы: 1

  • settings
    объект
    • settings.https
      объект

      Тип используемого сертификата.

      При использовании этого параметра полностью переопределяются глобальные настройки global.modules.https.

      Примеры:

      https:
        mode: Disabled
      
      https:
        mode: OnlyInURI
      
      https:
        mode: CustomCertificate
        customCertificate:
          secretName: foobar
      
      https:
        mode: CertManager
        certManager:
          clusterIssuerName: letsencrypt
      
      • settings.https.certManager
        объект

        Настройки для certmanager.

        • settings.https.certManager.clusterIssuerName
          строка

          Тип ClusterIssuer’а, используемого для заказа SSL-сертификата (в данный момент доступны letsencrypt, letsencrypt-staging, selfsigned, но возможно определить свои).

          По умолчанию: letsencrypt

          Пример:

          clusterIssuerName: letsencrypt
          
      • settings.https.customCertificate
        объект

        Настройки для использования пользовательского сертификата.

        • settings.https.customCertificate.secretName
          строка

          Имя секрета в неймспейсе d8-system, который будет использовать ingress registry.

          Секрет должен быть в формате kubernetes.io/tls.

      • settings.https.mode
        строка

        Режим работы HTTPS.

        Возможные значения:

        • CertManager — доступ по HTTPS с заказом сертификата согласно ClusterIssuer, заданному в параметре certManager.clusterIssuerName.
        • CustomCertificate — доступ по HTTPS с использованием сертификата из пространства имен d8-system.
        • Disabled — доступ только по HTTP.
        • OnlyInURI — доступ по HTTP, подразумевая, что перед ingress-контроллером находится внешний HTTPS-балансировщик, который терминирует HTTPS-трафик. Балансировщик должен обеспечивать перенаправление с HTTP на HTTPS.

        По умолчанию: CertManager

        Допустимые значения: Disabled, CertManager, CustomCertificate, OnlyInURI

    • settings.ingressClass
      строка

      Класс Ingress-контроллера, который используется для хранилища образов контейнеров.

      Опциональный параметр, по умолчанию используется глобальное значение modules.ingressClass.

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

    • settings.mode
      строка

      Управляет ли модуль тем, как кластер загружает образы.

      • Unmanaged — модуль не управляет ничем. Компоненты не создаются, конфигурация узлов не пишется; кластер продолжает загружать образы из того хранилища образов контейнеров, с которым был установлен. Это значение по умолчанию, поэтому включение модуля само по себе ничего не меняет.

        Переход в Unmanaged на кластере, которым модуль управлял, происходит не мгновенно: ссылки на образы по всему кластеру указывают на внутреннее хранилище образов контейнеров и переезжают на внешнее по мере того, как релиз каждого модуля рендерится заново. Поэтому модуль сразу перестаёт публиковать свой адрес, но продолжает его обслуживать, пока на него ссылается хоть что-нибудь — обычно это несколько минут. На кластере, который устанавливался с уже включённым модулем, он дополнительно записывает в реквизиты доступа к хранилищу образов контейнеров тот адрес, с которого сам загружал образы: иначе в кластере не останется записи о том, откуда брать образы, поскольку установщик записал туда внутренний адрес. До этого момента его компоненты продолжают работать, а алерт D8RegistryDrainStuck сообщает о переходе, который не может завершиться.

      • Managed — модуль владеет путём загрузки образов: настраивает container runtime на каждом узле через свой агент и, при необходимости, поднимает внутрикластерный кеш.

      Выбора реализации нет. Кластер, в котором предыдущая реализация модуля никогда не работала, всегда использует текущую; кластер, в котором работала, использует предыдущую до перевода её в состояние Unmanaged, после чего миграция завершается сама.

      По умолчанию: Unmanaged

      Допустимые значения: Managed, Unmanaged

    • settings.primary
      объект

      Единственный авторитетный источник образов компонентов DP. Действует только при mode: Managed: если параметр задан при значении mode, отличном от Managed, конфигурация будет отклонена с сообщением об ошибке.

      Если его не указать, кластер считается изолированным (air-gap): единственным источником становится внутрикластерный кеш, который наполняется командой d8 mirror push.

      Дополнительные хранилища образов контейнеров объявляются отдельными ресурсами RegistryUpstream, а не здесь: модулю или пользователю, который приносит своё хранилище образов контейнеров, не должно требоваться править чужой ModuleConfig.

      • settings.primary.upstream
        объект

        Хранилище образов контейнеров, из которого загружаются образы компонентов DP.

        Если не задан, кластер считается air-gap: внутрикластерный кеш становится авторитетным и наполняется командой d8 mirror push. Отсутствие параметра требует storage.cache: true и storage.source.

        Пример:

        upstream:
          host: registry.deckhouse.io
          path: "/deckhouse/ee"
          scheme: HTTPS
          auth:
            license: DECKHOUSE_LICENSE_KEY
        
        • settings.primary.upstream.auth
          объект

          Ключи доступа к хранилищу образов контейнеров.

          • settings.primary.upstream.auth.license
            строка

            Лицензионный ключ DP.

            Сокращённая запись пары username/password для registry.deckhouse.io. Взаимоисключающий с ними.

            Смена лицензии меняет ключи доступа к хранилищу образов контейнеров, поэтому она проходит через ту же preflight-пробу, что и смена адреса: новые ключи проверяются до переключения кластера, а при неудачной пробе остаются последние рабочие.

          • settings.primary.upstream.auth.password
            строка

            Пароль для базовой аутентификации.

          • settings.primary.upstream.auth.username
            строка

            Имя пользователя для базовой аутентификации.

        • settings.primary.upstream.ca
          строка

          PEM-сертификат удостоверяющего центра для проверки хранилища образов контейнеров при scheme: HTTPS.

          Если не указан, используется системное хранилище доверенных сертификатов.

        • settings.primary.upstream.host
          строка

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

          Хост хранилища образов контейнеров, опционально с портом.

          Примеры:

          host: registry.deckhouse.io
          
          host: my-private-registry.com:5000
          
        • settings.primary.upstream.mirrors
          массив объектов

          Дополнительные адреса, отдающие тот же контент, что и основное хранилище образов контейнеров, — для отказоустойчивости и балансировки.

          Зеркала не являются отдельными источниками: кеш хранит один дедуплицированный набор независимо от того, с какого зеркала пришли образы. Хранилище образов контейнеров с другим контентом — это дополнительный upstream, и его место в ресурсе RegistryUpstream.

          • settings.primary.upstream.mirrors.auth
            объект

            Ключи доступа к хранилищу образов контейнеров.

            • settings.primary.upstream.mirrors.auth.license
              строка

              Лицензионный ключ DP.

              Сокращённая запись пары username/password для registry.deckhouse.io. Взаимоисключающий с ними.

              Смена лицензии меняет ключи доступа к хранилищу образов контейнеров, поэтому она проходит через ту же preflight-пробу, что и смена адреса: новые ключи проверяются до переключения кластера, а при неудачной пробе остаются последние рабочие.

            • settings.primary.upstream.mirrors.auth.password
              строка

              Пароль для базовой аутентификации.

            • settings.primary.upstream.mirrors.auth.username
              строка

              Имя пользователя для базовой аутентификации.

          • settings.primary.upstream.mirrors.ca
            строка

            PEM-сертификат удостоверяющего центра для проверки зеркала.

          • settings.primary.upstream.mirrors.host
            строка

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

            Хост зеркала, опционально с портом.

          • settings.primary.upstream.mirrors.path
            строка

            Префикс пути к репозиторию внутри зеркала.

          • settings.primary.upstream.mirrors.scheme
            строка

            Протокол подключения к зеркалу.

            По умолчанию: HTTPS

            Допустимые значения: HTTP, HTTPS

        • settings.primary.upstream.path
          строка

          Префикс пути к репозиторию внутри хранилища образов контейнеров.

          Пример:

          path: "/deckhouse/ee"
          
        • settings.primary.upstream.scheme
          строка

          Протокол подключения к хранилищу образов контейнеров.

          Используйте HTTP только для незащищённых доверенных хранилищ образов контейнеров.

          По умолчанию: HTTPS

          Допустимые значения: HTTP, HTTPS

    • settings.storage
      объект

      Внутрикластерный кеш хранилища образов контейнеров. Действует только при mode: Managed: если параметр задан при значении mode, отличном от Managed, конфигурация будет отклонена с сообщением об ошибке.

      • settings.storage.cache
        булевый

        Идут ли загрузки через внутрикластерный кеш на master-узлах.

        Это одна из двух осей конфигурации, вторая — задан ли primary.upstream. Вместе они покрывают все поддерживаемые схемы:

        • cache: false с заданным upstream — узлы загружают образы напрямую из upstream, кеш не разворачивается.
        • cache: true с заданным upstream — сквозной кеш, наполняется из upstream.
        • cache: true без upstream — air-gap: кеш является единственным источником образов и наполняется командой d8 mirror push.

        Включение и выключение кеша — безопасная идемпотентная перенастройка. Единственный переход с условием — снятие upstream при включённом кеше: оно вступает в силу только после того, как лидер кеша содержит весь ожидаемый набор образов, поэтому узлы никогда не остаются отрезанными.

        По умолчанию: false

      • settings.storage.garbageCollection
        объект

        Когда кеш освобождает диск, занятый релизами, которые кластер уже прошёл.

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

        На время сборки одна реплика переводится в режим только для чтения. Она продолжает отдавать все образы, которые держит; чего она не может — сохранить результат промаха кеша или принять d8 mirror push. Одновременно собирает только одна реплика, поэтому остальные не затронуты.

        • settings.storage.garbageCollection.enabled
          булевый

          Освобождает ли кеш свой диск вообще.

          Выключение оставляет хранилище расти без предела, и это осмысленно только при диске, размер которого делает это неважным.

          По умолчанию: true

        • settings.storage.garbageCollection.schedule
          строка

          Cron-выражение из пяти полей, в собственном часовом поясе реплик.

          По умолчанию — ночной час. Если у группы узлов master задано окно обслуживания, вместо этого берётся начало этого окна: время, которое оператор уже объявил безопасным для нарушения работы.

          Шаблон: ^\s*\S+\s+\S+\s+\S+\s+\S+\s+\S+\s*$

          Примеры:

          schedule: 17 3 * * *
          
          schedule: 0 2 * * Sun
          
      • settings.storage.size
        строка

        Сколько кеш может занимать на каждом мастере — бюджет хранилища. Registry соблюдает его при каждой записи.

        Когда хранилище заняло столько, оно отклоняет новые записи (наполнение, репликацию, d8 mirror push) и продолжает отдавать всё, что в нём есть. Ради места ничего не удаляется: это делает только сборка мусора.

        Независимо от этого значения хранилище никогда не занимает место, оставленное для узла: мягкий порог выселения kubelet (10% файловой системы, не больше 40 ГиБ) плюс запас (10%, не больше 20 ГиБ). Поэтому незаданное или слишком большое значение не переполнит диск мастера. Но тогда единственным пределом остаётся резерв, о чём сообщает алерт D8RegistryStoreUnbounded.

        Задавайте не меньше двух релизов набора образов и так, чтобы значение помещалось на диске хранилища сверх резерва.

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

        Пример:

        size: 50Gi
        
      • settings.storage.source
        объект

        Набор образов, который должен оказаться в кеше.

        Обязателен в air-gap: без upstream, к которому можно откатиться, полнота должна быть вычислимой, прежде чем кешу можно доверять как единственному источнику.

        • settings.storage.source.bundleRef
          строка

          Имя набора образов, например bundle, залитого командой d8 mirror push.

          Пример:

          bundleRef: d8-mirror-bundle
          
        • settings.storage.source.expectedDigests
          целочисленный

          Количество уникальных дайджестов в наборе.

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

          Пример:

          expectedDigests: 459
          
    • settings.whitelistSourceRanges
      массив строк

      Список адресов в формате CIDR, которым разрешено подключение к хранилищу образов контейнеров. Если не указано, то разрешено подключение с любых адресов.

      Пример:

      whitelistSourceRanges:
      - 10.0.0.0/10
      - 192.168.0.0/16
      
      • Элемент массива
        строка

        Шаблон: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))?$