Доступно в редакциях: Open/CE, BE, SE, SE+, Ultimate/EE, Core, Certified Core/CSE Lite (1.73), Certified Pro/CSE Pro (1.73)
Входит в расширения: Продвинутая защита инфраструктуры, Биллинг
Стадия жизненного цикла модуля: Preview
В модуле реализовано 16 алертов.
Модуль включен по умолчанию в наборе модулей Default.
Модуль выключен по умолчанию в наборах модулей: Managed, Minimal.
Параметры
Версия схемы: 1
- объектsettings
- объектsettings.https
Тип используемого сертификата.
При использовании этого параметра полностью переопределяются глобальные настройки
global.modules.https.Примеры:
https: mode: Disabledhttps: mode: OnlyInURIhttps: mode: CustomCertificate customCertificate: secretName: foobarhttps: 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.iohost: 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]))?$

