Компонент Deckhouse Virtualization Container Registry (DVCR) модуля virtualization — это специализированное хранилище образов контейнеров для хранения и кеширования образов ВМ. Компонент CDI модуля virtualization использует хранящиеся в DVCR образы в качестве источника для ресурсов InternalVirtualizationDataVolume, с помощью которых создаются диски виртуальных машин, управляемых KubeVirt.

Архитектура DVCR

Для упрощения схемы приняты следующие допущения:

  • На схеме контейнеры разных подов показаны как взаимодействующие напрямую. Фактически обмен выполняется через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса приводится над стрелкой.
  • Поды могут быть запущены в нескольких репликах, однако на схеме каждый под показан в единственном экземпляре.

Архитектура компонента DVCR модуля virtualization на уровне 2 модели C4 и его взаимодействия с другими компонентами DKP изображены на следующей диаграмме:

Архитектура компонента DVCR модуля virtualization

Компоненты DVCR

DVCR состоит из следующих компонентов:

  1. Dvcr — хранилище образов на базе Distribution. Distribution — это Open Source-проект, который является основой для хранения и распределения контейнерных образов и другого контента с использованием спецификации OCI Distribution Specification. Dvcr используется для хранения и кеширования образов ВМ.

    Компонент содержит следующие контейнеры:

    • dvcr — основной контейнер;
    • dvcr-garbage-collection — сайдкар-контейнер, выполняющий периодическое удаление образов, у которых нет соответствующих ресурсов в кластере;
    • kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к метрикам контейнера dvcr. Является Open Source-проектом.
  2. Dvcr-importerвременный под, состоящий из одного контейнера и запускаемый virtualization-controller для реализации различных сценариев импорта образов и дисков виртуальных машин, таких как:

    • импорт диска или образа ВМ из внешних источников (HTTP-источник, доступный по URL-ссылке, или хранилище образов) в хранилище DVCR;
    • импорт образа ВМ из внешних источников (HTTP-источник, доступный по URL-ссылке, или хранилище образов) в PVC-том. Dvcr-importer не импортирует диск напрямую в PVC. Он загружает источник в хранилище DVCR. Далее создаётся ресурс InternalVirtualizationDataVolume, и CDI уже импортирует образ из хранилища DVCR в PVC;
    • импорт образа ВМ, диска или снимка из ресурсов VirtualImage, ClusterVirtualImage, VirtualDisk или VirtualDiskSnapshot в хранилище DVCR.
  3. Dvcr-uploaderвременный под, состоящий из одного контейнера и запускаемый virtualization-controller для реализации следующих сценариев загрузки пользователем образов и дисков виртуальных машин:

    • загрузка в хранилище DVCR;
    • загрузка в PVC-том. Dvcr-uploader не загружает диск напрямую в PVC. Он загружает источник в хранилище DVCR. Далее создаётся ресурс InternalVirtualizationDataVolume, и CDI уже импортирует образ из хранилища DVCR в PVC.

Взаимодействия DVCR

DVCR взаимодействует со следующими компонентами:

  1. Kube-apiserver — выполняет get/list/watch-запросы ресурсов VirtualImages, ClusterVirtualImages и VirtualDisks для очистки неиспользуемых образов и координации.
  2. Внешние источники дисков или образов ВМ — читает диски или образы ВМ при реализации некоторых сценариев импорта в хранилище DVCR.

С DVCR взаимодействуют следующие внешние компоненты:

  1. Virtualization-controller — запускает поды dvcr-importer и dvcr-uploader для выполнения сценариев импорта и загрузки дисков и образов ВМ.
  2. Ingress-controller — пересылает запросы пользователя на загрузку диска или образа ВМ в хранилище DVCR через HTTP-эндпоинт сервиса dvcr-uploader.
  3. Cdi-importer — использует хранящиеся в DVCR образы в качестве источника для ресурсов InternalVirtualizationDataVolume.

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