Подключение 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 не может быть установлен до получения метаданных.

Дополнительные ресурсы