Подключение Deckhouse Platform (DP) к container registry, содержащему пакеты приложений, выполняется с помощью PackageRepository. После подключения DP автоматически сканирует реестр и создаёт объекты ApplicationPackageVersion для каждой обнаруженной версии пакета.
Пример манифеста PackageRepository:
apiVersion: deckhouse.io/v1alpha1
kind: PackageRepository
metadata:
name: my-registry
spec:
registry:
repo: registry.example.com/packages
scheme: HTTPS
dockerCfg: <base64-encoded-docker-config>
Управление аутентификацией и интервалом сканирования
Аутентификация
Для аутентификации в реестре может использоваться один из следующих способов:
dockerCfg: Docker-конфиг в формате base64 (формат~/.docker/config.json). Предпочтителен, если реестр использует токен-based аутентификацию.-
login+password: явные учётные данные.spec: registry: repo: registry.example.com/packages scheme: HTTPS login: my-user password: my-password
Если реестр использует самоподписанный TLS-сертификат, передайте его через параметр ca:
spec:
registry:
repo: registry.example.com/packages
scheme: HTTPS
dockerCfg: <base64-encoded-docker-config>
ca: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Интервал сканирования
По умолчанию DP пересканирует реестр каждые 6 часов. Переопределить интервал можно с помощью параметра scanInterval:
spec:
registry:
repo: registry.example.com/packages
scanInterval: 1h30m
Проверка состояния репозитория
Состояние репозитория отображается в статусе объекта PackageRepository.
Для вывода краткой информации о статусе, используйте следующую команду:
d8 k get packagerepository <REPOSITORY_NAME>
Колонки вывода:
| Колонка | Описание |
|---|---|
Phase |
Текущее состояние репозитория |
Scan |
Время последнего сканирования |
MSG |
Сообщение из условия последнего сканирования |
Packages |
Общее количество обнаруженных пакетов (скрыто по умолчанию, используйте -o wide) |
Для получения детальной информации о статусе, используйте следующую команду:
d8 k get packagerepository <REPOSITORY_NAME> -o yaml
Ключевые поля статуса:
| Поле | Описание |
|---|---|
status.phase |
Текущая фаза репозитория |
status.lastScanTime |
Время последнего сканирования с любым результатом |
status.lastChangeTime |
Время последнего сканирования, которое нашло хотя бы одну новую версию |
status.lastNewVersions |
Количество новых версий, найденных при последнем сканировании |
status.packagesCount |
Общее число пакетов в репозитории |
status.packages[] |
Список пакетов с полями name и type |
status.conditions |
Детальные условия, включая LastScanSucceeded |
Условие LastScanSucceeded:
d8 k get packagerepository my-registry \
-o jsonpath='{.status.conditions[?(@.type=="LastScanSucceeded")].message}'
Просмотр обнаруженных версий пакетов
После успешного сканирования в кластере появляются объекты ApplicationPackageVersion (можно использовать сокращенное имя — apv):
d8 k get apv
Пример вывода:
NAME PACKAGE REPOSITORY TRANSITIONTIME METADATALOADED MESSAGE USEDBY
my-registry-redis-v7.2.0 redis my-registry 5m True
my-registry-postgres-v15.0.0 postgres my-registry 5m True
Фильтрация по имени пакета, можно использовать следующую команду (в примере фильтруются версии пакета redis):
d8 k get apv -l package=redis
MetadataLoaded=True означает, что OpenAPI-схема пакета, описание и требования успешно загружены из реестра. Пакет с MetadataLoaded=False не может быть установлен до получения метаданных.