Образ хранит содержимое диска, из которого владельцы проектов создают диски виртуальных машин. Кластерный образ ClusterVirtualImage доступен во всех неймспейсах и проектах кластера, поэтому загруженный однажды образ используют сразу все проекты.
Образ появляется в кластере в три шага:
- Администратор создаёт ресурс ClusterVirtualImage и указывает в нём источник данных.
- Deckhouse Platform (DP) загружает образ из этого источника во внутреннее хранилище (DVCR).
- Загруженный образ становится доступен для создания дисков.
Источником образа может быть 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-сервере.
- В командной строке
- В веб-интерфейсе
-
Создайте ресурс 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 -
Проверьте, что образ создан:
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.
- Перейдите на вкладку «Система», далее в раздел «Виртуализация» → «Кластерные образы».
- Нажмите кнопку «Создать», затем в блоке «Источник» выберите «По ссылке».
- В поле «Имя образа» введите имя образа.
- В поле «URL» укажите ссылку на образ.
- Нажмите кнопку «Создать».
- Дождитесь, когда образ перейдёт в состояние «Готов».
Создание кластерного образа из хранилища образов контейнеров
DP умеет забирать образ из внешнего хранилища образов контейнеров, но файл диска должен лежать в образе контейнера по пути /disk. Ниже показано, как подготовить такой образ контейнера и создать из него кластерный образ.
- В командной строке
- В веб-интерфейсе
-
Скачайте файл образа на локальную машину:
curl -L https://cloud-images.ubuntu.com/minimal/releases/noble/release/ubuntu-24.04-minimal-cloudimg-amd64.img -o ubuntu2404.img -
Создайте
Dockerfileсо следующим содержимым:FROM scratch COPY ubuntu2404.img /disk/ubuntu2404.img -
Соберите образ контейнера. В примере используется хранилище docker.com, для работы с которым нужны учётная запись и настроенное окружение:
docker build -t docker.io/<USERNAME>/ubuntu2404:latestЗдесь
<USERNAME>— имя пользователя, указанное при регистрации в хранилище. -
Загрузите собранный образ контейнера в хранилище:
docker push docker.io/<USERNAME>/ubuntu2404:latest -
Создайте ресурс 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.
- Перейдите на вкладку «Система», далее в раздел «Виртуализация» → «Кластерные образы».
- Нажмите кнопку «Создать», затем в блоке «Источник» выберите «Из реестра».
- В поле «Имя образа» введите имя образа.
- В поле «Образ в реестре контейнеров» укажите ссылку на образ.
- Нажмите кнопку «Создать».
- Дождитесь, когда образ перейдёт в состояние «Готов».
Загрузка кластерного образа из командной строки
Если файл образа лежит на вашем компьютере, загрузите его напрямую. DP создаёт для этого временную точку приёма данных и ждёт загрузки.
- В командной строке
- В веб-интерфейсе
-
Создайте ресурс 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и его придётся создать заново. -
Получите адреса, по которым принимается файл:
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— во всех остальных случаях. -
Загрузите файл по выбранному адресу. В примере сначала скачивается образ 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>— последняя часть адреса из предыдущего шага. -
Убедитесь, что образ перешёл в фазу
Ready:d8 k get cvi some-imageПример вывода:
NAME PHASE CDROM PROGRESS AGE some-image Ready false 100% 1m
Загруженный файл тоже можно сверить с контрольной суммой, для этого задайте блок checksum в источнике данных.
- Перейдите на вкладку «Система», далее в раздел «Виртуализация» → «Кластерные образы».
- Нажмите кнопку «Создать», затем в блоке «Источник» выберите «Загрузить».
- В поле «Имя образа» введите имя образа.
- В блоке «Загрузить файл» перетащите файл в выделенную область или нажмите «выберите на вашем компьютере».
- Выберите файл в открывшемся файловом менеджере.
- Нажмите кнопку «Создать».
- Дождитесь, когда образ перейдёт в состояние «Готов».