Образ хранит содержимое диска, из которого владельцы проектов создают диски виртуальных машин. Кластерный образ ClusterVirtualImage доступен во всех неймспейсах и проектах кластера, поэтому загруженный однажды образ используют сразу все проекты.

Образ появляется в кластере в три шага:

  1. Администратор создаёт ресурс ClusterVirtualImage и указывает в нём источник данных.
  2. Deckhouse Platform (DP) загружает образ из этого источника во внутреннее хранилище (DVCR).
  3. Загруженный образ становится доступен для создания дисков.

Источником образа может быть HTTP-сервер с файлом образа, хранилище образов контейнеров или файл на вашем компьютере, который вы загружаете из командной строки. Кроме того, образ можно создать из другого образа, из диска виртуальной машины или из снимка диска.

Ход создания образа показывает колонка PHASE в выводе d8 k get cvi, её значения описаны в поле .status.phase. Следить за созданием в реальном времени помогает ключ -w, а если образ надолго остаётся не готов, причину подскажет блок .status.conditions и команда d8 k describe cvi.

Пока образ не перешёл в фазу Ready, блок .spec можно менять, и после изменения загрузка начнётся заново. У готового образа блок .spec изменить уже нельзя. Все параметры образа описаны в ClusterVirtualImage.

Типы и форматы образов

Образы бывают двух видов:

  • ISO-образ — установочный образ для первоначальной установки операционной системы (ОС). Такие образы выпускают производители ОС и применяют их для установки на физические и виртуальные серверы.
  • Образ диска с предустановленной системой — содержит уже установленную и настроенную ОС, готовую к работе сразу после создания виртуальной машины (ВМ). Такие образы публикуют разработчики дистрибутивов, либо вы готовите их самостоятельно.

Готовые образы с предустановленной системой публикуют разработчики дистрибутивов. В таблице приведены страницы загрузки и имена пользователей, которые заданы в этих образах по умолчанию:

Дистрибутив Пользователь по умолчанию
AlmaLinux almalinux
AlpineLinux alpine
AltLinux altlinux
AstraLinux astra
CentOS cloud-user
Debian debian
Rocky rocky
Ubuntu ubuntu

DP принимает файл образа в следующих форматах:

  • qcow2;
  • raw;
  • vmdk;
  • vdi;
  • vhd;
  • vhdx.

Образ можно передать сжатым алгоритмом gz, xz или zst, DP распакует его при загрузке.

Тип и размер образа DP определяет сам и записывает их в статус ресурса. Размеров два, и оба видны в выводе команды d8 k get cvi -o wide:

  • STOREDSIZE — объём, который образ занимает в хранилище. Для образа, загруженного в сжатом виде, он меньше распакованного размера. По этой колонке удобно оценивать, сколько места образы занимают в DVCR.
  • UNPACKEDSIZE — размер образа после распаковки. Он задаёт минимальный размер диска, который получится создать из этого образа.

Создавая диск из образа, указывайте размер не меньше значения UNPACKEDSIZE. Если размер не задан, диск создаётся ровно по распакованному размеру образа.

Создание кластерного образа с HTTP-сервера

Проще всего создать образ, указав ссылку на файл, который лежит на HTTP-сервере.

  • В командной строке
  • В веб-интерфейсе
  1. Создайте ресурс ClusterVirtualImage:

    d8 k apply -f - <<EOF
    apiVersion: virtualization.deckhouse.io/v1alpha2
    kind: ClusterVirtualImage
    metadata:
      name: ubuntu-24-04
    spec:
      # Источник для создания образа.
      dataSource:
        type: HTTP
        http:
          url: https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
    EOF
    
  2. Проверьте, что образ создан:

    d8 k get clustervirtualimage ubuntu-24-04
    
    # Короткий вариант команды.
    d8 k get cvi ubuntu-24-04
    

    Пример вывода:

    NAME           PHASE   CDROM   PROGRESS   AGE
    ubuntu-24-04   Ready   false   100%       23h
    

Чтобы DP сверил скачанный файл с контрольной суммой, добавьте в источник блок checksum. Если файл не совпал ни с одной из указанных сумм, образ перейдёт в фазу Failed.

  1. Перейдите на вкладку «Система», далее в раздел «Виртуализация» → «Кластерные образы».
  2. Нажмите кнопку «Создать», затем в блоке «Источник» выберите «По ссылке».
  3. В поле «Имя образа» введите имя образа.
  4. В поле «URL» укажите ссылку на образ.
  5. Нажмите кнопку «Создать».
  6. Дождитесь, когда образ перейдёт в состояние «Готов».

Создание кластерного образа из хранилища образов контейнеров

