Virtualization-controller компонента Virtualization-API модуля virtualization позволяет импортировать образы и диски ВМ из различных источников в PVC-тома, используемые в качестве дисков ВМ, управляемых KubeVirt.

KubeVirt — это Open Source-проект, который позволяет запускать, развёртывать и управлять ВМ с использованием Kubernetes в качестве платформы оркестрации. Он обеспечивает совместную работу традиционных ВМ и контейнерных рабочих нагрузок в одном кластере Kubernetes, предоставляя единую плоскость управления.

В зависимости от сценариев импорта или загрузки образов и дисков ВМ virtualization-controller запускает следующие временные поды:

  1. D8v-<vi|cvi>-importer — под, состоящий из одного контейнера d8v-dvcr-importer и запускаемый для реализации следующих сценариев импорта образов и дисков ВМ в хранилище DVCR:

    • импорт диска или образа ВМ из внешних источников (HTTP-источник, доступный по URL, или хранилище образов);
    • импорт образа ВМ, диска или снимка из ресурсов VirtualImage, ClusterVirtualImage, VirtualDisk или VirtualDiskSnapshot.
  2. D8v-<vi|cvi>-uploader — под, состоящий из одного контейнера d8v-dvcr-uploader и запускаемый для загрузки пользователем образов и дисков ВМ в хранилище DVCR.

  3. D8v-<vd|vi>-pvc-importer — под, состоящий из одного контейнера d8v-pvc-importer и запускаемый для импорта образа ВМ из хранилища образов (DVCR) в PVC-том. Поддерживается только импорт данных типа KubeVirt, то есть импортируемый образ должен являться диском ВМ KubeVirt. При необходимости pvc-importer автоматически распакует и преобразует файл из поддерживаемых форматов в формат raw или qcow2 (в зависимости от режима тома (volume mode)). Также будет изменён размер диска, чтобы использовать всё доступное пространство. Данные в процессе импорта сохраняются во временный первичный (prime) PVC. После успешного копирования данных в первичный PVC virtualization-controller выполняет привязку целевого PVC (PVC-приёмника) к PV первичного PVC, а первичный PVC и оригинальный PV целевого PVC удаляются.

  4. D8v-pvc-pvc-source-importer и d8v-pvc-pvc-target-importer — поды, состоящие из одного контейнера d8v-pvc-source-importer и одного контейнера d8v-pvc-target-importer соответственно и запускаемые для импорта образа ВМ из одного PVC-тома в другой PVC-том (клонирование по сети). PVC-источник монтируется как сетевое блочное устройство с использованием протокола Network Block Device (NBD) в поде d8v-pvc-pvc-source-importer, к которому обращается приложение, запущенное в контейнере пода d8v-pvc-pvc-target-importer. Данные в процессе импорта сохраняются во временный первичный (prime) PVC. После успешного копирования данных в первичный PVC virtualization-controller выполняет привязку целевого PVC (PVC-приёмника) к PV первичного PVC, а первичный PVC и оригинальный PV целевого PVC удаляются.

Virtualization-controller в процессе импорта образа или диска ВМ собирает статистику импорта непосредственно с запущенного временного пода и рассчитывает на ее основе прогресс скачивания в процентах, а также среднюю и текущую скорости скачивания для отображения в статусе соответствующего кастомного ресурса (VirtualImage, ClusterVirtualImage или VirtualDisk).

Также virtualization-controller поддерживает следующие сценарии импорта образов и дисков ВМ, не требующие запуска временных подов:

  • импорт образа ВМ из хранилища образов в PVC-том;
  • импорт образа ВМ из снимка тома (ресурс VolumeSnapshot) в PVC-том;
  • импорт образа ВМ из одного PVC-тома в другой PVC-том (клонирование средствами CSI-драйвера);
  • создание пустого PVC-тома.

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

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

Взаимодействия компонентов модуля virtualization при импорте и загрузке образов и дисков ВМ изображены на следующей диаграмме:

Взаимодействия компонентов модуля virtualization при импорте и загрузке образов и дисков ВМ

В процессе импорта образов и дисков ВМ происходит взаимодействие со следующими внешними компонентами:

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

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