DP умеет забирать образ из внешнего хранилища образов контейнеров, но файл диска должен лежать в образе контейнера по пути /disk. Ниже показано, как подготовить такой образ контейнера и создать из него кластерный образ.

  • В командной строке
  • В веб-интерфейсе
  1. Скачайте файл образа на локальную машину:

    curl -L https://cloud-images.ubuntu.com/minimal/releases/noble/release/ubuntu-24.04-minimal-cloudimg-amd64.img -o ubuntu2404.img
    
  2. Создайте Dockerfile со следующим содержимым:

    FROM scratch
    COPY ubuntu2404.img /disk/ubuntu2404.img
    
  3. Соберите образ контейнера. В примере используется хранилище docker.com, для работы с которым нужны учётная запись и настроенное окружение:

    docker build -t docker.io/<USERNAME>/ubuntu2404:latest
    

    Здесь <USERNAME> — имя пользователя, указанное при регистрации в хранилище.

  4. Загрузите собранный образ контейнера в хранилище:

    docker push docker.io/<USERNAME>/ubuntu2404:latest
    
  5. Создайте ресурс ClusterVirtualImage, указав путь к образу контейнера:

    d8 k apply -f - <<EOF
    apiVersion: virtualization.deckhouse.io/v1alpha2
    kind: ClusterVirtualImage
    metadata:
      name: ubuntu-2404
    spec:
      dataSource:
        type: ContainerImage
        containerImage:
          image: docker.io/<USERNAME>/ubuntu2404:latest
    EOF
    

DP работает только с теми хранилищами, где включён TLS. Если хранилище использует собственный центр сертификации, передайте цепочку сертификатов в параметре caBundle, а учётные данные для доступа к закрытому хранилищу возьмите из секрета, указанного в параметре imagePullSecret.

  1. Перейдите на вкладку «Система», далее в раздел «Виртуализация» → «Кластерные образы».
  2. Нажмите кнопку «Создать», затем в блоке «Источник» выберите «Из реестра».
  3. В поле «Имя образа» введите имя образа.
  4. В поле «Образ в реестре контейнеров» укажите ссылку на образ.
  5. Нажмите кнопку «Создать».
  6. Дождитесь, когда образ перейдёт в состояние «Готов».

Загрузка кластерного образа из командной строки

Если файл образа лежит на вашем компьютере, загрузите его напрямую. DP создаёт для этого временную точку приёма данных и ждёт загрузки.

  • В командной строке
  • В веб-интерфейсе
  1. Создайте ресурс ClusterVirtualImage с источником Upload:

    d8 k apply -f - <<EOF
    apiVersion: virtualization.deckhouse.io/v1alpha2
    kind: ClusterVirtualImage
    metadata:
      name: some-image
    spec:
      # Настройки источника образа.
      dataSource:
        type: Upload
    EOF
    

    Ресурс перейдёт в фазу WaitForUserUpload и будет готов принять файл. Начните загрузку в течение 10 минут, иначе ресурс перейдёт в фазу Failed и его придётся создать заново.

  2. Получите адреса, по которым принимается файл:

    d8 k get cvi some-image -o jsonpath="{.status.imageUploadURLs}" | jq
    

    Пример вывода:

    {
      "external":"https://virtualization.example.com/upload/<SECRET_URL>",
      "inCluster":"http://10.222.165.239/upload"
    }
    

    Адрес inCluster используйте, если загружаете файл с одного из узлов кластера, а external — во всех остальных случаях.

  3. Загрузите файл по выбранному адресу. В примере сначала скачивается образ Cirros, а затем отправляется в кластер:

    curl -L http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img -o cirros.img
    curl https://virtualization.example.com/upload/<SECRET_URL> --progress-bar -T cirros.img | cat
    

    Здесь <SECRET_URL> — последняя часть адреса из предыдущего шага.

  4. Убедитесь, что образ перешёл в фазу Ready:

    d8 k get cvi some-image
    

    Пример вывода:

    NAME         PHASE   CDROM   PROGRESS   AGE
    some-image   Ready   false   100%       1m
    

Загруженный файл тоже можно сверить с контрольной суммой, для этого задайте блок checksum в источнике данных.

  1. Перейдите на вкладку «Система», далее в раздел «Виртуализация» → «Кластерные образы».
  2. Нажмите кнопку «Создать», затем в блоке «Источник» выберите «Загрузить».
  3. В поле «Имя образа» введите имя образа.
  4. В блоке «Загрузить файл» перетащите файл в выделенную область или нажмите «выберите на вашем компьютере».
  5. Выберите файл в открывшемся файловом менеджере.
  6. Нажмите кнопку «Создать».
  7. Дождитесь, когда образ перейдёт в состояние «Готов».

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